2011-10-25 17 views
-8

我有裝配分配問題:大會IF和

編寫一個程序,會寫的數字數據段7-15, 從偏移200H開始,然後使用一個循環,並比較它們到 從內存中讀取數據,DX將插入可被4整除的數字之和 。

這是我的代碼,它不起作用。我是彙編語言的初學者。有人可以幫我嗎?

mov ax,data 
mov ds,ax 
mov cl,07d 
mov ch,015d 
mov [bx],200h 

c: 
mov [bx] ,cl 
inc cl 
inc bx 
cmp cl,ch 
jne c 

c1: 
mov cl,[bx] 
if 
AND ax, 3h 
add dx, ax 
inc cl 
inc bx 
else 
jmp c1 
end if 

回答

0

您正在C循環中增加BX寄存器,然後忘記再次分配200h。那麼它會持續升溫並變成209h或更多,但您需要從200h再次開始。

jne c 
**mov [bx],200h** add this. 
c1: 
mov cl,[bx] 
+0

確定我糾正一些你建議,但我仍然有一個problrm機智的條件。如果其他結束如果。我想念寫在我的代碼? tnx – user1011868

+2

在彙編層面,如果有這樣的話。有分支機構。如果測試成立,您可以測試某些內容並跳轉到任意標籤。 – kay

6

有一個在...哦,不IFELSE指示... 任何彙編語言。如果你想在程序集中有一個等效的if/else塊,你需要編寫正確的指令序列。

例如,考慮一下這個C代碼:

if (a == 0) 
{ 
    b = 1; 
} 
else 
{ 
    b = 2; 
} 

適當的彙編代碼會是這個樣子:

cmp eax, 0 
    jne anotzero 
aiszero: 
    mov ebx, 1 
    jmp endifblock 
anotzero: 
    mov ebx, 2 
    jmp endifblock 
endifblock: 
    nop 
+0

我在我的程序中寫了這個,但stil不起作用。 – user1011868

+0

如果你不能得到這個工作,那麼恐怕我不能在這件事情上再有任何幫助。 –

+2

@ user1011868你的問題表明你需要編程一個i286 CPU/16位程序。 eax和ebx是32位寄存器。請在您的問題中說明您的目標平臺! (傑夫的回答非常好,如果你看了你的文獻,你會明白的。) – kay