2015-09-14 48 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