失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Intel 64/x86_64/IA-32/x86处理器 - 指令格式(1) - 概述

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

时间:2020-08-16 02:08:09

相关推荐

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) - 概述》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。