这是我的代码:
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 :(得分: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