2012-10-29 73 views
0

這段代碼應該說是Hello World五次!用於模擬循環的彙編代碼有什麼問題?

org 100h 

string db 'Hello World',0Dh,0Ah,'$' 
mov dx,string 
mov bl,0 

check: 
cmp bl,5 
jb print 
ja term 

print: 
mov ah,9 
int 21h 
mov ah,04Ch 
int 21h 
inc bl 
jmp check 

term: 
ret 

我只收到一個Hello World作爲輸出! 我錯過了什麼嗎?

回答

2

打印完字符串後,您正在顯式退出程序(通過INT 21h,AH = 4Ch)!

它也看起來像你試圖執行「Hello World」字符串,就好像它是代碼(正如你把它放在地址100h,操作系統將開始執行程序)。爲什麼在打印之前沒有崩潰你的程序肯定是純運氣的情況。

+0

哇!說實話,我很努力從頭開始學習ALP!非常感謝信息人!是的,程序確實崩潰,一個對話框會出現一些16位錯誤! 在我將define byte指令放到最後之後,只有這樣輸出纔會成爲一個單一的Hello World! –

+0

太棒了!有效!謝啦! :) 順便說一句,你能解釋一下在代碼的開始處的原始指令的目的是什麼? 何時使用Ah寄存器中的4Ch值? –

+0

org 100h是DOS時代的遺產,當.com文件被限制爲64K字節時。 「操作系統」使用代碼段的前256來通過例如命令行參數;從.com文件加載下一個65280字節並跳轉到代碼段CS中的地址0x100。 org in assembler sets then each'origin'of each instruction related to the assume load address。 –