x86 returns 中的偏移运算符是逻辑地址还是偏移地址?
Does offset operator in x86 returns logical address or offset address?
实地址模式下:
mov esi, OFFSET var ;esi 32 bit
在保护模式下:
MOV si, OFFSET arr ;si 16 bit
; but MOV instructions works only if both the destination and source have same size
请帮我理清我的概念,我是初学者。
在 MASM 和 TASM(可能还有所有其他支持 OFFSET 关键字的 x86 汇编程序)中,它给出了它所属的段内某些东西的偏移量(惊喜!)。
逻辑地址基本上是一个远指针,一对偏移量和一个段选择器。
MOV si, OFFSET arr
在 32 位保护模式代码中可能会将地址截断为 16 位,给你它的低 16 位。
mov esi, OFFSET var
在 16 位实模式下会给你零扩展到 32 位的偏移量,我希望。
这就是 NASM 的作用,因为 foo: mov esi, foo
在一个文件中。
你得到 66 BE 00000000 mov esi,0x0
.
实地址模式下:
mov esi, OFFSET var ;esi 32 bit
在保护模式下:
MOV si, OFFSET arr ;si 16 bit
; but MOV instructions works only if both the destination and source have same size
请帮我理清我的概念,我是初学者。
在 MASM 和 TASM(可能还有所有其他支持 OFFSET 关键字的 x86 汇编程序)中,它给出了它所属的段内某些东西的偏移量(惊喜!)。
逻辑地址基本上是一个远指针,一对偏移量和一个段选择器。
MOV si, OFFSET arr
在 32 位保护模式代码中可能会将地址截断为 16 位,给你它的低 16 位。
mov esi, OFFSET var
在 16 位实模式下会给你零扩展到 32 位的偏移量,我希望。
这就是 NASM 的作用,因为 foo: mov esi, foo
在一个文件中。
你得到 66 BE 00000000 mov esi,0x0
.