为什么我们不能对 x86 asm 中的操作数进行算术运算?

问题描述 投票:0回答:1

mov rax,r9+rcx*2

为什么这个语法无效?这不算 mov r64,r/m64 吗?我是初学者,所以我为我的无知感到抱歉。

表达式用方括号括起来才有效

mov rax,[r9+rcx*2]
为什么?

assembly x86 x86-64
1个回答
0
投票
mov rax,r9+rcx*2

这是无效语法,因为源操作数(最右边的操作数)包含汇编器在编译时无法执行的寄存器和操作,因为汇编器不知道这些寄存器包含什么值。仅在运行时才会显示这些值。

使用方括号,

[r9 + rcx * 2]
成为有效的寻址模式,该模式使用基址寄存器 (R9) 和索引寄存器 (RCX),并按因子 (2) 缩放。

mov rax, [r9 + rcx * 2]

mov
指令结合使用时,计算出的地址处的内存内容将返回到指定的寄存器(RAX)中。

lea rax, [r9 + rcx * 2]

lea
指令结合使用时,计算出的地址本身将返回到指定寄存器(RAX)中。

© www.soinside.com 2019 - 2024. All rights reserved.