1

我正在尝试通过将字母“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

对上述进行了更改。它现在组装,但什么也没显示。

4

3 回答 3

3

示例:

名称“你好世界”
组织 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

希望这个样本对你有帮助

于 2011-12-01T01:26:31.283 回答
3
  1. 0b800h 是视频缓冲区的地址。mov word ptr [si], 44h仅寻址-中段地址的偏移量(此处为:0b800h),并不指向视频缓冲区。我建议将视频片段加载到并使用片段覆盖()。DSDSESES:

  2. 字母加上颜色组成一个词。在视频缓冲区中首先是字母,然后是颜色。背景色和前景色各使用一个半字节(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
于 2015-12-21T21:13:43.357 回答
0

在此处查看清单 15:

http://stuff.pypt.lt/ggt80x86a/asm8.htm

于 2011-12-01T01:26:44.900 回答