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,常用来延时一个机器周期。

  • 相关阅读:
    VSCode:无法创建临时目录
    网页很卡的原因
    用css做三角形
    移动端加载页面出现抖动、未加载完成时布局杂乱问题解决
    vue中使用axios进行ajax请求数据(跨域配置)
    fetch和XMLHttpRequest
    1-5-JS基础-数组应用及实例应用
    图片左右切换
    轮播图片切换
    轮播图片切换(函数合并)
  • 原文地址:https://www.cnblogs.com/dreamingoutloudly/p/13022184.html
Copyright © 2011-2022 走看看