lea & movzx & 取值
lea指令用來取得一個內容的有效地址,跟mov類似,但lea只取地址而不碰值 用法:
section .data data: dq "abcdefgh"
section .text.start: lea rsi, [data]lea的[]比較特殊,並不是取得記憶體位址的內容,是有效地址計算(Effective Address)
格式是 [Base + Index * Scale + Displacement]
此外lea甚至可以做任何高效的計算只要符合格式
base: 暫存器index: 暫存器scale: 立即數 1, 2, 4, 8disp: 立即數像是
lea rax, [rbx+rcx*4+1]特色是lea是AGU(位址生成單元)處理的,而不是ALU,如果ALU忙的話是個好選擇,反之代碼附近正在讀取記憶體的話AGU就不是好選擇。此外lea不會改變任何旗標。
section .data data: dw "ab"
section .text.start: mov si, WORD [data][]是取值,從記憶體位址取得內容,可以加上指定的大小,並且mov需要兩邊相同長度
將data的地址取一個WORD大小的值放入相同大小的si暫存器,lea是例外
將來源以零填充到與目標相同長度再做mov
```asmsection .data data: dw "ab"
section .text.start: movzx esi, WORD [data]將0x6261填充成0x00006261再移動到esi