为 Armv7 汇编程序打印换行符
Print Newline for Armv7 assembly program
我正在研究这个 armv7 汇编程序,它可以找到两个整数的最大公约数 (gcd)。除了换行功能外,一切正常。当我 assemble 和 运行 程序时,它不打印任何换行符,只打印一行中的整数。关于如何解决这个问题有什么建议吗?
.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"
这是罪魁祸首:
add r4, #48
ldr r9, =store
str r4, [r9]
此代码有两个错误:
- 它只适用于 0 到 9 之间的数字
str r4, [r9]
将四个字节存储到 store
,在两字节缓冲区之后覆盖换行符。
要解决第一个问题,您需要用余数除以将r4
中的数字分成两位数。要解决第二个问题,请使用 strb
或 strh
来存储字节或半字,以免超出缓冲区。
我正在研究这个 armv7 汇编程序,它可以找到两个整数的最大公约数 (gcd)。除了换行功能外,一切正常。当我 assemble 和 运行 程序时,它不打印任何换行符,只打印一行中的整数。关于如何解决这个问题有什么建议吗?
.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"
这是罪魁祸首:
add r4, #48
ldr r9, =store
str r4, [r9]
此代码有两个错误:
- 它只适用于 0 到 9 之间的数字
str r4, [r9]
将四个字节存储到store
,在两字节缓冲区之后覆盖换行符。
要解决第一个问题,您需要用余数除以将r4
中的数字分成两位数。要解决第二个问题,请使用 strb
或 strh
来存储字节或半字,以免超出缓冲区。