Оператор смещения в x86 возвращает логический адрес или адрес смещения? - PullRequest
0 голосов
/ 03 октября 2018

В режиме реального адреса:

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 

Пожалуйста, помогите мне прояснить мою концепцию Я новичок.

Ответы [ 2 ]

0 голосов
/ 13 марта 2019

MOV si, OFFSET arr в 32-битном коде защищенного режима предположительно усечет адрес до 16 бит, что даст вам 16 младших битов.

mov esi, OFFSET var в 16-битном реальном режиме даст вамсмещение увеличено с нуля до 32-битного, я ожидаю.

Это то, что делает NASM для foo: mov esi, foo в отдельном файле.
Вы получаете 66 BE 00000000 mov esi,0x0.

0 голосов
/ 13 марта 2019

В MASM и TASM (и, вероятно, во всех других ассемблерах x86, поддерживающих ключевое слово OFFSET), он дает смещение (удивление!) Чего-либо в пределах сегмента, к которому он принадлежит.

Логический адрес в основном далекоуказатель, пара смещения и селектор сегмента.

...