- 1、本文档共13页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
ARM语法教程
ARM基础语法
By:陈殷齐
ARM工作模式:
ARM寄存器:
CPSR寄存器:
基本指令格式:
opcode{cond}{s} Rd,Rn,{oprand2}
Opcode:助记符
Cond:条件码
S:影响标志位
Oprand2:第二操作数,必须为常数表达式或#immed_8r(通过循环右移偶数位可得的8位数)
寻址方式:
寄存器寻址:数据存放在寄存器中
MOV R1,R2;(将R2的数据存放到R1中)
SUB R1,R2,R3;(将R2-R3装入R1中)
立即数寻址:数据包含在指令中
MOV R0,#0XFF;(将OXFF装入R0中)
SUB R0,R1,#1;(R1-1装入R0中)
寄存器移位寻址:
MOV R0,R2,LSL,#3;(将R2左移3位装入R0中)
寄存器间接寻址:寄存器给出操作数地址码(基址)
LDR R2,[R1];(将R1所存地址中的操作数装入R2)
基址加偏址(前变址模式/不改基址的寄存器值):
基址加偏址:LDR R1,[R3,#0X0C];(R3+OX0C的地址里操作数加载到R1)
偏置为寄存器:LDR R1,[R2,R3];(R3+R2的地址里操作数加载到R1)
加上位移操作:LDR R1,[R2,R3,LSL,#2];(R3左移2位加上R2的地址加载到R1)
后索引方式(改变基址值)
LDR R0,[R1],#4;(R1地址的操作数装入R1之后,R1=R1加4)
自动变址:LDR R0,[R1,#2]! (R1+2后的地址值里的操作数装入R0,R1=R1+2)
LDR R0,[R1];将R1所存地址里的操作数装载到R0。
STR R0,[R1];将R0所存操作数加载到R1地址里的单元。
[]不能省略。
多寄存器操作:
寄存器和内存交换指令:
运算指令:
跳转指令:(分支指令)
BX 由寄存器的最后一位决定使用Thumb还是ARM指令。(1为Thumb)
例 BX R1,into+1;跳转到into并切换为Thumb指令
Label为标号,或地址。(start,0
psr指CPSR,SPSR.
SWI在用户模式时跳转来切换到特权模式。
进入管理模式后再中断向量表找到immed_24地址所指向的中断程序。
用户模式下只可读控制域和状态域,用MSR也不可以修改。(既不能改变状态域来切换模式,特权模式下可以)
用户模式下可对标志位进行修改。
T位所有模式都不可修改,只有用BX可修改。
伪指令:
ADR:将基于PC或寄存器的相对偏移的地址值读取到寄存器。
LDR:将数值直接装入。
NOP:空指令。
伪操作符:
填充伪操作符:
APTCS协议:
在汇编中调用C语言:
??C语言中调用汇编程序:
.global Factorial
内嵌汇编:
文档评论(0)