keill汇编指令

.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  @表示代码结束的标志

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值