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
	
相关推荐
北漂Zachary1 小时前
四大编程语言终极对决:汇编/C#/Go/Java谁更强
汇编·golang·c#
keyipatience1 小时前
7.Linux1权限-开发工具
linux
j_xxx404_2 小时前
万字长文爆肝:彻底弄懂Linux文件系统(Ext2),从Inode、Block到Dentry核心机制全解析
linux·运维·服务器
2401_841495642 小时前
Linux C++ TCP 服务端经典的监听骨架
linux·网络·c++·网络编程·ip·tcp·服务端
楼田莉子3 小时前
同步/异步日志系统:日志器管理器模块\全局接口\性能测试
linux·服务器·开发语言·c++·后端·设计模式
奇妙之二进制3 小时前
zmq源码分析之io_thread_t
linux·服务器
cui_ruicheng3 小时前
Linux IO入门(三):手写一个简易的 mystdio 库
linux·运维·服务器
telllong3 小时前
MCP协议实战:30分钟给Claude接上你公司的内部API
linux·运维·服务器
实心儿儿3 小时前
Linux —— 进程概念 - 程序地址空间
linux·运维·算法
buhuizhiyuci3 小时前
linux篇-应用商店:“yum / apt“ 的详解
linux·运维·服务器