汇编中关于物理地址的问题。

时间:2021-11-28 17:31:43
当8086CPU要读写内存时:
(1)CPU中的相关部件提供两个16位的地址,一个称为段地址,另一个称为偏移地址;
(2)段地址和偏移地址通过内部总线送入一个称为地址加法器的部件;
(3)地址加法器将两个16位地址合成一个20位的物理地址;
(4)地址加法器通过内部总线将20位物理地址卷入输入输出控制电路;
(5)输入输出控制电路将20位物理地址送上地址总线;
(6)20位物理地址被地址总线送到存储器。
地址加法器采用物理地址=段地址×16+偏移地址的方法用段地址和偏移地址合成物理地址。例如:8086CPU要访问地址为123C8H的内存单元时,此时,地址加法器的工作过程如

看到这些,我不明白了。

25 个解决方案

#1


123C8H

那个是段地址?那个是偏移地址。我都看不明白。

#2


1230 * 16h+ 00c8  =  123C8H
段地址     偏移地址   物理地址

#3


如果这样计算×16再+00C8不是得123C8H?

#4


乘上16H后面补上不就是12300+00C8=123C8H

#5


就是将逻辑地址中的段地址左移4位,加上偏移地址得到20位的物理地址。

#6


10进制的16等于16进制的10H

#7


123C8H=(CS=123CH,IP=8H 或CS=1230H,IP=C8H,或 CS=1000H,IP=23C8H ,或 CS=1001H,ip=23B8HD ,或 CS=1002H,IP=23A8H 等等)

#8


多想想可以想出来的,独立思考。

#9


引用 4 楼 BAYNPU 的回复:
乘上16H后面补上不就是12300+00C8=123C8H



1230H×16 = 19020?

怎么得这个,不明白。

#10


怎么分出那个是逻辑地址,那个是偏移地址?

#11


乘上10H后面补上不就是12300+00C8=123C8H 
1230H*10H 将逻辑地址中的段地址左移4位=12300H

#12


1230H × 10(这个是十进制)+00C8 = 123C8

是这样吗?

没标明是什么进制的数值,是十进制?

请问,怎么分出那个是段地址和偏移地址。

#13


1230H × 10H(这个是十进制)+00C8H = 123C8H
1230H是段地址 段地址左移4位(0) 加上偏移00C8H=物理地址 123C8H

#14


引用 13 楼 BAYNPU 的回复:
1230H × 10H(这个是十进制)+00C8H = 123C8H 
1230H是段地址 段地址左移4位(0) 加上偏移00C8H=物理地址 123C8H


书中就给出123C8 是一个地址,但怎么知道是段地址呢?它有什么特点?那个是偏移地址呢?

#15


给出一个物理有多种计算法,看你要怎样算都可以.

#16


楼上不要误导初学者,数据后跟H表示这个数一定是16进制表示的数,所以10H一定是16进制数,它等于10进制数的16

#17


而16H等于10进制的22

#18


那怎么分出那个是段地址,那个是偏移地址?

知道就是知道物理的计算公式,但那个是段地址、那个是偏移地址?

#19


条条道路通罗马,要知道到罗马的是哪条路就难了,楼主最大的问题是不会举一反三啊!

#20


不懂啊。

#21


给出一个段地址,一个偏移地址,可以得到一个确定的物理地址,反过来一个确定的物理地址却可以由任意能符合计算规则的段地址+偏移地址组成

#22


引用 21 楼 cxdzxc 的回复:
给出一个段地址,一个偏移地址,可以得到一个确定的物理地址,反过来一个确定的物理地址却可以由任意能符合计算规则的段地址+偏移地址组成


地址10000H~100FFH的内存单元组成一个段,该段的起始地址(基础地址)为10000H,段地址为1000H,大小为100H;


大小为100H,为什么呢?

#23


9=9,而0-9却是10个数据,类似的ffh=255,而0-ffh=256(100h)个数据

#24


段地址*基值+偏移量=物理地址
全部操作数是二进制!

#25


多谢各位耐心指点。
多谢!

#1


123C8H

那个是段地址?那个是偏移地址。我都看不明白。

#2


1230 * 16h+ 00c8  =  123C8H
段地址     偏移地址   物理地址

#3


如果这样计算×16再+00C8不是得123C8H?

#4


乘上16H后面补上不就是12300+00C8=123C8H

#5


就是将逻辑地址中的段地址左移4位,加上偏移地址得到20位的物理地址。

#6


10进制的16等于16进制的10H

#7


123C8H=(CS=123CH,IP=8H 或CS=1230H,IP=C8H,或 CS=1000H,IP=23C8H ,或 CS=1001H,ip=23B8HD ,或 CS=1002H,IP=23A8H 等等)

#8


多想想可以想出来的,独立思考。

#9


引用 4 楼 BAYNPU 的回复:
乘上16H后面补上不就是12300+00C8=123C8H



1230H×16 = 19020?

怎么得这个,不明白。

#10


怎么分出那个是逻辑地址,那个是偏移地址?

#11


乘上10H后面补上不就是12300+00C8=123C8H 
1230H*10H 将逻辑地址中的段地址左移4位=12300H

#12


1230H × 10(这个是十进制)+00C8 = 123C8

是这样吗?

没标明是什么进制的数值,是十进制?

请问,怎么分出那个是段地址和偏移地址。

#13


1230H × 10H(这个是十进制)+00C8H = 123C8H
1230H是段地址 段地址左移4位(0) 加上偏移00C8H=物理地址 123C8H

#14


引用 13 楼 BAYNPU 的回复:
1230H × 10H(这个是十进制)+00C8H = 123C8H 
1230H是段地址 段地址左移4位(0) 加上偏移00C8H=物理地址 123C8H


书中就给出123C8 是一个地址,但怎么知道是段地址呢?它有什么特点?那个是偏移地址呢?

#15


给出一个物理有多种计算法,看你要怎样算都可以.

#16


楼上不要误导初学者,数据后跟H表示这个数一定是16进制表示的数,所以10H一定是16进制数,它等于10进制数的16

#17


而16H等于10进制的22

#18


那怎么分出那个是段地址,那个是偏移地址?

知道就是知道物理的计算公式,但那个是段地址、那个是偏移地址?

#19


条条道路通罗马,要知道到罗马的是哪条路就难了,楼主最大的问题是不会举一反三啊!

#20


不懂啊。

#21


给出一个段地址,一个偏移地址,可以得到一个确定的物理地址,反过来一个确定的物理地址却可以由任意能符合计算规则的段地址+偏移地址组成

#22


引用 21 楼 cxdzxc 的回复:
给出一个段地址,一个偏移地址,可以得到一个确定的物理地址,反过来一个确定的物理地址却可以由任意能符合计算规则的段地址+偏移地址组成


地址10000H~100FFH的内存单元组成一个段,该段的起始地址(基础地址)为10000H,段地址为1000H,大小为100H;


大小为100H,为什么呢?

#23


9=9,而0-9却是10个数据,类似的ffh=255,而0-ffh=256(100h)个数据

#24


段地址*基值+偏移量=物理地址
全部操作数是二进制!

#25


多谢各位耐心指点。
多谢!