我正在尝试通过将字母“D”移动到视频缓冲区来在白色背景上以蓝色书写字母“D”。这段代码有什么问题?
包括 Irvine16.inc 。代码 主进程 移动斧头,@数据 mov ds,ax mov si, 0b800h mov word ptr [si], 44h mov word ptr [si+2] 0701h mov 啊, 08h 整数 21 小时 出口 主要ENDP
对上述进行了更改。它现在组装,但什么也没显示。
示例:
名称“你好世界” 组织 100 小时 ; 设置视频模式 移动斧头,3;文本模式 80x25,16 色,8 页(ah=0,al=3) 诠释 10h ; 去做吧! ; 取消闪烁并启用所有 16 种颜色: 移动斧头,1003h 移动 bx, 0 整数 10 小时 ; 设置段寄存器: 移动斧头,0b800h mov ds, ax ; 打印“你好世界” ; 第一个字节是ASCII码,第二个字节是颜色码。 mov [02h], 'h' mov [04h], 'e' mov [06h], 'l' mov [08h], 'l' mov [0ah], 'o' mov [0ch], ',' mov [0eh], 'w' mov [10h], 'o' mov [12h], 'r' mov [14h], 'l' mov [16h], 'd' mov [18h], '!' ; 为所有字符着色: mov cx, 12 ; 字符数。 mov di, 03h ; 从 'h' 之后的字节开始 c: mov [di], 11101100b ; 浅红色(1100)黄色(1110) 添加 di, 2 ; 跳过 vga 内存中的下一个 ascii 代码。 循环 c ; 等待任何按键: 动啊,0 整数 16 小时 ret
希望这个样本对你有帮助
0b800h 是视频缓冲区的段地址。mov word ptr [si], 44h
仅寻址-中段地址的偏移量(此处为:0b800h),并不指向视频缓冲区。我建议将视频片段加载到并使用片段覆盖()。DS
DS
ES
ES:
字母加上颜色组成一个词。在视频缓冲区中首先是字母,然后是颜色。背景色和前景色各使用一个半字节(4 位)。由于“小字节序”(谷歌为它)一个词应该有格式颜色/字母,例如白色/蓝色/'D' = 7144h
这是一个兼容 Irvine16 的示例:
INCLUDE Irvine16.inc
INCLUDELIB Irvine16.lib
.CODE
main PROC
; mov ax,@data ; No .DATA in this example
; mov ds,ax
mov si, 0b800h ; Initialize ES with video buffer
mov es, si
xor si, si ; Position 0 is top left
mov word ptr es:[si], 7144h ; White background ('7'), blue foreground (1), letter 'D' (44)
mov ah, 08h ; Wait for key - http://www.ctyme.com/intr/rb-2561.htm
int 21h
exit ; Irvine16: end of program
main ENDP
END main
在此处查看清单 15: