当前位置: 代码迷 >> 汇编语言 >> 请教instruction和directive有什么区别
  详细解决方案

请教instruction和directive有什么区别

热度:821   发布时间:2016-05-02 04:39:50.0
请问instruction和directive有什么区别
下图来自于汇编器帮助文档整个目录:


下图来自于instruction一章:


下图来自于directive一章:



网络上的说法
引用
————————————————————————————————————— 
   pair (郁闷的坏孩子) 于 (Tue Aug  6 20:15:35 2002) 提到: 
  
偶觉得directive是为编译器服务的 
【 在 PaoloZhang (左颌下腺混合瘤※马尔蒂尼※帅帅郎) 的大作中提到: 】 
: instruction指令,有特定的硬件实现, 
: 另一个是伪指令,没有特定的硬件实现, 
: 是不是这样? 
  
  

------解决方案--------------------
引用:
百度“ARM instruction directive”
引用
指令(instruction)与汇编伪指令(pseudo-instruction)的区别在于:

       1条instruction与1条机器指令对应,而编译器会把1条pseudo-instruction编译为1条或多条机器指令

汇编伪操作(directive)与汇编伪指令(pseudo-instruction)的区别在于:

       注意:千万别把汇编伪操作(directive)与汇编伪指令(pseudo-instruction)弄混了,directive不会被编译器编译为机器指令,但pseudo-instruction会。

这个pseudo-instruction,我的理解是内联指令,是编译器定义的指令,或者说是多条指令的一个组合。譬如,处理器只支持加法add_opera,那么add_opera是instruction,或者称为指令助记符;为了方便实现乘法,编译器实现了mul_opera,mul_opera本身是由多条加法实现的,这个mul_opera是pseudo-instruction。至于directive,就是用于指示代码段,或者数据对齐等影响编译器行为的东东。
------解决方案--------------------
directive那些是一些定义数据的编译器指令,可以认为跟预处理差不多,比如说你在某处放个全局变量什么的,gbla那些指令就起到这个作用。你查看一下生成的二进制码的反汇编,你会发现你定义的这些变量就是插在你想要或者编译器(广义的,包括链接器)自己决定的地方,但是他们并不是指令,就是一个单纯的数据。
所有生成机器码的地方,都是cpu能够识别的指令,cpu去执行不会造成“未定义指令”异常,而gbla产生的数据,任何格式都有可能。
  相关解决方案