ARM 汇编指令作业(求公约数、for循环实现1-100之间和、从SVC模式切换到user模式简单写法)

1、求两个数最大公约数

vbnet 复制代码
.text
.globl _start

_start:
	mov r0, #9
	mov r1, #15
Loop:               @ 循环
	cmp r0,r1       @ 比较r0和r1的大小
	beq stop        @ 当r0和r1相等时,跳到stop标签
	subhi r0,r0,r1  @ r0-r1>0 时,证明r0>r1,将r0-r1的值赋给r0,否则不执行
	subcc r1,r1,r0  @ r1-r0>0 时,证明r1>r0,将r1-r0的值赋给r1,否则不执行
	b Loop          @ 跳转到Loop标签下的第一条指令,达到循环效果
stop:
	b stop	
.end
	

2、用for循环实现1-100之间和

C:

cs 复制代码
for(i=1;i<=100;i++)
{
    sum = sum + i;
}

汇编:

vbnet 复制代码
.text
.globl _start

_start:
	mov r0, #1         @ i,i=1
	mov r1, #100       @ 条件变量i<=100
	mov r2, #0         @ sum
	
Loop:                  @ 循环
	cmp r0,r1          @ 比较r0和r1的大小
	bhi stop           @ 当r0>r1时,跳到stop标签
	add r2,r2,r0       @ r2 = r2 + r0  ---> sum=sum+i
	add r0,#(0x1 << 0) @ i++
	b Loop             @ 跳转到Loop标签下的第一条指令,达到循环效果
	
stop:
	b stop	
.end
	

3、从SVC模式切换到user模式简单写法

cpsr = 0xD0 ====> user模式

vbnet 复制代码
.text
.globl _start

_start:
	msr cpsr,0xD0
stop:
	b stop	
.end
	
相关推荐
A小辣椒1 天前
TShark:Wireshark CLI 功能
linux
A小辣椒2 天前
TShark:基础知识
linux
AlfredZhao2 天前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao2 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334663 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪3 天前
linux 拷贝文件或目录到指定的位置
linux
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
bush43 天前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5203 天前
Linux 11 动态监控指令top
linux
不会C语言的男孩3 天前
Linux 系统编程 · 第 8 章:进程基础
linux·c语言