汇编

汇编指令

随机数

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
相关推荐
雪碧透心凉_1 天前
8086汇编(16位汇编)学习笔记00.DEBUG命令使用解析及范例大全
汇编
C66668884 天前
C#多线程
开发语言·汇编·c#
傻童:CPU5 天前
汇编源程序的理解
汇编
木槿715 天前
软件包git没有可安装候选
汇编·git
ok0605 天前
各种开源汇编、反汇编引擎的非专业比较
汇编·开源
roboko_5 天前
MIPS指令集(一)基本操作
汇编
Crossoads6 天前
【汇编语言】内中断(三) —— 中断探险:从do0到特殊响应的奇妙旅程
android·开发语言·javascript·网络·汇编·单片机·机器学习
染指11106 天前
49.第二阶段x86游戏实战2-鼠标点击call深追二叉树
汇编·c++·windows·游戏安全·反游戏外挂·游戏逆向
程序leo源8 天前
深入理解指针
android·c语言·开发语言·汇编·c++·青少年编程·c#
skywalk81639 天前
好玩的汇编编译器NASM:一款基于x86架构的汇编与反汇编软件
汇编