关于段地址的那些事
学时概要
在汇编的大坑中沉浮,因为之前看了一些汇编语言(基于x86处理器)的底层原理,也就是代码的解析,感觉自己的组原勉勉强强够格了。于是鼓起勇气开始刷王爽的《汇编原理》第四版,第一章当然秒过了,但是,当看到第二章时,方知自己的弱小与无知。但是,我没有傲慢地(听从某些外媚者不去看国内教材)不去看王爽版,又小自暗喜脱离了劣根性。
总而言之,当看到段时是很懵逼的,因为在看《汇编基于x86》只看了小碗水,加上郑大钱晓捷《汇编语言程序设计》和宁波王让定的《汇编原理与接口技术》好像都没有看到这个说法,感觉自己白学了这么久的汇编(30h),于是乎就厚着头皮看了起来。
问题与解析
在检测点2.2中第二问
在 20000H,段地址SA,用偏移地址寻找此单元,
则SA应满足条件是:最小为 _____最大为 _____
我当时很淡定的写出了最小为1H 最大为2000H
最大没有什么问题
但是当我看见最小时,我头皮发麻了,竟然是1001H?我第一反应是答案没考虑偏移地址为1FFF0H的情况,但是当被网上的大神一通乱锤,发现是我错了,但是依旧没有看懂他们在说啥,(毕竟也是刚刚接触概念,没看懂)最后,还是我之前唾弃的百度百科救了我,多谢百科,膜拜。
附百科原文
8086/8088有20条地址线,它的直接寻址能力为1MB。也就是在一个系统中可以有多达1MB的存储器,地址从00000H—FFFFFH。给定任意一个20位物理地址,就可以从中取出需要的指令和操作数。但是8086/8088CPU只能进行16位运算。与地址有关的寄存器SP、IP、BP、SI、DI也都是16位的,所以对地址的运算也只能是16位的。对于8086/8088来说,无论采用哪种寻址方式,寻找操作数的范围最大是2^16,也就是64K.
64k=64*1024
=2^16
=16^4
所以就是0000-FFFFH了,也就是说EA最大为FFFFH,又SA要进1
所以EA最大值是FFFH了,即SA最小值是1001H。膜拜大佬。
以上
风之弋然
2021.05.12 于常山