Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 汇编语言:在分段内存模型中,物理地址可以是16位吗?_Assembly_X86 - Fatal编程技术网

Assembly 汇编语言:在分段内存模型中,物理地址可以是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) 它是

我正在做一项与内存寻址有关的汇编语言的大学作业。物理地址可以是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)

它是否正确,因为物理内存地址必须是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