跳转到内容

lea & movzx & 取值

lea

lea指令用来取得一个内容的内存地址,跟mov类似,但lea只取地址而不碰值 用法:

section .data
data: dq "abcdefgh"
section .text
.start:
lea rsi, data

取得data的内存地址,在x86_64此处使用mov更佳

取值

section .data
data: dw "ab"
section .text
.start:
mov si, WORD [data]

[]是取值,可以加上指定的大小,并且mov需要两边相同长度
将data的地址取一个WORD大小的值放入相同大小的si寄存器
有个例外是[]在lea当作括号使用而不取值,在lea可以做[data + rcx * 8]的操作

movzx

将来源以零填充到与目标相同长度再做mov

```asm
section .data
data: dw "ab"
section .text
.start:
movzx esi, WORD [data]

将0x6261填充成0x00006261再移动到esi,此作法优于前者仅使用si