2015-09-14 81 views
0

這裏反向和顯示字符串是我的代碼:麻煩,當組裝

model small 
stack 100h 

.data 
string1 db "Khoa$" 
string2 db 4 dup(?) 
count dw 4 
.code 
begin: 
mov ax,@data 
mov ds,ax 
mov es,ax 
mov cx,count 
mov si,0 
mov di,0 
add di,count 
dec di 

again: mov al,string1[si] 
mov string2[di],al 
inc si 
dec di 
loop again 

mov ah,9 
lea dx,string1 
int 21h 

end begin 

這部分

mov ah,9 
lea dx,string1 
int 21h 

當我嘗試顯示STRING1至控制檯,它的確定。 但string2沒有結果。

我是新來的大會。請幫忙!

+0

你是什麼意思'沒有結果? - 另外,你實際上是在兩處打印'string1',這只是一個複製/粘貼錯誤?最後,你的'string2'應該是5個字節,並且包含一個結束標記。 –

回答

0

雖然這是作業,但這是對解決方案的合理嘗試。我不知道你用的是什麼彙編 - 它看起來像MASM但我不能確定這兩條線會如何沒有語法錯誤組裝:

model small 
stack 100h 

我想這應該是(注意在前面,因爲它們是彙編程序指令):

.model small 
.stack 100h 

string1最初5個字符長包括$終止字符串。當使用int 21h/ah 9字符串需要以$終止,否則它將繼續在字符串末尾打印垃圾。考慮到這一點你的輸出緩衝區應足夠長,以容納5個字符,包括$ 所以string2應該被定義爲:

string2 db 5 dup(?) 

在你的代碼的主要問題是終止與$的字符串。一種方法是放置$在數組的最後一個位置,當你初步建立起sidi寄存器:

mov si,0 
mov di,0 
add di,count 
mov string2[di],'$' ; Put string terminator in last position 
dec di 

還要注意:

mov di,0 
add di,count 

可以簡單的寫:

mov di, count 

如果您使用MASM,要優雅地退出您的16位編你可能想在你的結束語句前加上.exit指令:

.exit 
end begin