gpt4 book ai didi

assembly - 从 64 位地址加载到其他寄存器而不是 rax

转载 作者:行者123 更新时间:2023-12-04 03:52:08 25 4
gpt4 key购买 nike

在 x64 上,从 64 位绝对地址加载(即取消引用 64 位立即数)可以通过

movabs addr64, %rax

但是,当目标寄存器不是 rax 时汇编程序给出了一条错误消息,说 operand size mismatch for movabs .我错过了什么?

最佳答案

来自 MOV instruction document您可以看到您可以将 64 位立即数移动到任何寄存器,但加载/存储涉及 64 位立即数绝对地址 只能与Areg一起使用


操作码
操作说明
描述


A0
MOV AL,moffs8*
将 (seg:offset) 处的字节移动到 AL。

REX.W + A0
MOV AL,moffs8*
将(偏移量)处的字节移动到 AL。

A1
MOV AX,moffs16*
将 (seg:offset) 处的字移至 AX。

A1
MOV EAX,moffs32*
将 (seg:offset) 处的双字移至 EAX。

REX.W + A1
MOV RAX,moffs64*
将(偏移)处的四字移动到 RAX。

A2
MOV moffs8,AL
将 AL 移动到 (seg:offset)。

REX.W + A2
MOV moffs8***,AL
将 AL 移动到(偏移)。

A3
MOV moffs16*,AX
将 AX 移动到 (seg:offset)。

A3
MOV moffs32*,EAX
将 EAX 移动到 (seg:offset)。

REX.W + A3
MOV moffs64*,RAX
将 RAX 移动到(偏移量)。


如您所见,没有 ModR/M 字节来编码寄存器编号。由于这比将 64 位立即数移动到寄存器更不常用,因此不会有问题。如果真的需要,它可以在 2 条指令中完成

MOVABS is the GAS opcode name for the MOV opcode forms MOV Areg, [Offs64] and MOV [Offs64], Areg. In Yasm's NASM syntax mode, you can get this form by saying MOV AX, [qword xxx]. Yasm's GAS syntax mode accepts MOVABS (for GAS compatibility). Note this form is only valid with Areg (AL/AX/EAX/RAX) as the source/destination register.

http://cvs.tortall.net/pipermail/yasm-devel/2006-March/000579.html

关于assembly - 从 64 位地址加载到其他寄存器而不是 rax,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19415184/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com