2016-12-28 142 views
1

這是8086樣本彙編語言代碼打印字符串以相反的順序不明白彙編程序

.model small 
.STACK 100H 
.DATA 
MSG DB 'HELLO!$' 

.CODE 
MOV CL,0 

AGAIN: 
MOV DL,DS:[SI] 
; MOV AH,2 
; INT 21H 
INC CL 
INC SI 
CMP DL,'$' 
JNE AGAIN 
DEC SI 
DEC CL 

REV: 
    DEC SI 
    MOV DL,DS:[SI] 
    MOV AH,2 
    INT 21H 
    DEC CL 
    CMP CL,0 
    JNE REV 

.EXIT 
    END 

它的輸出!2009東海生日賀的輸出。但是,如果我寫

MOV AH,2 
    INT 21H 

在繼續等級低於MOV DL,DS:[SI]。我認爲答案應該是HELLO !! OLLEH,但它顯示'='字符和以前的輸出。爲什麼會發生?

+3

這是相當巧合的是,代碼完全可以工作,因爲你永遠不會初始化'SI'。 –

+0

emu8086內置調試器。你應該能夠檢查,讀取什麼內存,在每個循環中讀取什麼內容等......可以肯定地說,新的「int 21h」做它應該做的事情,輸出「DL」字符......周圍的事情可能不是你所期望的。 – Ped7g

回答

1

我想答案應該是HELLO!2009東海生日賀

修正。既然你與DOS功能02H輸出後檢查的「$」字符只,屏幕應該顯示:

HELLO!$!OLLEH 

這只是用DOS功能09H,這是不可能寫一個「$」字符。


這是可能的,因爲emu8086中初始化一些默認方式寄存器獲得半正確的結果,但它使用它們之前手動寄存器最好設置:

.CODE 
mov ax, DATA 
mov ds, ax 
mov si, offset MSG 
MOV CL, 0 
AGAIN: 
MOV DL, [SI] 
MOV AH, 2 
INT 21H