assembly - 打印彩色字符串 (Assembly 8086)
问题描述
如何在程序集 8086 中制作彩色字符串?
解决方案
您错误地使用了中断功能:
INT 10h, AH=09h
一次打印多个相同的字符。计数在CX
寄存器中传递。要打印字符串,您必须像字符串中的字符一样频繁地调用它,并设置其他参数。字符必须在AL
寄存器中传递,属性/颜色必须在BL
寄存器中传递。BH
应该(可能)留下0
并且CX
应该留下1
。DL
并且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 string
INT 21h
推荐阅读
- haskell - 用 Haskell 求解方程
- mysql - 导入表空间显示错误 2013 (HY000):查询期间丢失与 MySQL 服务器的连接
- java - Java SimpleDateFormat 无法与周年格式一起正常工作
- python - 使用 Python 正则表达式替换特定上下文中的所有匹配项
- python - 不和谐.py | 当机器人离开时,被踢,被服务器禁止
- python - WebScrape 所有相关的 URL/Hrefs
- html - Wordpress 页面标题中的斜体导致浏览器中出现奇怪的 HTML
- maven - AWS CodeCommit 和 Maven 发布插件
- json - json 算不算数据结构?如果不是,那么 JSON 的本质是什么?
- android - issue with addOnCompleteListener solved! -> running into W/System: Ignoring header X-Firebase-Locale because its value was null