《零基础入门学习汇编语言》第八第九讲加检测点2.2
本帖最后由 shuiyu 于 2017-12-18 16:00 编辑小白刚学,不对的请各位大佬指正,谢谢{:10_254:}
由于这三个模块联系比较紧密,所以集合起来发一个帖子了{:10_279:}
第八讲
一、
(1)物理地址:CPU访问内存单元时要给出内存单元的地址。所有的内存单元构成的存储空间是一个一维的线性空间。我们将这个唯一的地址称为物理地址。
(2)16位结构的CPU:运算器一次最多可以处理16位的数据、寄存器的最大宽度为16位、寄存器和运算器之间的通路是16位的。
(3)8086CPU给出物理地址的方法:8086CPU采用一种在内部用两个16位地址合成的方法来形成一个20位的物理地址。
具体情况:
1.CPU中的相关部件提供两个16位的地址,一个称为段地址,另一个称为偏移地址;
2.段地址和偏移地址通过内部总线送入一个称为地址加法器的部件;
3.地址加法器将两个16位地址合并成一个20位的地址;
二、地址加法器工作原理
(1)地址加法器合成物理地址的方法:物理地址=段地址×16+偏移地址
(2)“段地址×16”有一个更为常用的说法就是数据左移4位。(二进制位)
1.一个数据的二进制形式左移1位,相当于该数据乘以2;
2.一个数据的二进制形式左移N位,相当于该数据乘以2的N次方;
3.地址加法器如何完成段地址×16的运算?以二进制形式存放的段地址左移4位。
4.一个数据的十六进制形式左移1位,相当于乘以16;
5.一个数据的十进制形式左移1位,相当于乘以10;
6.一个数据的n进制形式左移1位,相当于乘以n。
第九讲
三、段的概念
(1)内存并没有分段,段的划分来自于CPU,由于8086CPU用“(段地址×16)+偏移地址=物理地址”的方式给出内存单元的物理地址,使得我们可以用分段的方式来管理内存.
(2)在编程时可以根据需要,将若干地址连续的内存单元看作一个段,用段地址×16定位段的起始地址(基础地址),用偏移地址定位段中的内存单元。
(3)偏移地址为16位,变化范围为0~FFFFH,仅用偏移地址来寻址最多可寻64K个内存单元即64k,一个段的长度最大为64K。(2^16)
比如:给定段地址1000H,用偏移地址寻址,CPU的寻址范围为:10000H~1FFFFH。
(4)CPU可以用不同的段地址和偏移地址形成同一个物理地址。
(5)“数据在21F60H内存单元中。”对于8086PC机的两种描述:
1.数据存在内存2000:1F60单元中;
2.数据存在内存的2000段中的1F60H单元中。
检测点2.2
(1) 给定段地址为0001H,仅通过变化偏移地址寻址,CPU的寻址范围为 0010H 到 1000FH 。
解:(段地址×16)+偏移地址=物理地址
段地址x16为:0010H
偏移地址变化范围为0h~ffffh
FFFF+0010H得:1000FH
所以加上偏移地址变化范围CPU的寻址范围为:0010H~1000FH
(2) 有一数据存放在内存20000H单元中,现给定段地址为SA,若想用偏移地址寻到此单元。则SA应满足的条件是:最小为 1001H ,
最大为 2000H 。
解:这题我是反过来想的,当段地址给定为 1001H 以下和 2000H 以上,CPU无论怎么变化偏移地址都无法寻到20000H单元。
最小段地址肯定要求CPU的寻址范围为:10010H~2000FH,根据(段地址×16)+偏移地址=物理地址,所以最小段地址为1001H.为什么不是1000H呢?如果段地址为1000H,CPU的寻址范围为:10000H~1FFFFH,最大也到不了20000H吧,所以只能是1001H为最小段地址
最大段地址肯定要求CPU的寻址范围为:20000H~2FFFFH,根据(段地址×16)+偏移地址=物理地址,所以最大段地址为2000H.
谢谢小甲鱼带来的视频教程,感谢!! {:10_303:}
本节结束,多谢览阅!
小白刚学,不对的请各位大佬指正,谢谢{:10_254:} 终于找到一个正确答案{:10_266:}{:10_266:}
谢谢,你和我做的答案一样,找了好久有点怀疑自己了
页:
[1]