汇编基础知识

arm架构简介

a. 架构及特点( p28 )

RISC(精简指令集架构)

b. 寻址及存储模式(p35)

4G //2^32=4G(寻址)
两种模式:little-endian, big-endian
默认:little-endian

c. 工作模式(p1139)

usr(用户模式)

特权模式:

sys(系统模式)

异常模式:

und(未定义指令模式)
svc(管理模式)
irq(外部中断模式)
fiq(快速中断模式)
abt(数据访问终止模式)
moni
hyp

(除了用户模式(usr),其他8种称为特权模式) (除了用户模式(usr),和系统模式(sys),其他的称为异常模式)
svc,unde,abt,fiq,irq,moni,hyp (7种)

Mode changes can be made under software control, or can be caused by
an external or internal exception. (这些工作模式可以由软件控制改变,或者硬件)

d. 工作状态(p1148)

ARM 指令集 (32bit)(默认状态) Thumb 指令集 (16bit)
// cpsr可以设置 (T位可以设置)

e.立即数:(arm-linux-objdump -d *.o进行反汇编。来看机器码)
机器码的最后三个机器码,的编码规则:

如果小于255的数则直接放在低8位,
如果大于255的数,则系统会把数,循环左移动2*n位后,如果可以变为小于255的数,
则放在低8位,然后把n放在高四位
例如:e… 2ff 0xf000000f
//左移4位就小于255了,所以,n为2,


操作数:直接操作内存和寄存器的值

  1. ARM寄存器

在这里插入图片描述

APCS规则 (ARM Procedure Call Standard)

a、寄存器的使用规则:
在这里插入图片描述

R15-PC的例子:

mov lr,pc //读pc寄存器中的值放到lk中,读到的事下下一天指令的地址。 ldr pc,=hello
//伪指令;前面放的=,表示吧这个立即数写入pc寄存器,实现跳转。然后跳到hello这个函数的地址去执行, mov r1,#23

b. arm汇编指令调用函数的时候,需要保存现场和回复现场
在这里插入图片描述

解读:

首先,我们要懂,arm的栈是满递减的

一、指令集:

1.1、 add(加法)

ADD{条件}{S} 目的寄存器, 操作数1<寄存器>, 操作数2
ADD 指令用于把两个操作数相加,并将结果存放到目的寄存器中。操作数1 应是一个寄存器,操作数2可以是一个寄存器、被移位的寄存器,或一个立即数。例如:
ADD R0,R1,R2 @ R0 = R1 + R2
ADD R0,R1,#256 @ R0 = R1 + 256
ADD R0,R2,R3,LSL#1 @ R0 = R2 + (R3 << 1)

1.2、sub(减法)

SUB{条件}{S} 目的寄存器, 操作数1<寄存器>, 操作数2
SUB 指令用于把操作数1 减去操作数2,并将结果存放到目的寄存器中。操作数1 应是一个寄存器,操作数2 可以是一个寄存器、被移位的寄存器或一个立即数。该指令可用于有符号数或无符号数的减法运算。例如:
SUB R0,R1,R2 @R0 = R1 - R2
SUB R0,R1,#256 @R0 = R1 - 256
SUB R0,R2,R3,LSL#1 @R0 = R2 - (R3 << 1)

1.3、sbc

SBC{条件}{S} 目的寄存器, 操作数1<寄存器>, 操作数2
SBC 指令用于把操作数1 减去操作数2,再减去CPSR 中的C 条件标志位的反码,并将结果存放到目的寄存器中。操作数1 应是一个寄存器,操作数2 可以是一个寄存器,被移位的寄存器,或一个立即数。该指令使用进位标志来表示借位,这样就可以做大于32 位的减法,注意不要忘记设置S 后缀来更改进位标志。该指令可用于有符号数或无符号数的减法运算。例如:
SUBS R0, R3, R6 @减最低位字节,不带进位
SBCS R1, R4, R7 @减第二个字,带进位
SBCS R2, R5, R8 @减第三个字,带进位

#三句话实现了96bit减法运算,由于ARM寄存器宽度只有32bit所以分三次相减

2.1、and (按位与)

AND{条件}{S} 目的寄存器, 操作数1<寄存器>, 操作数2
AND 指令用于在两个操作数上进行逻辑与运算,并把结果放置到目的寄存器中。操作数1 应是一个寄存器,操作数2 可以是一个寄存器,被移位的寄存器,或一个立即数。该指令常用于屏蔽操作数1 的某些位,或者是清零某些位。示例如下:
AND R0,R0,#3 @该指令保持R0的0、1 位,其余位清零。

2.2、orr (按位或)

ORR{条件}{S} 目的寄存器, 操作数1<寄存器>, 操作数2
ORR 指令用于在两个操作数上进行逻辑或运算,并把结果放置到目的寄存器中。操作数1 应是一个寄存器,操作数2 可以

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值