装配程序打印消息三次

时间:2014-10-14 05:29:44

标签: assembly procedure tasm

代码

.model small
.data    
prompt_msg db "Please enter your length:$"

.stack 100h 

.code       
main proc
mov ax,@data
mov ds,ax
mov es,ax
call prompt_user

;exit
mov ah,01h
int 21h
mov ah,4ch

int 21h
endp main

prompt_user proc
call NewLine
call CarriageReturn
mov ah,09h
lea dx,prompt_msg
int 21h
ret

endp prompt_user

NewLine proc
mov ah,09h
mov dx,0dh
int 21h
ret

endp NewLine

CarriageReturn proc
mov ah,09h
mov dx,0ah
int 21h
ret

endp CarriageReturn 

end main

代码解析

此代码打印没有换行的消息,并打印三次与前一条消息重叠。我使用Tasm,这是8086汇编。

打印出类似这样的内容

“你的长度在这里:在这里输入你的长度:请在这里输入你的长度:”

1 个答案:

答案 0 :(得分:1)

在您的两个程序newlinecarriagereturn中,您分别将 dx 设置为值13和10,然后执行 09 功能是`显示字符串,从 DS:DX 开始。

现在,prompt_msg位于 DS:0000 ,因此它会顺便打印来自第14个字符的消息,然后再从第11个字符打印,然后在 dx时打印整个消息加载了prompt_msg = 0000

的偏移量

我强烈怀疑你应该调用函数 02 而不是 09 ,它会输出 DL 中的字符(因此,'可能只需要在这些程序中加载 DL ,而不是 DX 。)