2013-05-01 53 views
-1

我在编写汇编程序和麻烦区域是我的比较指令的结尾,它似乎并没有工作,我似乎没有做任何工作,所以所有输入被读取在被发送到拒绝汇编 - 比较指令不工作

代码:

loop_top:   
    input string,40     ; read ASCII characters 
    atod string      ; convert to integer 
    mov number1, eax     ; store in memory 
    jz done 

    cmp number1, 50     ; number1>50? 
    jg rejected 
    cmp number1, -50     ; number1<-50? 
    jl rejected 

rejected: 
    dtoa number1ch,eax    ; convert to ASCII characters 
    output number1ch     ; print value and message to screen 
    output reject 
    jmp loop_top 

    mov eax, number1     ; store in register 
    cmp eax,0       ; eax > 0? 
    jnl isPositive 

问题区域? :

  cmp number1, 50     ; number1>50? 
     jg rejected 
     cmp number1, -50     ; number1<-50? 
     jl rejected 

rejected: 
     dtoa number1ch,eax    ; convert to ASCII characters 
     output number1ch     ; print value and message to screen 
     output reject 
     jmp loop_top 

因此,任何数量的例如:4,50,51,-3,-50,-51 ..都被发送到拒绝。 有人可以向我解释为什么?谢谢!

+0

您希望哪个范围有效? – 2013-05-01 06:26:27

+0

我希望50和-50之间的任何内容都有效@PaulR – 2013-05-01 06:35:43

+0

顺便说一句,我不认为这是MARIE组装?这只是x86,不是? – 2013-05-01 08:14:34

回答

1

看起来你只是 “落”,进而rejected即使number1是有效的:

 cmp number1, 50     ; number1>50? 
    jg rejected      ; <<< jump to rejected if number1 > 50 
    cmp number1, -50     ; number1<-50? 
    jl rejected      ; <<< jump to rejected if number1 < -50 

    ;; we get here if -50 <= number1 <= 50, i.e. if 
    ;; number1 is in the valid range... 

    ;; but then we fall through to `rejected` anyway... 

    ;; so code for processing `number1` needs to go here 
    ;; (or you could just put a `jmp` here to the 
    ;; relevant code)... 

rejected: 
+0

我已经试过了,那也不管用。在50和-50之间的每个输入都被发送到**被拒绝** @PaulR – 2013-05-01 06:33:32

+0

好吧 - 我现在看到问题了 - 看到更新的答案... – 2013-05-01 08:13:45

+1

非常感谢您,我只需重新排列一些代码,停止直行拒绝。谢谢你清楚的头脑来帮助我! @PaulR – 2013-05-01 08:58:39

0
  cmp number1, 50     ; number1>50? 
     jg rejected 
     cmp number1, -50     ; number1<-50? 
     jl rejected 

rejected: 

嘛?

如果人数大于50,它去拒绝,因为的jg
如果数量低于-50时,它会被拒绝,因为的jl
如果没有这些跳跃的发生,执行流向下一条指令(您填写的内容)r_j_ct_d

+0

谢谢!我所要做的就是重新安排代码,以便它直接停止直接接受该指令。那么简单呃。感谢让我看到@PeterWright – 2013-05-01 08:58:01