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.