如何理解stmia和stmib
发布网友
发布时间:2022-05-05 15:53
我来回答
共1个回答
热心网友
时间:2022-06-19 15:05
这么久了没人给你回答,我来回答一部分吧
一、指令理解:请阅读并理解以下ARM汇编指令,并写出每条指令执行前后的相关寄存器内容或指令所完成功能
;/*
;************************************************************************************************************
;** 实验测试代码 **
;************************************************************************************************************
;*/
;0 数据准备
MOV R0, #0x00 ;将立即数0x00放到R0寄存器,下同
MOV R1, #0x01
MOV R2, #0x02
MOV R3, #0x03
MOV R4, #0x04
MOV R5, #0x05
MOV R6, #0x06
MOV R7, #0x07
MOV R8, #0x08
;1 立即寻址
ADD R0,R0,#0x01 ;将R0中的数据加0x01结果放到R0中
AND R8,R7,#0x3F;将R7中的数据位与0x3f结果放到R8中
;有效立即数问题
MOV R0,#0x0000F200
MOV R0,#0x
CMP R1,R2 ;比较R1与R2,若是R1小于R2,则标志位置位,以下类似
CMP R2,R1
TEQ R1,R2
MOV R1,R2
TEQ R1,R2
;2 寄存器寻址
MOV R1,#0x01
MOV R2,#0x02
SUB R0,R1,R2 ;将R1减去R2,将结果存在R0
SUB R0,R2,R1
ADD R0,R1,R2
ADD R3,R2,R1,LSR #2
ADD R3,R2,R1,LSL #R4
SUBS R0,R1,R2
SUBS R0,R2,R1
ADDCC R0,R1,R2
ADDCS R0,R1,R2
MOV R1,#0xF
MOV R2,#0xF
ADD R3,R2,R1
ADDS R3,R2,R1
ADDCC R3,R2,R1
ADDCS R3,R2,R1
MOV R0,#0xFFFFFFFF
AND R0,R0,#0xFFFFFF57
MOV R0,#0xFFFFFFFF
BIC R0,R0,#0xA8
ORR R4,R4,#0x3C ;位或操作
MOV R1,#0xFFFFFFFF
EOR R1,R1,#0x124
MOV R1,#40
MOV R2,#31
MUL R1,R2,R1
MOV R1,#40
RSB R1,R1,R1, LSL #5
;3 寄存器间接寻址
MOV R0, #0x0000F200
MOV R1, #0x0C
LDR R0,[R1]
STR R0,[R1]
;4 基地加偏址寻址
LDR R0,[R1,#4]
LDR R0,[R1,#4]!
LDR R0,[R1],#4
LDR R0,[R1,R2]
LDR R0,[R1,R2,LSL #2]
;5 堆栈寻址
MOV R0, #0x00
MOV R1, #0x01
MOV R2, #0x02
MOV R3, #0x03
MOV R4, #0x04
MOV R5, #0x05
MOV R6, #0x06
MOV R7, #0x07
MOV R8, #0x08
MOV R13,#0x0C;配置堆栈指针值
STMFD R13!,{R1,R5,R2};满递减压栈
LDMFD SP!,{R3,R2,R1};满递减出栈
LDMFD SP!,{R1,R2,R3}
;6 块拷贝寻址
MOV R1, #0x0C
STMIA R1,{R0,R5,R2}
STMIA R1!,{R0,R5,R2}
MOV R1, #0x0C
STMIB R1,{R0,R2,R5}
STMIB R1!,{R0,R2,R5}
;8 外设控制器访问
LDR R0,=0x7CF
LDR R1,=0x01D20008
STR R0,[R1]
LDR R0,=0x30
LDR R1,=0x01D2000C
STR R0,[R1]
BIC R0,R0,#0x30
LDR R1,=0x01D2000C
STR R0,[R1]