2015-06-21 44 views
0

這是我的代碼: placeStart是CMP條件執行一次,而不是重複它的播放機的首位。爲什麼我的循環跳轉條件

proc Shoot 
    mov bx,[placeStart] 
    mov dx,offset Game 
    add bx,dx  
    ;; Moving to bx the position of the character 
    mov cx,10 
    check_shoot: 
     cmp [byte ptr bx-NumCols],'+' ;;checking if the shoot will override the plus 
     je exit 
     sub bx,NumCols 
     mov [byte ptr bx],'*' 
     cmp [byte ptr bx+NumCols],'*' 
     je first_shoot 
     jmp finish_loop 
     first_shoot: 
     mov [byte ptr bx+NumCols],' ' 
     finish_loop: 
     call PrintGame 
     loop check_shoot 
+0

「NumCols」究竟是什麼?用'equ'或變量('db' /'dw' /'dd')定義的直接常量?您應該發佈完整的,最小的代碼來重現您的問題。 – Michael

回答

0

你甚至沒有代碼中的循環。我不確定你想要達到什麼效果,但是你可能想要製作一個jmp回到check_shoot或某些這樣的標籤。只有這樣你才能在代碼中有一個循環。

編輯:添加loop check_shootcall PrintGame後,你會看到比較是cx獨立的這是什麼loop中真正被修改。由於這一點,每次程序循環時,所有比較都是相同的,所以您會得到相同的結果(儘管PrintGame proc應該被稱爲10次)。

一個建議是使用調試器和單步通過您的代碼,看看是否一切正常,因爲它應該(即您是否已經實際編碼正確的事情)。

+0

呼叫PrintGame後有循環check_shoot –

+0

重要的是(以得到一個正確的答案)。我已經根據此編輯了這個問題(等待同行評議)。我也編輯了我的答案來達到這個效果。 –