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寄存器

相关推荐
剑指offer.3 天前
ARM裸机开发-SPI
arm开发·嵌入式硬件·嵌入式·arm
susplus5 天前
【ARM 裸机开发 (IMX6ULL-mini)】I2C协议详解
嵌入式·arm·i2c
今年下半年7 天前
【运维】windows虚拟机安装arm(aarch64)服务器
运维·windows·arm·虚拟机·aarch64
额额额对了8 天前
SPI通信
linux·c语言·汇编·单片机·嵌入式硬件·arm
一直C8 天前
【ARM嵌入式开发】LCD液晶屏显示原理、色彩模式与显存地址映射详解
lcd·嵌入式·arm·寄存器·cortex-a7
susplus8 天前
【ARM 裸机开发 (IMX6ULL-mini)】PWM 背光调节与 GT9147 多点触摸驱动
lcd·arm·多点触控·pwm背光调节
凉、介9 天前
深入理解 ARM SCP Firmware 的 Event 与 Notification 机制
学习·scp·嵌入式·arm
susplus9 天前
【ARM 裸机开发 (IMX6ULL-mini)】SPI 协议与ADXL345 三轴加速度传感器
arm·spi·adxl345加速度传感器
susplus9 天前
【ARM 裸机开发 (IMX6ULL-mini)】RGB-LCD 驱动与时序详解
arm·rgb_lcd
额额额对了9 天前
嵌入式 ADC 从入门到实战:基于 i.MX6ULL 的裸机驱动开发
驱动开发·嵌入式硬件·arm