汇编

汇编指令

随机数

1.如果某个数的数值范围是0~255之间,那么这个数一定是立即数;

2.把某个数展开成2进制,这个数的最高位1至最低位1之间的二进制数序列的位数不能超过8位;

3.这个数的二进制序列的右边必须为偶数个连续的 0

mov指令

mov指令:加载12位立即数到寄存器或转移一个寄存器的值到另外一个寄存器

复制代码
1.mov r0, #2 ;加载立即数2到寄存器r0,MOV{S}<c> <Rd>, #<const>
2.mov r1, r0 ;将r0寄存器的值加载到r1,MOV{S}<c> <Rd>, <Rm>

大多数指令的格式为opcode rd, rn ,rm,其中,rd是目标寄存器,rn是第一操作数寄存器

mov指令

mov指令:按位取反立即数并将该数写入寄存器中

ldr指令(伪指令)

向目标地址的内存中加载数据到某个寄存器

ldr r0, =0x1FF

复制代码
mov r0, #0x4000 0000
ldr r1, [r0, #4]
			  #4偏移量

add指令

add指令常用的两种方式

复制代码
ADD{S}<c> <Rd>, <Rn>, #<const> : 将#随机数 和寄存器Rn中的值相加存入Rd寄存器中
ADDS}<c> <Rd>, <Rn>, <Rm>{, <shift>}:将Rn寄存器和Rm中的值相加存入Rd寄存器中

sub指令

复制代码
1.SUB{S}<c> <Rd>, <Rn>, #<const> :将Rn寄存器中的值和#随机数相减存入寄存器Rd中
2.SUB{S}<c> <Rd>, <Rn>, <Rm>{, <shift>}:将Rn中的值和Rm中的值相减存入Rd中

bic指令

指定位清零

bic r1, r0, #(1<<0) 将r0中数据为1的位数清零后 存入r1中

orr指令

指定位置一

orr r1, r0, #(1<<0)

b指令

1.b 跳转至目标指令

2.bl 跳转至目标指令 并且保存pc的值到LR中

3.bx(pc) lr 将lr中的值装入pc中

4.blx

cmp指令

cmp r0, r1 (r0-r1)

stmfd指令

stmfd sp!, {r0 - r12, ...}

入栈保护

ldmfd指令

ldmfd sp!, {r0-r12, ...}

出栈

import

import c语言函数入口地址

bl fn

参数由寄存器传递

如果参数超过五个 由栈传参

如果函数有返回值 将存入r0返回

push{r0} 入栈

pop{r0} 出栈

增栈:指针向地址增加方向移动

减栈:指针向地址减小方向移动

满栈:先移动再写入

空栈:先写入再移动

ARM中为满减栈

汇编指令的s后缀

汇编指令的s后缀,几乎所有的汇编指令都可以在指令后面加上s后缀,s后缀的含义是在指令执行过程中会更新cpsr寄存器的N,V,C,Z位

复制代码
N:在结果是有符号的二进制补码情况下,如果结果为负数,则N=1;如果结果为非负数,则N=0
Z:如果结果为0,则Z=1;如果结果为非零,否则Z=0
C:是针对无符号数最高有效位向更高位进位时C=1;减法中运算结果的最高有效位从更高位借位时C=0
V:该位是针对有符号数的操作,会在下面两种情形变为1,两个最高有效位均为0的数相加,得到的结果最高有效位为1;两个最高有效位均为1的数相加,得到的结果最高有效位为0;除了这两种情况以外V位为0
相关推荐
切糕师学AI13 小时前
ARM 中的 SVC 监管调用(Supervisor Call)
linux·c语言·汇编·arm开发
ベadvance courageouslyミ16 小时前
硬件基础中断
汇编·硬件·中断
你爱写程序吗(新H)20 小时前
基于单片机的洗衣机控制系统设计 单片机洗衣机控制(设计+文档)
c语言·汇编·单片机·嵌入式硬件·matlab
VekiSon2 天前
ARM架构——用汇编语言点亮 LED
汇编·arm开发·嵌入式硬件
JJCar2 天前
汇编文字池(literal pool)
汇编·文字池·literal pool
乾复道3 天前
巧用终端,每天节省2小时
汇编·经验分享·vim
2501_927773073 天前
嵌入式——汇编语言1
汇编
山峰哥3 天前
数据库工程核心:SQL调优让查询效率飙升的实战密码
网络·汇编·数据库·sql·编辑器
秋深枫叶红4 天前
嵌入式第四十七篇——ARM汇编
汇编·arm开发·学习
jh10_4 天前
嵌入式硬件DAY5(ARM汇编)
汇编·arm开发·嵌入式硬件