ARM汇编

数据和指令类型

ARM 采用的是32位架构

Byte : 8 bits

 Halfword : 16 bits (2 byte)

Word : 32 bits (4 byte)

Doubleword 64-bits(8byte)(Cortex-A处理器)

大部分ARM core 提供:

ARM 指令集(32-bit)

Thumb 指令集(16-bit )

Cortex-A处理器

16位和32位Thumb-2指令集

16位和32位ThumbEE指令集

处理器工作模式

ARM有7个基本工作模式

User:非特权模式,大部分任务执行在这种模式用户模式
FIQ:当一个高优先级(fast)中断产生时将会进入这种模式    快中断    
IRQ:当一个低优先级(normal)中断产生时将会进入这种模式   通用中断

Supervisor :当复位或软中断指令执行时将会进入这种模式 SVC模式    管理模式

Abort:当存取异常时将会进入这种模式中止模式

Undef:当执行未定义指令时会进入这种模式   未定义
System:使用和User模式相同寄存器集的特权模式   系统模式

Cortex-A特有模式:
Monitor:是为了安全而扩展出的用于执行安全监控代码的模式:监护模式也是一种特权模式

ARM寄存器有37个32bit的寄存器,Cortex体系结构下有40个32bit的寄存器,Cortex-A多出3个寄存器

Cortex-A  低功耗,消耗类

Cortex-R  实时性

Cortex-M  高性能,偏控制

程序状态寄存器

N:负  Z:零   C:进位/借位    V:溢出

ARM9

指令集架构(版本):armV4

存储器访问必须始终适当地保持地址对齐

ARM汇编语言程序

ARM汇编语言是以段(section)为单位来组织源文件的。段是相对独立的、具有特定名称的、不可分割的指令或者数据序列。

伪指令

ARM指令集语法格式

加S影响CPSR中标志位

常用指令

注意:

CMP R1,RO;将寄存器R1的值与寄存器RO的值相减,并根据结果设置CPSR的标志位
BIC   操作数2是32位的掩码,如果在掩码中设置了某一位,则相应的在操作数1中清除对应的那一位。
BIC RO, R0, # %1011;该指令清除R0中的位0、1和3,其余的位保持不变

例:汇编实现1到100累加

补充:

函数传参规则

4个以内:r0~r3

大于4个的使用栈传递,把栈指针初始化一下,栈在ARM中,这里是满减栈,所以应该让栈顶指针sp初始化指向0x40001000

立即数:一个数(或其按位取反后)循环右移偶数位后所有1都能放进低8位

所以不能用立即数的方式初始化sp    mov sp,#0x40001000

要用LDR方式,LDR本身作用是加载一个地址到寄存器中,地址就是32根线,刚好可以加载进去,这个数也是32位,所以可以用         ldr sp, = 0x40001000

往栈里面放东西用STMFD和LDMFD

bl 会将LR的值保存起来

 

nop伪指令,作用是空转一个周期,意义不大

补充:

 

pragma pack可以设置结构体按几个字节对齐,pragma pack(1),就是按一个字节对齐

.a = 10,可以实现局部初始化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值