.text @文本段
.global _start @声明一个_start的全局函数
_start: @_start标签 相当于c语言中的函数
/* mov r0,#0xf
mov r1,#0xff
@mov r2,#0xfff
@mov r3,#0xffff
@mov r4,#0xfffff
mov r5,#0xffffff
mov r6,#0xfffffff
mov r7,#0xffffffff
*/
/* mvn r0,#0xf
mvn r1,#0xff
*/
@ldr r0,=0xef
@------------------------数据搬移指令
/* mov r0,#0xff
lsr r1,r0,#4 @将r0寄存器中的值逻辑右移4位,放在r1
lsl r2,r1,#4@ 将r1寄存器中的值,逻辑左移4位,存放到目标寄存器中r2
ldr r3,=0x8000000f
asr r4,r3,#4@将r3寄存器中的值,算数右移4位,存放到目标寄存器中r4
ror r5,r4,#4@将r4寄存器中的值,循环右移4位,存放到目标寄存器中r5
*/
@----------------------------------位运算指令
/*mov r0,#0xff
and r1,r0,#(~(0x1<<4)) @ 将r0寄存器中的第4位清零,保证其他位不变,存放到r1寄存器中
orr r2,r1,#(0x1<<4) @将r1寄存器中的第4位置1,保证其他位不变,存放到r2寄存器中
eor r3,r2,#(0x1<<4) @将r2寄存器中的第4位取反,保证其他位不变,存放到r3寄存器中
*/
/*ldr r0,=0x12345678
and r1,r0,#(~(0x1 << 4)) @ 1> 将R0寄存器中的第[4]位清0,保持其他位不变
orr r2,r0,#(0x1 << 7) @ 2> 将R0寄存器中的第[7]位置1,保持其他位不变
add r3,r0,#(~(0xf << 28)) @ 3> 将R0寄存器中的第[31:28]位清0,保持其他位不变
orr r4,r0,#(0xf << 4) @ 4> 将R0寄存器中的第[7:4]位置1,保持其他位不变
orr r5,r0,#(0x15 << 11) @ 5> 将R0寄存器中的第[15:11]位修改位10101,保持其他位不变
and r5,r0,#(~(0x5 << 12))
*/
@---------------------------------------算术运算指令 加法
/*实验目的:实现两个64位数相加
第一个64位:高32位用r0寄存器0x3 低32位用r1寄存器0xffffffff
第二个64位:高32位用r2寄存器0x4 低32位用r3寄存器0x1
结 果:高32位用r4寄存器0x8 低32位用r5寄存器0x0
*/
/*ldr r0,=0x3
ldr r1,=0xffffffff
ldr r2,=0x4
ldr r3,=0x1
adds r5,r1,r3 @r5 = r3 + r1 = 0000 0000 @产生进位加s
adc r4,r0,r2 @r4 = r0+r2+1 = 0x8
*/
@---------------------------------算术运算指令 减法
/*实验目的:实现两个64位数相减
第一个64位:高32位用r0寄存器0x7 低32位用r1寄存器0x1
第二个64位:高32位用r2寄存器0x4 低32位用r3寄存器0x2
结 果:高32位用r4寄存器0x2 低32位用r5寄存器0xffffffff
*/
/*ldr r0,=0x7
ldr r1,=0x1
ldr r2,=0x4
ldr r3,=0x2
subs r5,r1,r3
sbc r4,r0,r2
*/
@-----------------------------比较指令
mov r0,#0x9
mov r1,#0x3
@比较r0和r1值
cmp r0,r1
subhi r0,r0,r1 @如果r0>r1,执行r0 = r0 - r1
subcc r1,r1,r0 @如果r1>r0,执行r1 = r1 - r0
stop: @stop标签 相当于c语言中的函数
b stop @b是跳转指令,b stop表示跳转到stop标签下的第一条指令执行 相当于c语言中的while(1)
.end @表示代码结束的标志
标志
跳转指令
.text @文本段
.global _start @声明一个_start的全局函数
_start: @_start标签 相当于c语言中的函数
@---------------------------------跳转指令
mov r0,#0x4
mov r1,#0x3
bl add_Func @保存函数返回地址到lr寄存器中
mov r3,#0x9
b stop
add_Func:
add r0,r0,r1
mov pc,lr @将lr寄存器赋值给pc
stop: @stop标签 相当于c语言中的函数
b stop @b是跳转指令,b stop表示跳转到stop标签下的第一条指令执行 相当于c语言中的while(1)
.end @表示代码结束的标志
特殊功能寄存器
.text @文本段
.global _start @声明一个_start的全局函数
_start: @_start标签 相当于c语言中的函数
/*
实验目的:从SVC模式切换到USER模式
系统一上电处于SVC模式
CPSR寄存器存放模式相关内容
M[4:0] = 10011 ----->SVC模式
M[4:0] = 10000 ----->user模式
*/
@ 1.将CPSR寄存器中的值读到普通寄存器r0中
mrs r0,cpsr
@ 2.将r0[4:0] = 10000
orr r0,r0,#((0x1 << 4))
and r0,r0,#(~(0xf))
@ 3.将r0寄存器中的值写会CPSR寄存器中
msr cpsr,r0
stop: @stop标签 相当于c语言中的函数
b stop @b是跳转指令,b stop表示跳转到stop标签下的第一条指令执行 相当于c语言中的while(1)
.end @表示代码结束的标志