栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 后端开发 > 汇编语言

常用的汇编指令与技巧(收藏)

汇编语言 更新时间:发布时间: 百科书网 趣学号

1.数据传送指令:mov

move r1,r2

move r1,#4096

2.大范围的地址读取指令:ldr

ldr r1,=0x123456789

ldr r1,=label

label:

  ……

3.内存访问指令(当ldr后面没有=号时为内存读取指令)

读取指令:ldr

ldr r1 ,[r2,#4]

ldr r1,[r2],#4

ldr pc,_irq

str r1,[r2],#4

4.批量内存访问指令ldm,stm

格式:ldm {cond} {!} {^}

   stm{cond} {!} {^}

格式说明:

1){cond}:表示指令的执行条件,根据cpsr寄存器中的条件标志位决定是否执行该条指令,每条ARM指令包含4bit的条件码域,

可以定义16个执行条件,具体如下表:

2)表示地址变化模式,具体如下:

3) 中保存内存的地址,如果后面加上!,指令执行完成后,rn的值会更新,等于下一个内存的地址,否则保持初始值。

4)表示寄存器列表,对于ldm指令,从所对应的内存块中读取数据写入这些寄存器,对于stm把这些寄存器的值写入

对应的内存块中。如果寄存器地址连续,可以写成r1-rx的格式,不连续的用逗号隔开。^符号有两种含义:如果有pc寄存器,

它表示指令执行后,spsr寄存中的值将自动复制到cpsr寄存器中--这通常用于中断处理函数的返回;如果没有pc寄存器,那^表示操作的是

用户模式下的寄存器,而不是当前特权模式下的寄存器。

5)指令中的对应关系为:编号低的寄存器对应内存中低地址单元,编号高的寄存器对应内存中高地址单元,具体如下:

扩展:

ldmfd

stmfd

5.算术指令

加指令:add

add r1,r2,#1

减指令:sub

sub r1,r2,#1

乘指令:mul

mul r1,r2,#4

6.程序状态寄存器的访问指令

msr cpsr, r0

mrs r0,cpsr

7.相对跳转指令b,bl

1)这两条指令的区别在于bl除了跳转以外,还将返回地址(bl的下一条指令地址)保存在lr寄存器中

2)这两条指令的跳转范围是当前指令前后32M范围内

3)他们是位置无关的指令,相对跳转

e.g:

b fun1

fun1:

  bl fun2

fun2:

  ..............

扩展:绝对跳转 ldr pc,=xxx

直接将要执行的指令地址存入pc中,pc为程序计数器,指向当前指向位置

8.其他指令

比较指令:cmp

cmp r1,r2

位或:orr(相当于|)

orr r0,r1,#0xff

清零:bic

bic r0,r0,#0x03

测试:tst

tst r0,#0x20

总结

以上所述是小编给大家介绍的常用的汇编指令与技巧,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对考高分网网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/168708.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号