在汇编中循环?

时间:2015-04-07 07:50:06

标签: assembly

我编写了这个汇编程序,一起添加长度,直到用户输入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循环。无论如何,如果有人有任何可能的解决方案或建议,我会很感激。

0 个答案:

没有答案