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) - 概述相关推荐

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

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

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

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

  3. Intel 64/x86_64/IA-32/x86处理器 - SIMD指令集 - SSE扩展(1) - 概述/历史/新数据类型/XMM寄存器组

    SSE Instructions SSE Overview & History Intel SSE技术的全称是Streaming SIMD Extension,中文译作流式单指令多数据指令扩展 ...

  4. Intel 64/x86_64/IA-32/x86处理器 - 锁原子操作(2) - 总线封锁/缓存封锁

    Bus Locking Intel 64和IA-32处理器提供了LOCK#信号,在某些关键的访存操作时会自动地激活assert这个信号,用于封锁系统总线或类似的链接.当这个输出信号被激活时,就会阻塞来 ...

  5. Intel 64/x86_64/IA-32/x86处理器 - 锁原子操作(1) - 处理器保证的原子操作

    Locked Atomic Operations 32位的IA-32处理器支持对系统内存中的位置执行"加锁的原子操作".这些操作通常用于管理共享的数据结构(例如信号量,段描述符,系 ...

  6. Intel 64/x86_64/x86/IA-32处理器操作模式/运行模式

    Processor Operation Mode IA-32架构支持3种操作模式,和一种类操作模式(quasi-operating mode): 实地址模式/实模式(real-address mode ...

  7. Intel 64/x86_64/IA-32/x86处理器 - SIMD指令集 - SSE扩展(7) - 混洗指令 解组合指令

    SSE Shuffle and Unpack Instructions SSE的混洗指令与解组合指令混洗shuffle或交错interleave单精度浮点操作数,并将结果保存到目标操作数. 指令 描述 ...

  8. Intel 64/x86_64/IA-32/x86处理器 - SIMD指令集 - MMX技术(1) - 概述 传输指令

    MMX™ Instructions IA-32架构引入了4个指令集扩展,使得IA-32处理器可以执行单指令多数据SIMD操作.这些扩展包括MMX技术,SSE扩展,SSE2扩展,SSE3扩展. MMX指 ...

  9. Intel 64/x86_64/IA-32/x86处理器 - 通用指令(1) - 数据传输指令

    General-Purpose Instructions 通用指令执行基本的数据搬移,算术/逻辑计算,程序流控制,字符串操作等.这些指令被频繁地用于运行在IA-32与Intel 64架构的系统软件与应 ...

最新文章

  1. TFTP、RAM、NVRAM之间的关系
  2. rancher的微服务运维
  3. 【Python】多种方式实现生成验证码
  4. 洛谷 - P1111 - 修复公路 - 并查集
  5. 如何用ant给Java项目生成文档
  6. C++类分号(;)问题
  7. 5 操作系统第二章 进程管理 线程介绍
  8. 解决JPA的枚举局限性
  9. 津津的储蓄计划(洛谷-P1089)
  10. 如果我是一线技术主管…… 1
  11. 没有tpm不能装win11的解决方法
  12. mac book usb 故障修复
  13. 跨省游开放首展,海峡旅博会和休闲旅博会将在厦门举行
  14. Android kotlin let函数学习
  15. 【习题5】用Python完成新建文档写古诗+复制
  16. 虚拟机中c#程序提示flash组件未注册解决方案
  17. 神经系统的解剖学基础是,神经系统系统解剖学
  18. 135编辑器导出html,135编辑器教程|三步教你搞定表格样式
  19. 乐优商城遇到的坑一步一步总结
  20. 利用C Free3.5 本身获得自身注册码

热门文章

  1. python之强化学习入门
  2. IntelliJ IDEA下project概念和module的概念解释
  3. js创建,删除,读取文件目录_note
  4. k8s高可用集群多个主节点_k8s-高可用集群实现(keepalived)
  5. linux top cpu瓶颈,Linux命令----分析CPU的瓶颈
  6. oozie mysql_【oozie】将oozie的数据库配置为mysql | 学步园
  7. conda create出现连接问题_[转] conda安装torch出现链接错误
  8. 卸载oracle——详细版
  9. zabbix4监控mysql_Zabbix4监控Mysql5.7
  10. java 课程设计数据库_人事管理系统(java数据库课程设计)+SQL数据库