首页 > 解决方案 > 打印彩色字符串 (Assembly 8086)

问题描述

如何在程序集 8086 中制作彩色字符串?

标签: assemblyx86-16tasm

解决方案


您错误地使用了中断功能:

INT 10h, AH=09h一次打印多个相同的字符。计数在CX寄存器中传递。要打印字符串,您必须像字符串中的字符一样频繁地调用它,并设置其他参数。字符必须在AL寄存器中传递,属性/颜色必须在BL寄存器中传递。BH应该(可能)留下0并且CX应该留下1DL并且DH不被此函数使用,因此您可以删除相应的命令。

初始光标位置可以用函数设置INT 10h, AH=02h。确保该BH值与上述代码 ( 0) 中的值匹配。

因此,您的代码可能如下所示:

  ; ...
  ; Print character of message
  ; Make sure that your data segment DS is properly set
  MOV SI, offset Msg
  mov DI, 0      ; Initial column position 
lop:
  ; Set cursor position
  MOV AH, 02h
  MOV BH, 00h    ; Set page number
  MOV DX, DI     ; COLUMN number in low BYTE
  MOV DH, 0      ; ROW number in high BYTE
  INT 10h
  LODSB          ; load current character from DS:SI to AL and increment SI
  CMP AL, '$'    ; Is string-end reached?
  JE  fin        ; If yes, continue
  ; Print current char
  MOV AH,09H
  MOV BH, 0      ; Set page number
  MOV BL, 4      ; Color (RED)
  MOV CX, 1      ; Character count
  INT 10h
  INC DI         ; Increase column position
  jmp lop
fin:
  ; ...

INT 21h打印字符串直到 end-char的 DOS 函数$不关心传递给 BIOS 函数的属性,因此它会忽略颜色,您可以从toINT 10h中删除相应的代码。;print the stringINT 21h


推荐阅读