【发布时间】:2018-05-10 01:34:20
【问题描述】:
我正在研究这个 armv7 汇编程序,它可以找到两个整数的最大公约数 (gcd)。除了换行功能外,一切正常。当我组装并运行程序时,它不打印任何换行符,只打印一行中的整数。关于如何解决这个问题的任何建议?
.global _start
_start:
mov r2, #24 @first set of integers
mov r4, #18
bl mysub1
bl mysub2
bl mysub3
mov r2, #78 @second set of integers
mov r4, #34
bl mysub1
bl mysub2
bl mysub3
mov r2, #99 @third set of integers
mov r4, #36
bl mysub1
bl mysub2
bl mysub3
_exit:
mov r7, #1
swi 0
mysub1: @subroutine to find gcd
cmp r2, r4
beq done
bgt greater
blt less
greater:
sub r2, r2, r4
bal mysub1
less:
sub r4, r4, r2
bal mysub1
done:
bx lr
mysub2: @subroutine to convert gcd result to ascii value
add r4, #48
ldr r9, =store
str r4, [r9]
mov r7, #4 @print out a newline
mov r0, #1
mov r2, #1
ldr r1, =newline
swi 0
bx lr
mysub3: @subroutine to print out the ascii value
mov r7, #4
mov r0, #1
mov r2, #2
ldr r1, =store
swi 0
bx lr
.data
store:
.space 2
newline:
.ascii "\n"
【问题讨论】:
-
您为什么操作系统编程?你真的可以给你的函数起更具描述性的名字。
mysub1、mysub2和mysub3都是很没用的名字。 -
@fuz 我只是使用在 raspbian 上运行的树莓派。我知道 mysubs 没有意义,这就是我将 cmets 放在它们旁边的原因。
-
尝试重命名你的函数!
-
@fuz 没有修复它!
-
重命名函数是为了让其他人更容易理解代码,而不是直接修复错误。
标签: linux assembly newline armv7