我正在尝试通过将字母“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),并不指向视频缓冲区。我建议将视频片段加载到并使用片段覆盖()。DSDSESES:
字母加上颜色组成一个词。在视频缓冲区中首先是字母,然后是颜色。背景色和前景色各使用一个半字节(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: