8086汇编寻址的问题

2024-12-01 17:40:19
推荐回答(3个)
回答1:

那是因为寄存器是16位的而不是20位或其他位数的,16位是科学论证与技术局限的结果,20位地址是空间需求。8086芯片有近四十个管脚,其中的20个管脚可以提供20位物理地址。这里主要的问题是16位寄存器如何表示20位的地址(直接表达式没办法表达出来的,所以引入必要的机制,这个机制就是cpu内的地址加法器提供支持的,由地址加法器负责把输入的逻辑地址16位段地址,16位偏移地址,转换为20位的物理地址直接在涉及存储操作的指令执行的某个时段提供给芯片管脚。
就如同我要你给我8元人民币,目前你是没法子只用一张的8元给我的,你必须用散钱凑齐8元。回答为何没有8元的单张人民币就如同回答为啥没有20位的通用寄存器类似。

并不是够不成因果关系,是你学的还只是皮毛,又或者你只是计算机专业的学生,偏软件多;电气专业的学生对芯片是如何制造如何实现都知道,这就不是啥问题。

做为扩展,也许你以后还会问,如今32位的cpu都通用了,64位cpu也开始普及了,为啥有些系统还有16位的段地址呢?这里的段地址虽然还是逻辑地址,但语义已经完全不同,在这只是提已经,多看书,多参考,存在总是有理由的,阿门。。。

回答2:

我是这样理解的:
8086地址总线为20根,可以传送20位地址,寻址能力:2^20=1MB
数据总线为16位,寻址能力:2^16=64MB
所以,利用地址加法器,将2个16位地址合成1个20位的物理地址
物理地址=段地址*16+偏移地址
段地址:范围0000h-FFFFh,最大值FFFFh换算成10进制为65535,即2^16.
段地址*16 最大值:2^16*16=2^16*2^4=2^20=1MB
此时,最大值,即达到地址总线所表达的最大寻址能力。

回答3:

这样说,也许,更好理解吧:

CPU 内部的寄存器是16位的,而外部地址引线,有 20 条。

两者的结合,Intel 公司采用了:段基址+偏移量的寻址方式。