1、加载有效地址
加载有效地址指令 leal 实际上是 movl 指令的变形。它的指令形式是从存储器读数据到寄存器,但实际上它根本就没有引用寄存器。它的第一个操作数看上去是一个存储器应用,但该指令并不从指定的位置读入数据,而是将有效地址写入到目的操作数。(像 C语言中的 &)这条指令可以为后面的存储器应用产生指针。另外,它还可以简洁地描述普通的算术计算。
即 leal 的作用 :1) 产生指针 , 2) 描述简单的算术计算
指令 | 效果 | 描述 |
leal S D | D &S | 加载有效地址 |
INC D DEC D NEG D NOT D | D D + 1 D D – 1 D -D D ~D | 加 1 减 1 取负 取补 |
ADD S D SUB S D IMUL S D XOR S D OR S D AND S D | D D + S D D - S D D * S D D ^ S D D | S D D & S | 加 减 乘 异或 或 与 |
SAL k, D SHL k, D SAR k, D SHR k, D | D D << k D D << k D D >> AK D D >> LK | 左移 左移 (等价于 SAL) 算术右移 逻辑右移 |
注意:这里的操作数顺序与 ATT 格式的汇编代码中的相反。
一元操作符的操作数可以是一个寄存器也可以是一个存储器位置。
二元操作数的第一个操作数可以是立即数、寄存器或是存储器位置。第二个操作数可以是寄存器或存储器位置。(注:同movl 指令一样,两个操作书不能同时是存储器位置。)