Как читать данные с абсолютного адреса в delphi XE2

Допустим, я хочу читать с абсолютного адреса 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-битный код операции (смотрите верхние коды операций), чтобы длиннее длинный 64-битный код операции.

Есть ли способ указать компилятору использовать короткий 32-битный адресный код операции вместо длинного?

6
задан PhiS 17 May 2012 в 12:11
поделиться