反向和组装时显示字符串时出现问题

时间:2015-09-14 15:00:17

标签: assembly

这是我的代码:

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的结果。

我是装配新手。请帮忙!

1 个答案:

答案 0 :(得分:0)

虽然这是作业,但这是一个合理的尝试解决方案。我不知道你正在使用什么汇编程序 - 它看起来像 MASM 但我不确定这两行如何在没有语法错误的情况下汇编:

model small
stack 100h

我认为这应该是(注意前面的期间,因为它们是汇编程序指令):

.model small
.stack 100h

string1最初为5个字符,包括终止字符串的$。当使用 int 21h / ah 9 时,字符串需要以$终止,否则它将继续打印超出字符串末尾的垃圾。考虑到这一点,您的输出缓冲区应该足够长,可容纳5个字符,包括$ 所以string2应定义为:

string2 db 5 dup(?)

代码中的主要问题是使用$终止字符串。一种方法是在最初设置$si寄存器时将di放在数组的最后位置:

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