当前位置: 首页 > news >正文

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,可以实现局部初始化


http://www.mrgr.cn/news/19069.html

相关文章:

  • 一阶微分方程的解的存在唯一性定理
  • BaseCTF-week2-wp
  • zdppy+vue3+onlyoffice文档管理系统实战 20240903 上课笔记 登录功能完成
  • 【C++】C++智能指针详解
  • 函数的力量:掌握Python中的“返回值”艺术
  • 【60天备战软考高级系统架构设计师——第七天:架构风格】
  • kafka基础知识(持续更新中~)
  • 单端输入与差分输入
  • 标准库标头 <optional> (C++17)学习之optional
  • redis之缓存淘汰策略
  • tcp udp
  • HTB-bike(SSTI模版注入)
  • Loadrunner12录制时,目标网站打不开的解决办法
  • Phalcon 增删改查的搭建过程
  • Kotlin 流 Flow
  • 数据恢复工具,电脑+手机双端,十分好用!
  • 智能提醒助理系列-一阶段推广心得1
  • 文件包含PHP伪协议利用方法
  • 若依脚手架 创建一个系统 his医院信息管理系统
  • Opencv实现提取卡号(数字识别)