Intel 64/x86_64/IA-32/x86处理器 - 指令格式(1) - 概述
x86 Instruction Introduction
指令用来指示处理器所要执行的操作,指令集就是某个处理器上可以执行的所有指令。通俗的说,指令可以有两种存在方式,一种是汇编程序员看到的汇编文本格式,可以保存在文本文件中, 另一种是编译后以二进制形式存在的格式,可以直接执行或者链接到其他程序中执行,我们称为机器格式指令。汇编文件可以通过汇编器转换成机器格式指令,机器格式指令可以通过反汇编程序转换成易于阅读的文本格式。
下图是将Linux上的一个可执行文件用16进制格式打印出来得到一部分截图。从地址0x000002c0开始数字就是一段机器格式指令(红色框标出),从这里我们无法简单看出是什么指令以及指令的边界。需要使用反汇编工具将其反汇编成文本汇编语言格式才便于阅读。
下图是在Linux用objdump将上述机器指令流反汇编出来的结果,左中右三栏分别是:线性地址区(不用关心具体的地址),黄色区域就是二进制的机器指令,通过反汇编技术可以确定指令边界和指令内容,然后转换成最右侧的文本汇编代码,可以很容易的看到XOR,MOV,PUSH,CALL,HLT,NOP等常见的指令。
一般来说,指令通常需要包括3部分信息:
1)要执行的操作,被称为操作码,例如,加减乘除,逻辑与或非,机器停机等
2)要操作的对象,被称为操作数,确定其所在的位置,被称为寻址方式,例如,在内存中,在寄存器中,还是输入输出设备中等。根据指令的行为和需要,有些指令只需要一个操作数,有的需要两个。还有源操作数和目的操作数的称谓,这里不展开介绍了。
3)指示要操作的对象的大小,例如,8位,16位,32位或者64位等
不是所有的指令都需要操作对象和大小信息,只有操作码是必须的。下面举几个常见的指令的例子。
NOP和HLT指令,有操作码就足够让处理器执行正确的操作了,无需操作数,指令格式简单,指令长度也很短,只需一个字节。对于PUSH指令,源操作数在指令中指定,还有一个隐式的目的操作数,即由SS:ESP指定的存储器区域,大小是4字节;对于POP指令,隐式的源操作数,即由SS:ESP指定的存储器区域,大小是4字节,显式的目的操作数在指令中指定。
Intel 64/x86_64/IA-32/x86处理器 - 指令格式(1) - 概述相关推荐
- 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处理器提供了一套完整的资源,在处理器上运行的程序/任务可以执行指令,存储代码,数据以及状态信息.这些资源(如下简要的 ...
- Intel 64/x86_64/IA-32/x86处理器 - SIMD指令集 - SSE扩展(1) - 概述/历史/新数据类型/XMM寄存器组
SSE Instructions SSE Overview & History Intel SSE技术的全称是Streaming SIMD Extension,中文译作流式单指令多数据指令扩展 ...
- Intel 64/x86_64/IA-32/x86处理器 - 锁原子操作(2) - 总线封锁/缓存封锁
Bus Locking Intel 64和IA-32处理器提供了LOCK#信号,在某些关键的访存操作时会自动地激活assert这个信号,用于封锁系统总线或类似的链接.当这个输出信号被激活时,就会阻塞来 ...
- Intel 64/x86_64/IA-32/x86处理器 - 锁原子操作(1) - 处理器保证的原子操作
Locked Atomic Operations 32位的IA-32处理器支持对系统内存中的位置执行"加锁的原子操作".这些操作通常用于管理共享的数据结构(例如信号量,段描述符,系 ...
- Intel 64/x86_64/x86/IA-32处理器操作模式/运行模式
Processor Operation Mode IA-32架构支持3种操作模式,和一种类操作模式(quasi-operating mode): 实地址模式/实模式(real-address mode ...
- Intel 64/x86_64/IA-32/x86处理器 - SIMD指令集 - SSE扩展(7) - 混洗指令 解组合指令
SSE Shuffle and Unpack Instructions SSE的混洗指令与解组合指令混洗shuffle或交错interleave单精度浮点操作数,并将结果保存到目标操作数. 指令 描述 ...
- Intel 64/x86_64/IA-32/x86处理器 - SIMD指令集 - MMX技术(1) - 概述 传输指令
MMX™ Instructions IA-32架构引入了4个指令集扩展,使得IA-32处理器可以执行单指令多数据SIMD操作.这些扩展包括MMX技术,SSE扩展,SSE2扩展,SSE3扩展. MMX指 ...
- Intel 64/x86_64/IA-32/x86处理器 - 通用指令(1) - 数据传输指令
General-Purpose Instructions 通用指令执行基本的数据搬移,算术/逻辑计算,程序流控制,字符串操作等.这些指令被频繁地用于运行在IA-32与Intel 64架构的系统软件与应 ...
最新文章
- TFTP、RAM、NVRAM之间的关系
- rancher的微服务运维
- 【Python】多种方式实现生成验证码
- 洛谷 - P1111 - 修复公路 - 并查集
- 如何用ant给Java项目生成文档
- C++类分号(;)问题
- 5 操作系统第二章 进程管理 线程介绍
- 解决JPA的枚举局限性
- 津津的储蓄计划(洛谷-P1089)
- 如果我是一线技术主管…… 1
- 没有tpm不能装win11的解决方法
- mac book usb 故障修复
- 跨省游开放首展,海峡旅博会和休闲旅博会将在厦门举行
- Android kotlin let函数学习
- 【习题5】用Python完成新建文档写古诗+复制
- 虚拟机中c#程序提示flash组件未注册解决方案
- 神经系统的解剖学基础是,神经系统系统解剖学
- 135编辑器导出html,135编辑器教程|三步教你搞定表格样式
- 乐优商城遇到的坑一步一步总结
- 利用C Free3.5 本身获得自身注册码
热门文章
- python之强化学习入门
- IntelliJ IDEA下project概念和module的概念解释
- js创建,删除,读取文件目录_note
- k8s高可用集群多个主节点_k8s-高可用集群实现(keepalived)
- linux top cpu瓶颈,Linux命令----分析CPU的瓶颈
- oozie mysql_【oozie】将oozie的数据库配置为mysql | 学步园
- conda create出现连接问题_[转] conda安装torch出现链接错误
- 卸载oracle——详细版
- zabbix4监控mysql_Zabbix4监控Mysql5.7
- java 课程设计数据库_人事管理系统(java数据库课程设计)+SQL数据库