这一章介绍整数算术和逻辑操作。其中的指令除了leaq指令,其他的都有针对不同大小的操作数的变种操作。
整数算术和逻辑操作指令可以分为四种,接下来让我们依次介绍。
![1356efc35c0c55e674ccfc675511b966.png](https://img-blog.csdnimg.cn/img_convert/1356efc35c0c55e674ccfc675511b966.png)
加载有效地址
![cc64213ebb9880652e9cebce6de72947.png](https://img-blog.csdnimg.cn/img_convert/cc64213ebb9880652e9cebce6de72947.png)
leaq的名字来源:load effective address。但实际上这个指令并不是这个意思。
S操作数不是内存地址,而是一个计算后的结果。D是一个寄存器。leaq可以执行加法和有限形式的乘法,编译简单的算术表达式时时很有用的。
long scale(long x, long y, long z){
long t = x + 4 * y + 12 *z;
return t;
}
# long scale(long x, long y, long z)
# x in %rdi, y in %rsi, z in %rdx
scale:
leaq (%rdi, %rsi, 4), %rax # x + 4*y
leaq (%rdx, %rdx, 2), %rdx # z &#