当前位置: 首页> 房产> 市场 > 汇编

汇编

时间:2025/7/10 13:25:21来源:https://blog.csdn.net/2302_77277624/article/details/141465894 浏览次数:0次

汇编指令

  • 随机数
  • mov指令
  • mov指令
  • ldr指令(伪指令)
  • add指令
  • sub指令
  • bic指令
  • orr指令
  • b指令
  • cmp指令
  • stmfd指令
  • ldmfd指令
  • import
  • 汇编指令的s后缀

随机数

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
关键字:汇编

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: