计算机组成的一些总结(6)X86指令简介
X86指令主要包括:运算类指令(算术运算和逻辑运算)、传送类指令、转移类指令、控制类指令,一条指令要么改变通用寄存器的内容,或者改变标志位,或者改变存储器单元的内容,或者改变外设端口的内容,或者改变指令指针。
1.传送指令,作用是把数据或地址传送到寄存器或存储单元中。
MOV指令(传送) PUSH指令(压栈) POP指令(弹栈)
2.算术运算指令
目的操作数不能是立即数或CS寄存器
两个操作数不能同时为存储器操作数
3.逻辑运算和移位指令
SHL指令(左移)
SHR指令(逻辑右移)相当于无符号数除以2^n的运算
SAR指令(算术右移)相当于带符号数除以2^n的运算
4.转移指令
(1)无条件转移指令-直接转移
短转移JMP SHORT LABEL 由一个字节的操作码和一个字节的位移量组成,执行这条指令时,是将第二个字节的8位的位移量与当前的指令指针寄存器IP相加,并将结果更新在IP中,位移量是 转移的目标地址与当前指令指针值的差。
近转移JMP NEAR PTR LABEL 第一个字节的操作码和两个字节的位移量,这样可以在当前指令指针前后32K字节的范围内进行转移,这是实模式下。从80386开始,近转移可以使用32位的位移量,这样可以在前后2G字节的范围内进行转移。
远转移JMP FAR PTR LABEL 远转移直接给出了目标地址,而不是与当前指令指针的相对位移。一般是转移到不同的代码段,又称段间转移,当执行这条指令时,CPU会取出整条指令的编码,并将这两个字节放入IP寄存器,另外两个字节放入CS段寄存器,下一条指令就会通过CS和IP这两个寄存器中的新的内容计算得到( 物理地址=段基值(CS)*16+偏移量(IP) ),CPU就会从新的地址取出下一条指令开始执行。
(2)无条件转移指令-间接转移
转移目标地址在寄存器中
转移目标地址在存储器中
(3)条件转移指令
根据当前的状态标志位决定是否发生转移,一般在影响标志位的算术或逻辑运算指令之后,在8086中,所有的条件转移都是短转移,从80386起,条件转移指令可以使用32位的长位移量,可以在前后2G字节的范围内进行转移。
JC LABEL,在进位标志CF=1时才会发生转移
JNZ/JNE,在不为零/不相等时转移 ZF=0
5.处理器控制指令
控制CPU的功能,对标志位进行操作
CLC,把进位标志CF清0
NOP,空操作,执行NOP指令使程序计数器PC加1,常用来延时一个机器周期。