在程序集 (8086) int 10h\ah =9 中写入彩色文本的错误

bug writing colored text in assembly (8086) int 10h\ah =9

我在使用 dosbox 时在汇编 (8086) 中遇到了一个奇怪的错误。 我正在尝试打印文本,颜色为绿色。 这是我的主要功能,当我调用函数时:

mov bl,2h                       ; set the color (green)
mov dx,OFFSET str_msg           ; set the string to print
call WRITE_TEXT_IN_COLOR
call NEW_LINE

这是函数WRITE_TEXT_IN_COLOR

proc WRITE_TEXT_IN_COLOR 
mov ah,9  
mov cx,200  ; number of chars that will be painted
int 10h
int 21H 
ret
endp WRITE_TEXT_IN_COLOR

现在,当我 运行 程序时,它会打印 'required' 文本,以及一长串 'dddddd' 我将非常感谢可能的解决方案。

如果 CX 中的计数正好等于消息的实际长度,您的代码就可以工作。如果 CX 的数字大于消息的长度,则 BIOS 将在 AL 寄存器(您忘记设置)中的任何字符代码中显示多余部分

我提出以下更改

mov bx,0002h          ; set the color (green) AND select page 0
mov dx,OFFSET str_msg ; set the string to print
call WRITE_TEXT_IN_COLOR
call NEW_LINE

proc WRITE_TEXT_IN_COLOR 
 mov ax,0920h  ;AH=Function number AL=Space character  
 mov cx,200  ; number of chars that will be painted
 int 10h     ;BIOS function 09h
 int 21H     ;DOS function 09h
 ret
endp WRITE_TEXT_IN_COLOR