8086汇编寻址的问题

书上说 因为8086地址总线有20位 而CPU内部是16位 所以要用段基址+偏移量的寻址方式
我的问题是为什么要这样说呢?这好像够不成因为所以的关系吧~~有没有明白的大神给我讲一下

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

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

做为扩展,也许你以后还会问,如今32位的cpu都通用了,64位cpu也开始普及了,为啥有些系统还有16位的段地址呢?这里的段地址虽然还是逻辑地址,但语义已经完全不同,在这只是提已经,多看书,多参考,存在总是有理由的,阿门。。。
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-02-14
我是这样理解的:
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
此时,最大值,即达到地址总线所表达的最大寻址能力。
第2个回答  2013-02-10
这样说,也许,更好理解吧:

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

两者的结合,Intel 公司采用了:段基址+偏移量的寻址方式。本回答被网友采纳

汇编8086寻址基础问题
存储区可以分为数据段、附加段、堆栈段和代码段,其中前三种都可以用来存储数据,最后一种存储指令的代码。在直接寻址方式中,你没有写段超越前缀的话,默认是数据段,所以数据的物理地址是32000H,同时由于8086存储是以字节为单位的,所以低地址存放低字节,高地址存放高字节,所以组合成一个字就是1234...

8086CPU和汇编的问题
是的,不管你插上多大的内存,8086 CPU只能寻址 1M。因为8086 CPU 只有20根地址线,2的20次方是 1M,是它的最大寻址范围。另,为了避免糊涂,还要说一下数据线。所谓 16位机或 16 位 CPU 是指 CPU 的寄存器是 16 位宽,也就是数据线是 16 位。 8086 是 16 位 CPU,即一次能处理 16 位 ...

王爽8086汇编的问题,请指教
8086CPU的问题,该CPU是16位的,段地址16位,偏移地址16位,物理地址通过地址加法器后变20位,到底这个寻址是20位的还是16位的???--什么是《这个寻址》?=== 问:给定段地址为0001H,仅通过变化偏移地址寻址,CPU的寻址范围为——— 到———。起始地址: 00010H + 0000H = 00010H 终止...

关于8086汇编的寻址方式一题:MOV [1200],23H 请指出该指令的正误
帮你调试过了,[xxxxh ]里如果是数的话不能表示地址的。要显式地给出段地址,如ds:[xxxxh ]才行,否则编译时会被处理成一个立即数xxxxh。[ ]里是什么进制这个无所谓的比如写10和写0aH效果一样,都可以。你同学是对的。因为不知道这个内存地址有多长。或者像上楼所说。用mov byte ptr ds:[...

汇编关于寻址的问题
这里面我觉得所有有立即数操作的好像都不对,拿第一个来说:MOV AX,3,感觉应该是立即数寻址,但对于8086的汇编来说应该是:MOV A,#3的写法,而且就算认为是对的,也在假设条件中找不到对应的值的,所以我认为是错的。我这里举个例子吧,其它的你自己:SUB [BP],AX 目的操作数地址:(SS<<4)...

刚刚接触8086汇编 关于地址总线就把我难住了
--对。8根地址总线寻址不是才1字节吗?--错,宽度是1字节。虽然算出来是256字节 不过不知道为什么要算成256 --想想电话号码吧:1位十进制数,0~9,可以对10台电话进行编号。6位十进制数,000000~999999,可以对10^6台电话进行编号。8位十进制数,可以对10^8台电话进行编号。-- 8位二...

16位汇编,寻址是segmentX16+offset,为什么要X16呢?
8086 CPU是16位微处理器,一次只能处理、传送一个16位的数。为了用16位的二进制数表示20位的物理地址,INTEL设计时规定用2个16位数组合成一个逻辑地址,按规定算法生成20位的物理地址。这样,就形成了段地址、偏移地址的概念。8086的内存访问,采用分段访问的方式。每64KB一个段,这样,在段内,用一...

寻址方式与用于寻址的寄存器小结(8086)
在8086\/8088处理器中,内存寻址方式多样化,包括直接寻址、寄存器间接寻址、寄存器相对寻址、基址间址寻址和相对基址间址寻址。每种方式都有其独特的特点和应用场景。首先,直接寻址以立即数形式给出地址,方便定位,但不具备动态地址变换能力。比如,汇编指令 MOV AX, [3],其中的内存地址3是直接嵌入在...

关于汇编语言存储器的分段 一小段的首地址是啥?段起始地址?怎么看出 ...
8086CPU的内存寻址方式是段地址*16+偏移地址的方式的方式 比如说00000H这个地址,他的段地址是0000H偏移地址是0000H。段地址0000h*16(10H)也就是00000H 加上偏移地址也是0000H就是00000H。一个段的空间最大是64KB 也就是偏移地址从0000H-FFFFH。有一点要注意:段地址*16必然是16的整数倍所以一个...

关于80486寻址方式的一些题目,上课没听懂,作业不会做。。
指令的一般格式:操作码 目标操作数,源操作数 先跟你讲一下一些主要的寻址方式吧,我学的是8086,寻址方式和80486基本是一样的,只是在名称上可能会有点不同,我会注明,具体的你看一下书吧。1. 立即寻址:操作数是一个立即数(就是常数)例如:MOV AX,3100H 中的3100H 2.直接寻址:指令中...

相似回答