1.数据传送指令:mov
move r1,r2 /*r1=r2*/
move r1,#4096 /*r1=4096*/
2.大范围的地址读取指令:ldr
ldr r1,=0x123456789 /*r1=0x123456789*/
ldr r1,=label /*获取绝对地址,即label的地址*/
label:
……
3.内存访问指令(当ldr后面没有=号时为内存读取指令)
读取指令:ldr
ldr r1 ,[r2,#4] /*将内存地址为r2+4的数据读取到r1中,相当于C语言中的*操作*/
ldr r1,[r2],#4 /*将内存地址为r2的数据读取到r1中,再将地址加4,r2=r2+4*/
ldr pc,_irq /*pc=*(_irq)将标号中的内容放入pc中
_irq:
.word do_swi
存储指令:str
str r1 ,[r2,#4] /*将r1的值存入地址为r2+4的内存中*/
str r1,[r2],#4 /*将r1的值存入地址为r2的内存中,再将地址加4,r2=r2+4*/
4.批量内存访问指令ldm,stm
格式:ldm {cond} <addresing_mode> <rn> {!} <register list> {^}
stm{cond} <addresing_mode> <rn> {!} <register list> {^}
格式说明:
1){cond}:表示指令的执行条件,根据cpsr寄存器中的条件标志位决定是否执行该条指令,每条ARM指令包含4bit的条件码域,
可以定义16个执行条件,具体如下表:
2)<addresing_mode>表示地址变化模式,具体如下:
3)<rn> 中保存内存的地址,如果后面加上!,指令执行完成后,rn的值会更新,等于下一个内存的地址,否则保持初始值。
4)<register list>表示寄存器列表,对于ldm指令,从<rn>所对应的内存块中读取数据写入这些寄存器,对于stm把这些寄存器的值写入
<rn>对应的内存块中。如果寄存器地址连续,可以写成r1-rx的格式,不连续的用逗号隔开。^符号有两种含义:如果<register list>有pc寄存器,
它表示指令执行后,spsr寄存中的值将自动复制到cpsr寄存器中--这通常用于中断处理函数的返回;如果没有pc寄存器,那^表示操作的是
用户模式下的寄存器,而不是当前特权模式下的寄存器。
5)指令中<register list>与<rn>的对应关系为:编号低的寄存器对应内存中低地址单元,编号高的寄存器对应内存中高地址单元,具体如下:
扩展:
ldmfd
stmfd
5.算术指令
加指令:add
add r1,r2,#1 /*r1=r2+1*/
减指令:sub
sub r1,r2,#1 /*r1=r2-1*/
乘指令:mul
mul r1,r2,#4 /*r1=r2*4*/
6.程序状态寄存器的访问指令
msr cpsr, r0 /* s<-r,r0的值复制到cpsr中*/
mrs r0,cpsr /*r<-s,将cpsr的值复制到r0中*/
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 /*根据对比的结果设置cpsr寄存器的标志位,参考ARM指令条件码表
逻辑指令
位与:and(相当于&)
and r0,r1,#0xff /*r0=r1&0xff*/
位或:orr(相当于|)
orr r0,r1,#0xff /*r0=r1|0xff*/
清零:bic
bic r0,r0,#0x03 /*将r0中的第一位和第二位清零*/
测试:tst
tst r0,#0x20 /*测试第六位是否为0,为0则将cpsr的Z位置1*/
总结
以上所述是小编给大家介绍的常用的汇编指令与技巧,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对小牛知识库网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
本文向大家介绍Android ListView常用小技巧汇总,包括了Android ListView常用小技巧汇总的使用技巧和注意事项,需要的朋友参考一下 ListView在我们Android项目中的地位是有目共睹的,相信几乎每一个App中都有它的身影。 ListView主要是用列表形式来加载数据,在特定情况下需要实现一些特殊功能:如刷新数据,加载数据,实现动画效果等。 作为我们常用的控件,有哪些
本文向大家介绍常用的jQuery前端技巧收集,包括了常用的jQuery前端技巧收集的使用技巧和注意事项,需要的朋友参考一下 调试时巧用console.log(),这比用alert()方便多了。 jquery易错点:元素拼接的时候,元素还未添加到DOM,就用该预添加元素操作。 ajax动态获取的数据,还没有装载html元素,下面就开始用预拼凑的元素操作。 这样写,点击“提交”的时候,会报错“Unca
伪指令 DW 定义字(2字节). PROC 定义过程. ENDP 过程结束. SEGMENT 定义段. ASSUME 建立段寄存器寻址. ENDS 段结束. END 程序结束.
串指令 DS:SI 源串段寄存器 :源串变址. ES:DI 目标串段寄存器:目标串变址. CX 重复次数计数器. AL/AX 扫描值. D标志 0表示重复操作中SI和DI应自动增量; 1表示应自动减量. Z标志 用来控制扫描或比较操作的结束. MOVS 串传送. ( MOVSB 传送字符. MOVSW 传送字. MOVSD 传送双字. ) CMPS 串比较. ( CMPSB 比较字符. CMPSW
本文向大家介绍汇编 JCC指令表与笔记,包括了汇编 JCC指令表与笔记的使用技巧和注意事项,需要的朋友参考一下 汇编-JCC 之前可以修改EIP寄存器的指令 JMP,CALL,RETN 所有JCC指令的动作->根据标志寄存器修改EIP的值 标志寄存器 EFLAGS CF(bit 0)[Carry flag] C位 若算术产生的结果在最高有效位(most-significant bit)发生进位或者
本文向大家介绍JavaScript数组常用操作技巧汇总,包括了JavaScript数组常用操作技巧汇总的使用技巧和注意事项,需要的朋友参考一下 本文实例汇总了JavaScript数组的常用操作技巧。分享给大家供大家参考。具体如下: 前言 相信大家都用惯了jquery或者underscore等这些类库中常用的数组相关的操作,如$.isArray,_.some,_.find等等方法。这里无非是对原生j
常用的技巧 结合前面讲的配置、项目结构、页面渲染、数据库连接,构造一个优雅的Sanic应用对你来说估计没什么大问题了,但是在实际使用过程中,可能你会碰到各种各样的需求,与之对应,你也会遇到千奇百怪的问题,除了在官方pro提issue,你大部分问题都需要自己去面对,看官方的介绍: Async Python 3.5+ web server that's written to go fast 大概就可以
本文向大家介绍VC小技巧汇总之窗口技巧,包括了VC小技巧汇总之窗口技巧的使用技巧和注意事项,需要的朋友参考一下 本文搜集汇总了VC小技巧的窗口技巧,对于VC程序开发的窗口设计而言有一定的借鉴价值,详情如下: 1.让窗口一启动就最大化 把应用程序类(CxxxApp)的 InitInstance() 函数中的 改为 则窗口一启动就最大化显示。 2.如何设置窗口的初始尺寸 在将应用程序类(CxxAPP)