Допустим, я хочу читать с абсолютного адреса gs:$30
в 64-битном режиме, поэтому код asm выглядит примерно так:
asm
mov rax, gs:[$30]
end;
... и компилятор переводит этот код в ...
65 48 8B 05 30 00 00 00 mov rax,gs:[rel $00000030]
Но я не хочу использовать относительный адрес (rip + $30)
.Я хочу, чтобы компилятор использовал абсолютный адрес и компилировал следующим образом:
65 48 8B 04 25 30 00 00 00 mov rax,gs:[+$0030]
(То же самое, если я использую префикс gs:
или нет!)
Какя делаю это?
РЕДАКТИРОВАТЬ:
Я знаю для обходного пути.Я спрашиваю, существует ли какая-либо команда, чтобы сказать компилятору адрес местоположения как абсолютный вместо относительного.
РЕДАКТИРОВАТЬ
Пока все хорошо ...:)
drhirsch помог мне найти команду, и теперь компилятор переводит:
mov rax, gs:[abs qword ptr $30]
or
mov rax, gs:[abs $30]
на это:
6548A13000000000000000 mov rax,[qword $0000000000000030]
Что почти нормально :) Потому что я хочу короткую 32-битнуюкод операции (см. верхние коды операций) instlonger long 64-битный код операции.
Есть ли способ сказать компилятору использовать короткий код операции с 32-битным адресом вместо long?