2013-12-07 66 views
0

跳我想輸入我很困惑比較和裝配

11,00,01,10 in ebx and eax register. 

Everytime i input 01 or 10 i need to jump at l1. 

And if i input 11 or 00 i want to quit from the procedure. 

我怎樣才能做到這一點。我嘗試過,但只有前兩個cmp的工作休息不工作。

 
    cmp ebx,0 
    cmp eax,0 
    je l1 

    cmp ebx,1 
    cmp eax,0 
     jmp quit 

    cmp ebx,1 
    cmp eax,1 
    jmp quit2 

l1: mov edx,offset num3 
    call writestring 
    call crlf 
    mov edx,offset num2 
    call writestring 
    call calf 
+0

我不建議在鏈中使用多重cmp指令。您無法控制程序的流程。嘗試緩衝一個結果,異或適當的寄存器並再次發出cmp以結合結果,然後執行所需的邏輯 – icbytes

+0

我不知道如何使用緩衝區。我的班級還沒有做緩衝。 – lhag

+0

將多個'cmp'與邏輯AND操作[s]結合在一起的最簡單方法是先執行'cmp',然後執行條件跳轉。到'my_label',然後在'my_label:'做第二個'cmp'和相關的第二個條件跳轉。 – nrz

回答

1
  1. 你肯定 'JMP'?不應該是'je'嗎?
  2. 據我所知,只有最後一個cmp結果被存儲。所以如果你寫兩個連續的cmp命令,第一個不會有任何影響。任何cmp命令後,您應該檢查結果。
  3. 如果您在檢查10個案例後立即跳轉,您將永遠無法檢查11個案例。
+0

那麼我怎樣才能得到我想要的輸出.. – lhag

+0

有點長,但你可以嘗試編寫代碼作爲一個簡單的算法(如在C中)並將其轉換爲程序集。例如:if(eax == 0){if ebx == 0 {jump to l1} else {quit; }} else else {if(eax == 1)...} – MaMazav