我正在研究这个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"
答案 0 :(得分:1)
这是谴责:
add r4, #48
ldr r9, =store
str r4, [r9]
此代码有两个错误:
str r4, [r9]
将四个字节存储到store
,在两字节缓冲区后立即覆盖换行符。要修复第一个问题,您需要使用rest进行除法,以将r4
中的数字分成两位数。要解决第二个问题,请使用strb
或strh
来存储字节或半字,而不是超出缓冲区。