arm day2 汇编

1. 什么是立即数?立即数判断的规则?

立即数就是12位立即数imm12

  1. 如果某个数的数值范围是0~0xFF之间,那么这个数一定是立即数;
  2. 把某个数展开成2进制,这个数的最高位1至最低位1之间的二进制数序列的位数不能超过8位;
  3. 这个数的二进制序列凑够8位之后的的右边必须为偶数个连续的 0

2. ldr和str指令作用?

ldr指令:

功能1:将非立即数加载到通用寄存器

功能2:将RAM中的数据加载到通用寄存器

str指令:

将通用寄存器中的值写入到RAM中

3. bic和orr指令作用?

bic指令:将某个通用寄存器清0(操作数中为bit1的位清0),清0结果写回到通用寄存器

orr指令:将某个通用寄存器置1(操作数中为bit1的位置1),置1结果写回到通用寄存器

4. stmfd和ldmfd指令作用?

stmfd:入栈保护

STMFD<c> <Rn>{!}, <registers>

stmfd sp!, <r0,r1,lr>

ldmfd:出栈恢复

LDMFD<c> <Rn>{!}, <registers>

ldmfd sp!, <r0, r1, lr>

5.b、bl、bx指令区别?

b指令:实现无条件跳转指令(b 条件分支 b循环 b函数调用)

bl指令:函数跳转前,会将函数返回地址保存到lr寄存器

bx指令:bx lr 等价于mov pc, lr,bx指令加一个地址

6. mrs和msr指令作用?

mrs指令:读取某个特殊寄存器(cpsr)的值到通用寄存器

msr指令:将通用寄存器中的值写入到特殊寄存器(cpsr)

MRS<c> <Rd>, <spec_reg>

mrs r0, cpsr

MSR<c> <spec_reg>, <Rn>

msr cpsr, r0

sp_user 2048

sp_irq

7. 栈有哪几种类型?ARM采用何种栈?

栈分类:满增栈 空增栈 满减栈 空减栈

增栈:入栈时,sp指针往上走

减栈:入栈时,sp指针往下走

空栈:先写数据,再挪指针

满栈:先挪指针,再写数据

ARM 满减栈 *--sp;

8. 汇编中调用C语言函数需要注意什么?

当参数小于等于4个时,通过通用寄存器进行传参(R0 - R3)

当参数超过4个时,必须通过栈进行传参(入栈保护 出栈恢复)

C语言将函数运行结果返回给R0寄存器

相关推荐
H_oRIZoN_3 小时前
Linux入门DAY43 ARM 架构基础、寄存器、大小端、异常向量、交叉编译
linux·arm·linux应用编程
幼儿园蛋小黑5 小时前
ARM 汇编入门:从基础指令到实战示例
arm
索端阳6 小时前
ARM Day02 学习总结:ARM汇编基础核心知识点梳理
汇编·学习·arm
Awh-7 小时前
ARM裸机开发 Day01 学习笔记
arm开发·arm·arm裸机
2301_815091017 小时前
ARM体系结构学习笔记(一):从硬件基础、寄存器到三级流水线
arm·嵌入式开发
an12321219 小时前
ARM汇编学习笔记 Day02
arm开发·arm
xx~t10 小时前
嵌入式——ARM——汇编1
linux·汇编·arm开发·嵌入式硬件·arm
学linux的QQ蛋10 小时前
零基础吃透ARM体系架构与底层原理
arm
H_oRIZoN_11 小时前
Linux入门DAY44 ARM 入门 Day02|ARM 汇编指令、模式切换、栈操作、汇编 C 混合编程
linux·单片机·嵌入式硬件·arm·linux应用编程