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字节,显式的目的操作数在指令中指定。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值