本次主要介绍的是微机原理中全译码方式下地址范围的计算以及程序编写。
先介绍一个全译码方式下存储器SRAM扩展例子,
先简要讲解一下存储过程,在总线周期的T1时刻,8086总线上总线上出现地址信息,在T1快要结束时刻,ALE引脚产生下降沿脉冲,经过非门产生一个上升沿脉冲,此时刻地址信息被锁存入74273锁存器中,此后的T2~T4时刻ALE引脚变为无效,所以在一个总线周期中T1时刻后锁存器状态不在改变,T3时刻出现数据信息,由于ALE无效,所以数据信息通过总线存入62256 SRAM存储芯片中,BHE和A0控制奇偶体的选择。
由于选中的端口为Y1口,所以地址范围应该为:
所以起始地址为10000H。
汇编中程序编写就为:
CODE SEGMENT
ASSUME CS:CODE
START:MOV AX,1000H
MOV DS,AX
。。。。。。
计算出来的地址值为10000H,为什么在汇编中起始地址为1000H呢?
这个问题当时我也想了很长时间,后来我发现咱们计算出的地址范围其实是实际物理地址,所以逻辑地址就是:物理地址除以10H-偏移地址。
所以段基地址就为1000H。
在举一个例子:
某8088 CPU系统的存储器连接如图,请分别写出1#和2#芯片的地址范围,并编写程序段使2#芯片的前100个字节内容均置为93H。
由于74LS138译码器选择的为Y1,和Y2端口,所以地址范围选择为:
片1:
由于地址线为A0~A12,所以:
所以,片1的地址范围为:C4000H~C5FFFH。
片2计算方法与片1相同,C2000H~C3FFFH。
程序编写:
CODE SEGMENT
ASSUME CS:CODE
START:MOV AX,0C200H ;这地方要注意,数据不能以字母开头,前面需要记得加0
MOV DS,AX
MOV BX,0
MOV CX,100
MOV DL,93H
MOV BYTE PTR[BX],0
SIM: MOV [BX],DL
INC BX
LOOP SIM
ENDLESS:JMP ENDLESS
CODE ENDS
END START