Intel 64/x86_64/IA-32/x86处理器 - 指令格式(2) - 8086/16位指令格式概述
本节简单地介绍一下x86指令集的指令格式和特点,当优化文档偶尔提及指令格式时,可供参考。完整的指令集格式在Intel Software Developer’s Manual的第二卷Instruction Set Reference中有详细的讲解。通常连汇编程序员都无需特别关注这些格式,但是反汇编程序员是必须要熟悉二进制指令格式的,以后我们会开一个独立的专题专门讲述x86指令集格式。
Intel x86指令属于复杂计算机指令集(CISC),具有如下特点:
- 变长指令
单条指令长度不固定,这样的设计方案可以将常用的指令设计成较短的长度,不常用的指令可以用较长的编码,节省二进制指令存储器空间,但是增加了处理器指令译码电路的复杂度。
- 指令编码非常紧凑
经常使用隐式的操作数,即操作数并不直接编码在二进制指令当中,而是通过约定的方式确定操作数,节省指令长度。紧凑的编码格式可以让处理器一次从存储器中读取更多的指令,从而提升处理器的执行效率。
- 丰富的操作数寻址方式
指令集对高级语言中的结构体,数组,结构体的数组等数据结构提供了直接支持。
16-bit Instruction Format
接下来详细的讲解每个域。
Intel 64/x86_64/IA-32/x86处理器 - 指令格式(2) - 8086/16位指令格式概述相关推荐
- Intel 64/x86_64/IA-32/x86处理器 - 指令格式(6) - 8086/16位指令位移量字节/立即数字节
第三-六字节(BYTE3-BYTE6) 这4个字节是指令的可选字节,通常用来指示存储器操作数的位移量,和/或立即操作数的值. 位移量字节可以是单字节或者双字节.只要有可能,程序语言翻译器(例如汇编器) ...
- Intel 64/x86_64/IA-32/x86处理器 - 指令格式(4) - 8086/16位指令操作码字节
第一字节(BYTE1) 指令定义了处理器要执行的操作,例如ADD,XOR,HLT等.操作码通常位于第一字节,某些指令的操作码会扩展到第二字节(即ModR/M字节)的REG域,故有时候REG域也被称为R ...
- Intel 64/x86_64/IA-32/x86处理器 - 指令格式(3) - 8086/16位指令前缀
指令前缀 虽然没有明确的在上图中指明,8086处理器上16位实模式下,指令也可以带有下列前缀:Lock前缀,REPNE/REPNZ前缀,段跨越前缀.但是并没有操作数宽度前缀66H和地址宽度前缀67H, ...
- Intel 64/x86_64/IA-32/x86处理器 - 指令格式(5) - 8086/16位指令寻址字节
第二字节(BYTE2) 第二字节是ModR/M字节,基本用途是指示指令的两个操作数,以及该字节之后是否还有其他字节(位移量字节和立即数字节).由于主要用于用于操作数寻址,所以又称为"寻址字节 ...
- 使用GCC和GNU Binutils编写能在x86实模式运行的16位代码
使用GCC和GNU Binutils编写能在x86实模式运行的16位代码 不可否认,这次的标题有点长.之所以把标题写得这么详细,主要是为了搜索引擎能够准确地把确实需要了解GCC生成16位实模式代码方法 ...
- Intel 64/x86_64/IA-32/x86处理器 - 指令格式(8) - 80386/32位指令前缀
下面详细讲解一下指令前缀.Pentium Pro处理器支持的前缀可以分成如下四组: 组1: 封锁和重复执行前缀 指令前缀 (十六进制) 描述 F0 H Lock前缀,封锁总线 The LOCK pre ...
- Intel 64/x86_64/IA-32/x86处理器 - 指令格式(1) - 概述
x86 Instruction Introduction 指令用来指示处理器所要执行的操作,指令集就是某个处理器上可以执行的所有指令.通俗的说,指令可以有两种存在方式,一种是汇编程序员看到的汇编文本格 ...
- Intel 64/x86_64/IA-32/x86处理器段寄存器 - 32位段寄存器/64位段寄存器
Segment Registers 本节主要讲述Intel处理器中的段寄存器,用于支持处理器的段式存储器管理机制.16位的8086/Intel286处理器有4个段寄存器CS/DS/SS/ES.32位的 ...
- Intel 64/x86_64/IA-32/x86处理器基本执行环境 (1) - 32位执行环境概述
Basic Execution Environment Overview IA-32处理器提供了一套完整的资源,在处理器上运行的程序/任务可以执行指令,存储代码,数据以及状态信息.这些资源(如下简要的 ...
最新文章
- 数据中心机房空调系统的这些“套路”你知多少?
- mapreduce 聚合_MapReduce:处理数据密集型文本处理–局部聚合第二部分
- WAI-ARIA对自动完成小部件的支持
- 快速理解binary cross entropy 二元交叉熵
- 更灵活的定位内存地址的方法05 - 零基础入门学习汇编语言36
- 断点帧数测试软件,《幽灵行动:断点》PC版性能表现分析
- mysql存储过程局部变量使用_MySQL存储过程使用输出变量
- Python框架篇之Django(ORM对象关系映射)
- Coinbase与CS: GO比赛组织者BLAST Premier签署赞助协议
- Android的activity的title设定内容
- jQuery入门[1]-构造函数
- 毛发及眼球的渲染技术
- WordPress 实用SEO插件总结
- bat脚本监控tomcat并启动_windows使用批处理发布web到tomcat并启动tomcat脚本分享
- 【POJ 3348】Cows【凸包裸题】
- Unity 异步加载图片
- Delphi常用的Excel操作
- STM32的启动过程 — startup_xxxx.s文件解析(MDK和GCC双环境)
- 数学小课堂:数学的预见性(用推理走出认知盲区)
- 登陆服务器和游戏服务器为甚要分开总结
热门文章
- pycharm新项目加载库的方法
- 计算机图形学E4——OpenGL 区域种子填充
- 单例模式的5种实现方式,以及在多线程环境下5种创建单例模式的效率
- wordpress ?php the_time() ?,WordPress时间函数the_time与get_the_time解析
- sql注入 练手网站_靶场sql注入练手----sqlmap篇(纯手打)
- 1_Excel实战_自动录入另一个表格对应的数据
- python制作的游戏如何转化为swf_如何从python生成swf格式的幻灯片?
- mysql 密码文件改成密文_数据库密码弄成密文
- android listview item按钮,android-listview适配器中的按钮
- matlab 仿真钢琴,用Matlab模拟钢琴的声音