X86 节目中的特殊字符

X86 节目中的特殊字符,x86,tasm,X86,Tasm,这是我第一次来这里 如果我对编程有疑问,我的朋友会告诉我这个论坛 这是我的节目。我的问题是,还有一些特殊的字符被打印出来 我将如何删除这个 .model small .stack .data var db "Welcome to Assembly Language$" .code clear proc near mov ah, 6 mov bh, 2h mov cx, 0 mov dx, 184fh int 10h ret clear end

这是我第一次来这里

如果我对编程有疑问,我的朋友会告诉我这个论坛

这是我的节目。我的问题是,还有一些特殊的字符被打印出来

我将如何删除这个

.model small
.stack
.data
   var db "Welcome to Assembly Language$"
.code

clear proc near

   mov ah, 6
   mov bh, 2h
   mov cx, 0
   mov dx, 184fh
   int 10h
   ret

   clear endp


cursor proc near

   mov ah, 2
   mov bh, 0
   mov dh, 10
   mov dl, 14
   int 10h
   ret
   cursor endp

 start:

   body proc near
   call clear
   call cursor

   mov ah, 9
   mov dx, offset var
   int 21h
   mov ah, 4ch
   int 21h

  body endp

 end start
如何删除特殊字符


谢谢

您遇到了一个段问题:当您使用
.data
指令时,数据被放在通过
DS
寄存器访问的段中,而
.code
指令将汇编代码放在通过
CS
寄存器访问的段中

对于小内存模型,所有数据、代码和堆栈内存都合并到一个段中,但程序员有责任自己初始化段寄存器

您会看到奇怪的字符,因为数据是由
int 21h
中断通过
DS:DX
访问的,但是
DS
指向错误的段号,您会在数据之前看到垃圾。您只需要修复
DS
,以避免垃圾输出

正文的开头添加以下内容:

mov ax, @data
mov ds, ax
我们需要使用
AX
作为中间值,因为我们不能
mov-DS:@data

这会有所帮助