Assembly 汇编语言:在分段内存模型中,物理地址可以是16位吗?
我正在做一项与内存寻址有关的汇编语言的大学作业。物理地址可以是16位吗?以下是讲师提供的值Assembly 汇编语言:在分段内存模型中,物理地址可以是16位吗?,assembly,x86,Assembly,X86,我正在做一项与内存寻址有关的汇编语言的大学作业。物理地址可以是16位吗?以下是讲师提供的值 BX=0x0000 SI=0x01A2 DS=0x0A2E Effective Address: EA = Base + Index + Offset = 0x0000+0x01A2+0xFF00 =0x100A2 = 0x00A2 Physical: =Segment * 10 + EA =0x0A2E * 10 + 0x00A2 = 0xA382 (16 bits) 它是
BX=0x0000
SI=0x01A2
DS=0x0A2E
Effective Address:
EA = Base + Index + Offset
= 0x0000+0x01A2+0xFF00
=0x100A2
= 0x00A2
Physical:
=Segment * 10 + EA
=0x0A2E * 10 + 0x00A2
= 0xA382 (16 bits)
它是否正确,因为物理内存地址必须是20位长 前导零 在16位模式下,x86处理器中的物理地址实际上是20位长。在您的示例中,前导零已被删除
0x0A2E * 0x10 = 0x0A2E0
+ 0x00A2 = 0x0A382
= 0xA382
所以地址0A2E:00A2指向与0000:A382相同的存储单元。您大概在谈论汇编?有不止一种架构。16位8086处理器有20个离散地址引脚,因此直接寻址20位地址。地址由段和偏移量组成。偏移量为16位。因此,在您的示例中,总偏移量,即
base+index+offset
是0x00A2
,如您所示。如果您在x86指令的上下文中显示这一点,就会更清楚,因为在您的示例中,偏移量
来自何处还不清楚。@Damien_异类赋值是关于IAPX8088IAPX8088是x86架构的,在8088或8086类型的处理器中(IAPX8088是8088类型),物理地址是20位。它由一个段和一个偏移量确定,每个偏移量为16位。20位地址由段*0x10+偏移量计算。您所调用的EA
是一个总偏移量,为16位。显示的物理地址计算值是正确的,但从技术上讲是20位:0x0A382
。