Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.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 在汇编程序(英特尔8086)中计算绝对地址/注册表值_Assembly_Intel_X86 16 - Fatal编程技术网

Assembly 在汇编程序(英特尔8086)中计算绝对地址/注册表值

Assembly 在汇编程序(英特尔8086)中计算绝对地址/注册表值,assembly,intel,x86-16,Assembly,Intel,X86 16,我知道下一条指令的绝对地址是50000(十六进制),我知道IP寄存器中的十六进制值是4000(十六进制)。我的问题是。。。为什么它是这样工作的 如果需要,我有其他注册表值可用 有什么想法吗?8086寻址(由所有后来的英特尔芯片继承)的奇怪之处是。寄存器均为16位,但可寻址内存为1兆=2幂20,即一个地址需要20位 英特尔的天才们决定使用两个寄存器来形成完整地址——一个段寄存器(CS、DS、SS、ES),左移4位,然后加上偏移寄存器来形成完整的20位地址 因此,IP中的值是与CS(代码段)中的值的

我知道下一条指令的绝对地址是50000(十六进制),我知道IP寄存器中的十六进制值是4000(十六进制)。我的问题是。。。为什么它是这样工作的

如果需要,我有其他注册表值可用


有什么想法吗?

8086寻址(由所有后来的英特尔芯片继承)的奇怪之处是。寄存器均为16位,但可寻址内存为1兆=2幂20,即一个地址需要20位

英特尔的天才们决定使用两个寄存器来形成完整地址——一个段寄存器(CS、DS、SS、ES),左移4位,然后加上偏移寄存器来形成完整的20位地址


因此,IP中的值是与CS(代码段)中的值的偏移量。根据您所说的,CS中的值应为
(0x50000-0x4000)>>4=0x4c00

如果您处于分段内存模式,则有一个代码段寄存器,其中包含必须添加到IP的偏移量,以获得下一条指令的绝对地址。非常感谢。我知道有些东西被抵消了,但我不太确定在哪里。谢谢