什么叫伪指令?伪指令与指令有什么区别

伪指令是在编译阶段发挥作用的,由汇编器(MASM、TASM等)来解释。

一、含义不同:

伪指令告诉汇编程序进行什么操作,仅仅在汇编时有效,比如变量的定义,内存空间的分配,指令是机器运行对应机器的一个动作,只有汇编通过,机器才能运行。指令是在执行阶段发挥作用的,由CPU(Intel、AMD等)来执行。

二、作用不同:

单片机中指令是对应CPU的可执行代码,在编译时会分配存储单元,运行时CPU按指令指引的方向和功能执行。伪指令是不可执行代码,一般起辅助作用,是为编译系统服务的,编译时不会分配存储单元,只是按伪指令的功能定位程序数据或指令位置。

51单片机最常用的伪指令如下:

(1)起始(Origin)伪指令

标号:ORG nn

功能: 定义程序或数据块的起始地址。 指示此语句后面的程序或数据块以nn为起始地址连续存放在程序存储器中。

例如:

ORG 2000H

MOV A,20H

ORG 伪指令规定了程序的起始地址从 2000H 开始,即该程序的第一条指令“MOVA,20H”从地址 2000H 开始存放。)

以上内容参考:百度百科-伪指令

什么是伪指令?常用的伪指令功能有哪些

用于告诉汇编程序如何进行汇编的指令,它既不控制机器的操作也不被汇编成机器代码,只能为汇编程序所识别并指导汇编如何进行。

ADRL

伪指令

将相对于程序或相对于寄存器的地址载入寄存器中。

ADR

指令相似。ADRL

所加载的地址比

ADR

所加载的地址更宽,因为它可生成两个数据处理指令。

Note

汇编版本老于

ARMv6T2

的处理器的

Thumb

指令时,ADRL

是无效的。

语法

ADRL{cond}

Rd,label

其中:

cond

是一个可选的条件代码(请参阅条件执行)。

Rd

是要加载的寄存器。

label

表达式,与程序或寄存器相关。

有关详细信息,请参阅相对寄存器和程序相对的表达式。

用法

ADRL

始终汇编为两个

32

位指令。

即使使用单个指令就可完成地址访问,也会生成多余的第二个地址。

如果汇编程序无法将地址构建为两个指令,则它将生成一条错误消息,汇编将失败。

有关加载更宽范围地址的信息,请参阅LDR

伪指令(另请参阅将常数加载到寄存器)。

ADRL

可生成与位置无关的代码,因为地址与程序或寄存器有关。

如果

label

与程序有关,则其表示的地址必须要与

ADRL

伪指令在同一汇编程序区域内,请参阅AREA。

如果使用

ADRL

来为

BX

BLX

指令生成目标,则当目标中包含

Thumb

指令时,您就要自己设置地址的

Thumb

位(位

0)。

体系结构和范围

可用范围取决于所用的指令集:

ARM

±64KB

到字节或半字对齐的地址。

±256KB

字节,字对齐地址。

32

Thumb

±1MB

字节,字节、半字或字对齐地址。

16

Thumb

ADRL

不可用。

上面给出的范围是相对于位于当前指令后的、离当前指令有四个字节(在

Thumb

代码中)或两个字(在

ARM

代码中)间隔的点而言的。

ARM

32

Thumb

中,如果地址为

16

字节对齐,或与该点的相对性更高,则相对地址的范围可更大。

MOV32

伪指令

将以下项之一加载到寄存器:

一个

32

什么是伪指令(什么是伪指令其主要作用是什么)

位常数值

任何地址。

MOV32

始终会生成两个

32

位指令,即一个

MOV、MOVT

对。

您可利用它加载任何

32

位常数或访问整个地址空间。

如果用

MOV32

加载地址,则所生成的代码将与位置有关。

语法

MOV32{cond}

Rd,

expr

其中:

cond

是一个可选的条件代码(请参阅条件执行)。

Rd

是要加载数据的寄存器。Rd

不可为

sp

pc。

expr

可以是下列项之一:

symbol

程序区域中的标签。

constant

任何

32

位常数。

symbol

+

constant

标签加上

32

位常数。

用法

MOV32

伪指令的主要功能有:

当单个指令中无法生成立即数时,生成文字常数。

将相对于程序的地址或外部地址载入寄存器中。

无论链接器将包含

MOV32

ELF

代码段置于何处,该地址始终有效。

Note

以这种方式加载的地址是在链接时确定的,因此代码不是位置无关的。

如果所引用的标签位于

Thumb

代码中,则

MOV32

将会设置该地址的

Thumb

位(位

0)。

体系结构

此伪指令在

ARMv6T2

ARMv7

中的

ARM

Thumb

状态下均有效。

LDR

伪指令

将以下项之一载入寄存器:

一个

32

位常数值

一个地址。

Note

本节仅介绍

LDR

指令。

有关

LDR

指令

的详细信息,请参阅

内存访问指令。

有关使用

LDR

伪指令加载常数的信息,请参阅用

LDR

Rd,

=const

加载。

语法

LDR{cond}{.w}

Rt,=[expr

|

label‑expr]

其中:

cond

是一个可选的条件代码(请参阅条件执行)。

.W

是可选的指令宽度说明符。

Rt

是要加载的寄存器。