美文网首页
第三章《程序的机器级表示》(二)

第三章《程序的机器级表示》(二)

作者: ShawnIsACoder | 来源:发表于2018-11-11 15:47 被阅读0次

    操作数

    大多数指令至少会有一个操作数,指出执行一个操作中要使用的数据源值以及放置结果的位置,各种不同的操作数的可能性分为3种:

    • 立即数:用于表示常数值
    • 寄存器:用于表示某个寄存器的内容
    • 内存引用:根据计算出来的地址访问某个内存位置

    加载有效地址

    leaq实际上是movq指令的变形,它的指令形式是从内存读取数据到寄存器,但是实际上它根本没有引用内存。它的第一个操作数看上去是一个内存引用,但是该指令并不是从指定的位置读取数据,而是将有效地址写入到目的操作数

    leaq指令能够执行加法和有限形式的乘法

    一元操作

    image.png

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

    二元操作

    image.png

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

    移位操作

    image.png

    第一项是移位量,第二项是要移位的数,两个左移指令SALSHA的效果都是一样的,将右边填上0。右移指令不同,分为SHR逻辑移位(填上0)和SAR算数移位(填上符号位

    条件码

    CPU维护了一组单个位的条件码寄存器,用于描述最近的算术或逻辑操作的属性,常用的条件码如下:

    • CF:进位标志,最近的操作使最高位产生了进位,可用来检查无符号数的溢出。

    • ZF:零标志,最近的操作得到的结果为0

    • SF:符号标志,最近的操作得到的结果为负数

    • OF:溢出标志,最近的操作导致一个补码溢出

    相关文章

      网友评论

          本文标题:第三章《程序的机器级表示》(二)

          本文链接:https://www.haomeiwen.com/subject/uggxfqtx.html