给你看下我的学习笔记吧:
一、汇编语言-检测点2.2
(1)给定段地址为0001H,仅仅通过变化偏移地址寻址,CPU的寻址范围?
0001H*16+0000H——0001H*16+FFFFH即00010H~1000FH。
(2)一数据存放在内存20000H单元中,现给定段地址为SA,若用偏移地址寻到此单元,则SA最小最大各多少?
20000H=(SA*16+EA);EA取值范围:0000H~FFFFH---->SA*16=(20000H~10001H)
则SA为10001H/16~2000H;注意10001H/16取整应+1,则SA最小为1001H,最大为2000H。
二、
*8086地址总线宽度为20,则其可寻址能力为1MB,地址编码为5位(16进制),而其单次处理数据为16位,即4位(16进制),其如何处理的?
8086引入段地址和偏移地址的概念,各为16位,在向cpu输出指令中确定段地址及偏移地址,通过CPU内部总线将该两个地址传输至CPU内部的”地址加法器“部件,该部件作:“段地址*16+偏移地址”运算,得出最终访问内存的物理地址(20位宽度);再由CPU内部的输入输出控制电路通过外部20位地址总线寻址。
*段地址的理解。
段地址作为CPU内部的概念,对内存单元来说不存在“分段”的概念,内存并未被分段划分。但对于内存单元地址,逻辑上可以按“分段”去考虑,比如:
a.内存单元物理地址10000H~100FFH,段地址为1000H,偏移地址为00H~FFH;
b.内存单元物理地址10020H~100FFH,段地址可以为1000H,其偏移地址为20H~FFH;段地址也可以为1002H,则其偏移地址为00H~DFH。
---------------
具体针对你这个问题,在上面“一”中的第2个问题就是,只要记得对8086来说其内存单元地址表达式为:段地址×16+偏移地址,这道题其实也就比较容易分析了,而偏移地址的取值范围为0000H~ffffH,则段地址取多少可查询到20000H,再简化为数学问题,就是对x=16*a+b,当ffffh>=b>=0时,a取何范围值可使得x=20000h,a\b\x均为整数。这道数学题应该很容易解吧。
其次,如何去理解内存单元地址的表达式,可看下上面的“二”中第一部分。 |