zoukankan      html  css  js  c++  java
  • 计算机组成的一些总结(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,常用来延时一个机器周期。

  • 相关阅读:
    HDU 5115 Dire Wolf (区间DP)
    HDU 4283 You Are the One(区间DP(最优出栈顺序))
    ZOJ 3469 Food Delivery(区间DP好题)
    LightOJ 1422 Halloween Costumes(区间DP)
    POJ 1651 Multiplication Puzzle(区间DP)
    NYOJ 石子合并(一)(区间DP)
    POJ 2955 Brackets(括号匹配一)
    POJ 1141 Brackets Sequence(括号匹配二)
    ZOJ 3537 Cake(凸包+区间DP)
    Graham求凸包模板
  • 原文地址:https://www.cnblogs.com/dreamingoutloudly/p/13022184.html
Copyright © 2011-2022 走看看