我想在屏幕上打印一个字符串computer
但我的输出显示两次这样的字符串:
computercomputer
我的代码:
data segment
mesaj db "computer$"
ends
stack segment
dw 128 dup(0)
ends
code segment
start:
mov ax,@data
mov ds,ax
call ekransil
lea dx,mesaj
call yaz
yaz proc
mov ah,09
int 21h
ret
yaz endp
ekransil proc ;create procedur
mov ax,0600h
mov bh,74h
mov cx,0000h
mov dx,184fh
int 10h
ret
ekransil endp
int 20h
end start ;finish program
为什么数据段中显示的值会打印两次?我不明白。有人帮助我。
答案 0 :(得分:1)
在call yaz
之后执行的下一条指令是什么?将执行以下说明
mov ah,09
int 21h
ret
因此你得到2x'计算机'字样。在此行call yaz
之后,您应该在程序结束时跳转或ret
致电。
你看到了吗?
call ekransil
lea dx,mesaj
call yaz
; next instructions to execute are below
yaz proc
mov ah,09
int 21h
ret
yaz endp
答案 1 :(得分:1)
为避免两次显示字符串,您可以执行以下操作之一:
通常方式:
在jmp exit
之后添加call yaz
,然后在end start
之前添加这些行:
exit:
mov ah, 04ch ; exit the program
int 21h ; and return the control to your OS
首选方式:
或者您可以在退出代码之后放置两个过程的定义,如下所示:
mov ah, 04ch ; exit
int 21h ; code
yaz proc ; definition of first procedure
mov ah,09
int 21h
ret
yaz endp
ekransil proc ; definition of second procedure
mov ax,0600h
mov bh,74h
mov cx,0000h
mov dx,184fh
int 10h
ret
ekransil endp
end start ; finish program
请注意,在首选版本中,我们无需jmp
标记exit
并对其进行定义。它优先于前者,因为它使您的程序看起来不那么混乱,并且您将所有程序的定义与主程序(start)分开。此外,它对调试非常有帮助。
Cheers Ahtisham:)