本节简单地介绍一下x86指令集的指令格式和特点,当优化文档偶尔提及指令格式时,可供参考。完整的指令集格式在Intel Software Developer’s Manual的第二卷Instruction Set Reference中有详细的讲解。通常连汇编程序员都无需特别关注这些格式,但是反汇编程序员是必须要熟悉二进制指令格式的,以后我们会开一个独立的专题专门讲述x86指令集格式。

Intel x86指令属于复杂计算机指令集(CISC),具有如下特点:

  1. 变长指令

单条指令长度不固定,这样的设计方案可以将常用的指令设计成较短的长度,不常用的指令可以用较长的编码,节省二进制指令存储器空间,但是增加了处理器指令译码电路的复杂度。

  1. 指令编码非常紧凑

经常使用隐式的操作数,即操作数并不直接编码在二进制指令当中,而是通过约定的方式确定操作数,节省指令长度。紧凑的编码格式可以让处理器一次从存储器中读取更多的指令,从而提升处理器的执行效率。

  1. 丰富的操作数寻址方式

指令集对高级语言中的结构体,数组,结构体的数组等数据结构提供了直接支持。

16-bit Instruction Format

接下来详细的讲解每个域。

Intel 64/x86_64/IA-32/x86处理器 - 指令格式(2) - 8086/16位指令格式概述相关推荐

  1. Intel 64/x86_64/IA-32/x86处理器 - 指令格式(6) - 8086/16位指令位移量字节/立即数字节

    第三-六字节(BYTE3-BYTE6) 这4个字节是指令的可选字节,通常用来指示存储器操作数的位移量,和/或立即操作数的值. 位移量字节可以是单字节或者双字节.只要有可能,程序语言翻译器(例如汇编器) ...

  2. Intel 64/x86_64/IA-32/x86处理器 - 指令格式(4) - 8086/16位指令操作码字节

    第一字节(BYTE1) 指令定义了处理器要执行的操作,例如ADD,XOR,HLT等.操作码通常位于第一字节,某些指令的操作码会扩展到第二字节(即ModR/M字节)的REG域,故有时候REG域也被称为R ...

  3. Intel 64/x86_64/IA-32/x86处理器 - 指令格式(3) - 8086/16位指令前缀

    指令前缀 虽然没有明确的在上图中指明,8086处理器上16位实模式下,指令也可以带有下列前缀:Lock前缀,REPNE/REPNZ前缀,段跨越前缀.但是并没有操作数宽度前缀66H和地址宽度前缀67H, ...

  4. Intel 64/x86_64/IA-32/x86处理器 - 指令格式(5) - 8086/16位指令寻址字节

    第二字节(BYTE2) 第二字节是ModR/M字节,基本用途是指示指令的两个操作数,以及该字节之后是否还有其他字节(位移量字节和立即数字节).由于主要用于用于操作数寻址,所以又称为"寻址字节 ...

  5. 使用GCC和GNU Binutils编写能在x86实模式运行的16位代码

    使用GCC和GNU Binutils编写能在x86实模式运行的16位代码 不可否认,这次的标题有点长.之所以把标题写得这么详细,主要是为了搜索引擎能够准确地把确实需要了解GCC生成16位实模式代码方法 ...

  6. Intel 64/x86_64/IA-32/x86处理器 - 指令格式(8) - 80386/32位指令前缀

    下面详细讲解一下指令前缀.Pentium Pro处理器支持的前缀可以分成如下四组: 组1: 封锁和重复执行前缀 指令前缀 (十六进制) 描述 F0 H Lock前缀,封锁总线 The LOCK pre ...

  7. Intel 64/x86_64/IA-32/x86处理器 - 指令格式(1) - 概述

    x86 Instruction Introduction 指令用来指示处理器所要执行的操作,指令集就是某个处理器上可以执行的所有指令.通俗的说,指令可以有两种存在方式,一种是汇编程序员看到的汇编文本格 ...

  8. Intel 64/x86_64/IA-32/x86处理器段寄存器 - 32位段寄存器/64位段寄存器

    Segment Registers 本节主要讲述Intel处理器中的段寄存器,用于支持处理器的段式存储器管理机制.16位的8086/Intel286处理器有4个段寄存器CS/DS/SS/ES.32位的 ...

  9. Intel 64/x86_64/IA-32/x86处理器基本执行环境 (1) - 32位执行环境概述

    Basic Execution Environment Overview IA-32处理器提供了一套完整的资源,在处理器上运行的程序/任务可以执行指令,存储代码,数据以及状态信息.这些资源(如下简要的 ...

最新文章

  1. 数据中心机房空调系统的这些“套路”你知多少?
  2. mapreduce 聚合_MapReduce:处理数据密集型文本处理–局部聚合第二部分
  3. WAI-ARIA对自动完成小部件的支持
  4. 快速理解binary cross entropy 二元交叉熵
  5. 更灵活的定位内存地址的方法05 - 零基础入门学习汇编语言36
  6. 断点帧数测试软件,《幽灵行动:断点》PC版性能表现分析
  7. mysql存储过程局部变量使用_MySQL存储过程使用输出变量
  8. Python框架篇之Django(ORM对象关系映射)
  9. Coinbase与CS: GO比赛组织者BLAST Premier签署赞助协议
  10. Android的activity的title设定内容
  11. jQuery入门[1]-构造函数
  12. 毛发及眼球的渲染技术
  13. WordPress 实用SEO插件总结
  14. bat脚本监控tomcat并启动_windows使用批处理发布web到tomcat并启动tomcat脚本分享
  15. 【POJ 3348】Cows【凸包裸题】
  16. Unity 异步加载图片
  17. Delphi常用的Excel操作
  18. STM32的启动过程 — startup_xxxx.s文件解析(MDK和GCC双环境)
  19. 数学小课堂:数学的预见性(用推理走出认知盲区)
  20. 登陆服务器和游戏服务器为甚要分开总结

热门文章

  1. pycharm新项目加载库的方法
  2. 计算机图形学E4——OpenGL 区域种子填充
  3. 单例模式的5种实现方式,以及在多线程环境下5种创建单例模式的效率
  4. wordpress ?php the_time() ?,WordPress时间函数the_time与get_the_time解析
  5. sql注入 练手网站_靶场sql注入练手----sqlmap篇(纯手打)
  6. 1_Excel实战_自动录入另一个表格对应的数据
  7. python制作的游戏如何转化为swf_如何从python生成swf格式的幻灯片?
  8. mysql 密码文件改成密文_数据库密码弄成密文
  9. android listview item按钮,android-listview适配器中的按钮
  10. matlab 仿真钢琴,用Matlab模拟钢琴的声音