【例3.2】 MOV AX, 5060H MOV [2100H], AX
指出执行这两条指令组成的程序段后,相应存储单元中的内容是什么? 第一条指令的执行结果是AX=5060H,第二条指令将AX中的内容传送到内存中偏移地址为2100H的字单元中,所以: [2100H]=60H [2101H]=50H
【例3.3】 PUSH AX
指令执行前SS=4000H,SP=2500H,AX=3125H,指令执行过程及堆栈操作如图3.8所示。
指令执行时,首先SP减1,则SP=24FFH,将AX的高位字节AH=31H送入SP和SS所指定的424FFH单元中,然后将SP再减1,此时SP=24FEH,将AX的低位字节AL=25H送入SP和SS所指定的424FEH单元中。执行完PUSH指令,SP=24FEH,在原来SP=2500H的基础上减少2。 【例3.4】 POP BX
指令执行前,SS=8000H,SP=2000H,堆栈区段偏移地址为2000H单元中的内容为0BH,2001H单元中的内容为0AH。指令执行过程及堆栈操作如图3.9所示。
【例3.5】 分析下列程序段的执行情况。
MOV SP, 3000H ; 设置堆栈的底部,SP=3000H
MOV AX, 1234H ; 设置AX初始值,AX=1234H
MOV BX, 5678H ; 设置BX初值,BX=5678H PUSH AX
PUSH BX ; 将AX, BX内容压入堆栈 POP AX
POP BX ; 由堆栈弹出数据送入AX, BX中
其执行过程如图3.10所示。
【例5.2】 用两片2K×8b的RAM芯片6116
组成4K×8b的存储器。
字扩展设计如图5.15所示。图中两片6116的片内信号线A10~A0、D7~D0、
、分别与系统的地址线A10~A0、
数据线D7~D0和读/写控制线、连接。1#芯片的片选信号线与A11连接,2#芯片的片选信号线与A11反相之后连接。当A11为低电平时,选择1#芯片读/写;当A11
为高电平时,选择2#芯片读/写。由图可见,
1#芯片的地址范围是000H~7FFH,2#芯片的地址范围是800H~FFFH。地址分配情况见表5.9。
【例5.4】 为某8位机(地址总线为16位)设计一个32KB容量的存储器。要求采用2732芯片构成8KB EPROM区,地址从0000H开始;采用6264芯片构成24KB RAM区,地址从2000H开始。片选信号采用全译码法。
解:第一步,确定实现24KB RAM存储体所需要的RAM芯片的数量。
因为每片6264提供213×8位的存储容量,所以实现24KB存储容量所需要的RAM芯片数量是
RAM数量==3(片)
第二步,确定实现8KB ROM存储体所需要的EPROM芯片数量。
由于每片2732提供212×8位的存储容量,所以实现8KB存储容量所需要的EPROM芯片数量是
EPROM数量==2(片)
第三步,存储器芯片片选择信号的产生及电路设计。
采用74LS138译码器全译码的方法产生片选信号。存储器地址分配情况如图5.18所
示。 由图5.18地址分配情况可知,A12~A0作为片内地址线,A15~A13作为3-8译码器74LS138的输入,产生的译码输出000~011作为芯片的片选信号。存储器扩展电路如图5.19所示。两片2732的片内地址A11~A0与系统地址线A11~A0连接,译码器输出端
和A12经“或门”输出与1#2732的
连接,A12反相后和译码器输出端
经“或门”输出与2#2732的
连接。三片6264的片内地址A12~A0与系统地址线A12~A0连接,它们的片选
分别连接译码器的输出端,
, ,系统地址线A15~A13
连接译码器74LS138的输入端A, B, C。
【例7.6】
某系统使用一片8254,要求完成如下功能: ① 计数器0对外部事件计数,记满100次向CPU发出中断请求; ② 计数器1产生频率为1kHz的方波信号,设输入时钟CLK1为2.5MHz; ③ 计数器2作为标准时钟,每秒向CPU发一次中断请求,输入时钟CLK2由OUT1提供。
根据题意,确定相应通道的工作方式控制字及计数常数:
计数器0的控制字为00010000B,即10H(方式0、二进制计数),计数常数为100。 计数器1的控制字为01110110B,即76H
(方式3、二进制计数)。计数常数为:=2.5MHz/1kHz=2500。
计数器2的控制字为10110001B,即B1H(方式0、BCD计数)。 计数常数为:=1s×1kHz=1000。
设8254的端口地址为80H~83H,编制初始化程序如下:
MOV AL, 10H ; 计数器0控制字
OUT 83H, AL ; 写入控制端口
MOV AL, 100 ; 计数常数100
OUT 80, AL ; 写入计数器0的低字节
MOV AL, 76H ; 计数器1控制字
OUT 83H, AL ; 写入控制端口
MOV AX, 2500 ; 计数常数2500
OUT 81H, AL ; 写入计数器1低字节
MOV AL, AH
OUT 81H, A ; 写入计数器1高字节
MOV AL, 0B1H ; 计数器2控制字
OUT 83H, AL ; 写入控制端口
MOV AX, 1000H ; 计数常数1000(BCD码为1000H)
OUT 82H, AL ; 写入计数器2低字节
MOV AL, AH
OUT 82H, AL ; 写入计数器2高字节
【例7.10】 在实际应用中,经常需要用到线性增长的电压去控制检测过程或者作为扫描电压去控制电子束的移动。我们利用DAC芯片,采用软件的方法产生这个线性增长的电压,如图7.71所示。设DAC0832的端口地址为PORT(由译码电路产生)。 程序段如下:
MOV DX, PORT ; DAC端口地址
MOV AL, 00H ; 初始值
REPEAT: OUT DX, AL ; 输出, 完成D/A转换
INC AL ; 增量
JMP REPEAT ; 重复转换过程