我编写了这个汇编程序,一起添加长度,直到用户输入0.根据用户输入,长度应更改为英寸或英尺('表示脚,"表示英寸)。我让它正确检测用户输入,但我不能让它继续循环。我把asteriks(*)放在我认为用于检测用户是否输入0的部分周围。
.data
enter: .asciz "Enter a measurement and unit(Ex: 4' or 3\"; 0' or 0\" when done): "
read: .asciz "&value"
inches: .asciz " inches"
total: .asciz "Total: "
.text
############################ main() ##############################
.global main
main:
# Your code goes here!
pushq %rbp
movq %rsp, %rbp
subq $16, %rsp
movl $0, -4(%rbp)
.L1:
movl $enter, %edi
movl $0, %eax
call printStr
leaq -12(%rbp), %rdx
leaq -8(%rbp), %rsi
movl $read, %eax
call readUInt
movl %eax, -8(%rbp)
call getchar
movl %eax, -12(%rbp)
movl -12(%rbp), %eax
cmpl $39, %eax
jne .L2
movl -8(%rbp), %edx
movl %edx, %eax
addl %eax, %eax
addl %edx, %eax
sall $2, %eax
addl %eax, -4(%rbp)
jmp .L3
.L2:
movl -12(%rbp), %eax
cmpl $34, %eax
jne .L3
movl -8(%rbp), %eax
addl %eax, -4(%rbp)
.L3:
**movl -8(%rbp), %eax
testl %eax, %eax
jne .L1**
movl $total, %edi
call printStr
movl -4(%rbp), %edi
call printUInt
movl $inches, %edi
call printStr
leave
ret
围绕星号(*)是我测试用户输入的部分(如果它是0)。所以它就像一个DO_WHILE循环。无论如何,如果有人有任何可能的解决方案或建议,我会很感激。