arm汇编语言名词简述

arm汇编语言名词简述1 arm 伪指令在汇编时 会被合适的机器指令代替 实现真正的机器指令操作 2 DCB DCW DCD DCQ 这 4 条伪指令都是用于分配一段内存单元 并对该内存单元初始化

大家好,欢迎来到IT知识分享网。

1、arm伪指令在汇编时,会被合适的机器指令代替,实现真正的机器指令操作!

2、DCB、DCW、DCD、DCQ,这4条伪指令都是用于分配一段内存单元,并对该内存单元初始化。唯一的区别是它们分配内存单元的大小不同

DCB分配一段字节的内存单元,其后的每个操作数都占有一个字节,操作数可以为-128~255的数值或字符串

DCW分配一段半字的内存单元,其后的每个操作数都占有两个字节,操作数是16位二进制数,取值范围为-32768~65535

DCD分配一段字的内存单元,其后的每个操作数都占有4个字节,操作数可以是32位的数字表达式,也可以是程序中的标号(因为程序中的标号代表地址,也是32位二进制数值)


DCQ分配一段双字的内存单元,其后的每个操作数都占有8个字节

3、宏是一段功能完整的程序,能够实现一个特定的功能,在使用中可以把它视为一个子程序。

宏应用举例:

MACRO ;                       宏 定 义 开 头
MAX date, d a t e , time ;        宏 名 为 MAX, 带 两 个 参 数 date和 time
LDR R1, = 0x1000 ;       R1 = 0x1000( 存 储 单 元 的 首 地 址 )
LDR R0, = date ;         R0等 于 date参 数 值 
STR R0, [R1], #04 ;      R0 → [R1], 保 存 R0的 内 容 , 同 时 R1的 地 址 +4 
LDR R2, =
date ;         R0等 于 date参 数 值 STR R0, [R1], #04 ;      R0 → [R1], 保 存 R0的 内 容 , 同 时 R1的 地 址 +4 LDR R2, =
time
STR R2, [R1]
MEND ;                         宏 定 义 结 束

MAX 0x858, 12 ;            调 用 宏
ADD R3, R0, R2

宏与子程序的区别,在于调用宏时编译程序会在调用处插入宏的程序段,有多少次调用就会插入多少宏的程序段;而调用子程序不增加新的程序段。

上例定义了MAX宏,宏语句段的功能是完成将两个参数date和time保存到起始地址为0x1000的内存单元中。

4、杂项伪指令

杂项伪指令介绍如下:
■ 导出伪指令:EXPORT、GLOBAL。
■ 导入伪指令:IMPORT、EXTERN。
■ 文件包含伪指令:GET、INCLUDE。
一个程序可以由多个汇编源文件组成,多个文件间会互相引用符号(变量或标号)。当在一个源文件中定义的一个符号希望其他文件引用时,则必须用导出伪指令定义这个符号;如果这个文件引用了外部定义的符号,则必须用导入伪指令定义这个符号。


5、顺序程序设计 举例

AREA Buf, DATA, READWRITE                    ;定 义 数 据 段 Buf

Array DCD 0x11, 0x22, 0x33, 0x44             ;定 义 12个 字 的 数 组 Array

DCD 0x55, 0x66, 0x77, 0x88

DCD 0x00, 0x00, 0x00, 0x00

AREA Example, CODE, READONLY

ENTRY

CODE32

LDR R0, = Array                              ;取 得 数 组 Array首 地 址

LDR R2, [R0]                                 ;装 载 数 组 第 1项 字 数 据 给 R2

MOV R1, #4

LDR R3, [R0, R1, LSL #2]                     ;装 载 数 组 第 5项 字 数 据 给 R3

ADD R2, R2, R3 ; R2 + R3 → R2

MOV R1, #8 ; R1 = 8

STR R2, [R0, R1, LSL #2]                     ;保 存 结 果 到 数 组 第 9项

END

6、分支程序设计

C语言程序如下 :

int x=76; //定 义 整 型 变 量
int y=88;
if( x>y )
z=100;
else
z=50;

arm汇编如下:


MOV R0, #76                 ; 初 始 化 R0的 值
MOV R1, #88                 ; 初 始 化 R1的 值
CMP R0, R1 ; 判 断 R0>R1?
MOVHI R2, #100              ; R0>R1时 , 这 条 语 句 执 行 , 则 R2 = 100
MOVLS R2, #50               ; R0<R1时 , 这 条 语 句 执 行 , 则 R2 = 50

7、循环程序设计

编写循环语句实现数据块复制

LDR R0, =DATA_DST                 ; 指 向 数 据 目 标 地 址
LDR R1, =DATA_SRC                 ; 指 向 数 据 源 地 址
MOV R10, #20                      ; 赋 值 数 据 个 数 20×N个 字
                                  ; N为 LDM指 令 操 作 数 据 个 数
LOOP LDMIA R1!, {R2-R9}           ; 从 数 据 源 读 取 8个 字 到 R2~ R9
STMIA R0!, {R2-R9}                ; 将 R2~ R9的 数 据 保 存 到 目 标 地 址
SUBS R10, R10, #1                 ; R10-1, 并 改 变 程 序 状 态 寄 存 器
BNE LOOP

8、子程序设计

在一个程序的不同部分往往要用到类似的程序段,这些程序段的功能和结构形式都相同,只是某些变量的赋值不同,此时就可以把这些程序段写成子程序形式,以便需要时可以调用它。
调用程序在调用子程序时,经常需要传送一些参数给子程序;子程序运行完后也经常要回送结果给调用程序。这种调用程序和子程序之间的信息传送称为参数传
送。参数传送可以有以下两种方法:
■ 当参数比较少时,可以通过寄存器传送参数。
■ 当参数比较多时,可以通过内存块或堆栈传送参数。


使用堆栈来恢复处理器的状态时,注意STMFD与LDMFD要配合使用。一般来讲,在ARM汇编语言程序中,子程序的调用是通过BL指令来实现的。该指令在执行时完成如下操作:将子程序的返回地址存放在链接寄存器LR中(针对流水线特性,已经减去偏移量了),同时将程序计数器PC指向子程序的入口点,当子程序执行完毕需要返回调用处时,只需要将存放在LR中的返回地址重新拷贝给程序计数器PC即可。

9、子程序程序设计举例

MAX函数和调用主程序

int MAX( int i, int j ) //声 明 子 函 数 MAX
{

if( i>j ) return ( i );
else return ( j );

Main(void) //主 函 数
{

int a, b, c;
a=19; //给 变 量 a赋 初 值
b=20; //给 变 量 b赋 初 值
c=MAX(a,b); //调 用 MAX子 函 数 , 把 最 大 值 赋 给 c
}

MAX汇编子程序和调用主程序
X EQU 19                            ; 定 义 X的 值 为 19
N EQU 20                            ; 定 义 N的 值 为 20
AREA Example4, CODE, READONLY       ; 声 明 代 码 段 Example4
ENTRY                               ; 标 识 程 序 入 口
CODE32                              ; 声 明 32位 ARM指 令
START LDR R0, =X                    ; 给 R0、 R1赋 初 值
LDR R1, =N
BL MAX                              ; 调 用 子 程 序 MAX, 返 回 值 为 R2
HALT B HALT                         ; 死 循 环
MAX                                 ; 声 明 子 程 序 MAX
CMP R0, R1                          ; 比 较 R0与 R1, R2等 于 最 大 值
MOVHI R2, R0
MOVLS R2, R1
MOV PC, LR                          ; 返 回 语 句
MAX_END
END

 </div> 

转自zqx7876的博客:arm汇编语言名词简述

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/142525.html

(0)
上一篇 2025-05-09 20:00
下一篇 2025-05-09 20:10

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信