2016-12-22 71 views
4

我嘗試編寫一個彙編代碼來確定28是否是完美數字。但我有一個問題。當我運行代碼時,emu8086無法識別我的標籤。
例如,在此代碼:emu8086不能識別我的標籤

mov dl,1ch 
mov bl,00h ;sum 
mov cl,1ch ;counter 
dec cl 

HERE : mov ax,00h 
mov al,dl 
div cl ;ax/dl ah=remainder 
cmp ah,00h 
je SUM ; if ah=0 jump the label SUM 
loop HERE 

mov dh,00h 
cmp dl,bl 
je PERFECT 
hlt 

SUM : 
add bl,cl 
jmp HERE 

PERFECT : 
mov dh,01 
hlt 

loop HERE指令應該運行,emu8086運行我的代碼的第一個指令(mov dl,1ch)。我能做什麼?問題是什麼?

在此先感謝...

+0

當心這個錯誤的:'循環這裏'取決於'CX'中的值,但你從未初始化過這個寄存器的上半部分!你只寫了'mov cl,1Ch'('CX'的下半部分) –

回答

7

移除標籤名稱和冒號之間的空格:

 space 
     ▼ 
PERFECT : 

它應該是:

no space 
     ▼ 
PERFECT: 
+4

我想知道爲什麼emu8086的行爲如此。爲什麼在冒號前添加空格會導致它發出不同的代碼? –

+1

@WayneConrad:emu8086因無法拒絕錯誤輸入而享有聲譽。我沒有使用它,只是看到了它所組裝的完全僞代碼的問題(比如'mov al,bx'或者其他什麼,IIRC來自OP聲稱組裝的最近SO問題)。我在猜測'HERE:'會破壞它的符號表或其它東西,所以它將分支組裝到分段的第一個字節。這實際上是一個很好的問題,因爲OP似乎使用調試器來查看它在運行時實際分支的位置。我假設emu8086甚至未能警告語法錯誤。 –