程序的机器级表示之指令系统

2018-11-04  本文已影响0人  我就是我啊

对于机器编程而言,有两种抽象尤为重要。第一种是由ISA来定义机器级程序的格式和行为,第二种是机器级别程序使用的内存地址是虚拟地址,提供的内存模型看上去是一个非常大的字节数组。

ISA指Instruction Set Architecture, 即指令集体系结构。是一种规约,它定义了处理器状态、指令的格式,以及每条指令对状态的影响。ISA在计算机系统是必不可少的一个抽象层,没有它软件就无法使用硬件。没有它,一台计算机就不能称为"通用计算机"。

程序计数器(pc,在x86-64中使用%rip表示):给出将要执行的下一条指令在内存中的地址。

整数寄存器:x86-64的cup包含一组16个存储64位值的通用目的寄存器,用来存储整数数据和存储地址。

条件码寄存器:保存着最近执行的算数活逻辑指令的状态信息

指令组成:操作码  源操作数1 或/和源操作数2(立即数、寄存器编号、存储地址) 目的操作数地址(寄存器编号、存储地址)

操作数有三种类型:1.立即数,用来表示常数 。2.寄存器,表示某个寄存器的内容。3.内存引用:会根据计算出来的地址访问某个内存位置。

寻址方式:如何根据指令给定信息得到操作数或操作数地址。参照下图:

常用指令类型:

1)传送指令:

        通用数据传送指令:mov,movs,movz,push/pop

        地址传送指令:leal,加载有效地址。如 leal(%edx,%eax), %eax 的功能为R[eax] <---R[edx] + R[eax], 执行前,若R[edx] =i, R[eax] = j, 则指令执行后,R[eax] = i+j。 这个指令第一个参数看上去是个内存引用,但不是从指定的位置读入数据,而是将有效地址写入目的操作数。

2)控制转移指令

    指令执行可按顺序或跳转到转移目标指令出执行

        --无条件转移指令 jmp dst:无条件转移到目标指令dst处执行

        --条件转移   Jcc dst:cc为条件码,根据标志(条件码)判断是否满足条件,若满足,则转移到目标指令dst处执行,否则按顺序执行

        --条件设置   SETcc dst:按条件码cc判断的结果保存到dst中(是一个8位的寄存器)

        --调用和返回指令(用于程序调用) 

                call dst:返回地址RA入栈,转dst处执行

                ret:从栈中取出返回地址ra,转到ra处执行

上一篇 下一篇

猜你喜欢

热点阅读