2016-04-21 65 views
0
JMP START 
MSG1 DB "ISSK$" 
MSG2 DB 80 DUP("$") 
START: 

MOV SI,00H 
MOV DI,00H 

LOOPER:   
CMP MSG1[DI],"$" 
JE COMPARE 
INC DI 
JMP LOOPER ;AFTER THIS POINT DI=STRINGLENGTH-1 


COMPARE: 
MOV AL,MSG1[DI] 
MOV MSG2[SI],AL 
INC SI 
DEC DI 
CMP MSG1[DI],00H 
JE OUTER 
JMP COMPARE 

OUTER: 
MOV DX,OFFSET MSG2 
MOV AH,09H 
INT 21H 
HLT 

我的EMULATOR(emu8086)的控制檯最終打印出空白屏幕而不是反轉字符串。我哪裏做錯了?8086Assembly - 無法反轉字符串

回答

3

當您退出LOOPER,去COMPAREDI包含'$'終止符,你再放置在MSG2開始的索引。在輸入COMPARE循環之前,您應該遞減DI,使其包含索引'K'

然後你有CMP MSG1[DI],00H這是沒有任何意義的。我懷疑你想檢查DI == 0。如果是這樣,這整個部分:

DEC DI 
JNZ COMPARE ; continue the COMPARE loop as long as DI != 0 

DEC DI 
CMP MSG1[DI],00H 
JE OUTER 
JMP COMPARE 

可以被替代