汇编

汇编指令

随机数

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
相关推荐
请输入蚊子15 小时前
《操作系统真象还原》 第六章 完善内核
linux·汇编·操作系统·bochs·操作系统真像还原
myloveasuka16 小时前
指令格式举例
汇编·笔记·计算机组成原理
我在人间贩卖青春1 天前
汇编之分支跳转指令
汇编·arm·分支跳转
我在人间贩卖青春1 天前
汇编之加载存储指令
汇编·arm·寄存器加载存储
我在人间贩卖青春1 天前
汇编之状态寄存器访问指令
汇编·arm·状态寄存器
我在人间贩卖青春1 天前
汇编之软中断指令和协处理指令
汇编·arm·软中断·协处理
我在人间贩卖青春2 天前
汇编之数据处理指令
汇编·arm·数据处理指令
白太岁3 天前
操作系统开发:(11) RTOS 与 GPOS 的分界线:MMU
c语言·开发语言·汇编·arm开发·系统架构
枷锁—sha3 天前
【pwn系列】Pwndbg 汇编调试实操教程
网络·汇编·笔记·安全·网络安全
白太岁4 天前
C++:(4) 内存布局、编译流程、关键字及其链接性
c语言·汇编·jvm·c++