你是在问
call far [64_bit_absolute]
是可编的吗?去取
m16:64
来自64位绝对地址的80位操作数?
不,
call far [mem]
不是特别的,摩德姆只能
[disp32]
或
[RIP+rel32]
或涉及寄存器的寻址模式。
Referencing the contents of a memory location. (x86 addressing modes)
只有
mov al/ax/eax/rax, [abs64]
可使用64位绝对地址进行编码,使用特殊形式的
moffs
不使用modrm字节的mov。这对您来说是无用的:在寄存器中使用段或偏移量对您没有帮助。
但你可以使用
mov r64, imm64
把地址放进登记簿。例如
mov rax, absolute_address ; where seg:off are stored
call far [rax]
或者,如果静态地址是64位,但汇编程序+链接器知道它在
call
指令,
call far [rel seg_and_offset]
可以使用RIP相对寻址模式。
否则,可能是你把seg:off-call目标和它存储的位置混淆了?在64位模式下,
call ptr16:64
(直拨远端电话)不可用,因此您总是需要在内存中关闭seg:off
呼叫
去取。但它可以在堆栈上或其他任何位置,例如
push 0x23 ; new CS value ends up in the low 2 bytes of a qword
push rax ; new offset. It goes at a lower address because x86 is little-endian
call far [rsp]