操作数
大多数指令至少会有一个操作数,指出执行一个操作中要使用的数据源值以及放置结果的位置,各种不同的操作数的可能性分为3种:
-
立即数:用于表示
常数值
- 寄存器:用于表示某个寄存器的内容
- 内存引用:根据计算出来的地址访问某个内存位置
加载有效地址
leaq
实际上是movq
指令的变形,它的指令形式是从内存读取数据到寄存器,但是实际上它根本没有引用内存。它的第一个操作数看上去是一个内存引用,但是该指令并不是从指定的位置读取数据,而是将有效地址写入到目的操作数
leaq
指令能够执行加法和有限形式的乘法
一元操作

一元操作只有一个操作数,既是源
又是目的
,这个操作数可以是一个寄存器
也可以是一个内存地址
二元操作

二元操作的第二个操作符,既是源
又是目的
,其中第一个操作数可以是立即数
、寄存器
或是内存位置
,第二个操作数可以是寄存器
或是内存地址
移位操作

第一项是移位量
,第二项是要移位的数
,两个左移指令SAL
和SHA
的效果都是一样的,将右边填上0。右移指令不同,分为SHR逻辑移位(填上0)和SAR算数移位(填上符号位)
条件码
CPU维护了一组单个位的条件码寄存器,用于描述最近的算术或逻辑操作的属性,常用的条件码如下:
-
CF:进位标志,最近的操作使最高位产生了进位,可用来检查无符号数的溢出。
-
ZF:零标志,最近的操作得到的结果为0
-
SF:符号标志,最近的操作得到的结果为负数
-
OF:溢出标志,最近的操作导致一个补码溢出
网友评论