汇编-在图形模式下打印字符



我正在尝试在图形模式下打印字符。通常当我打印一个字符时,我会这样做:


mov ah,14   ; ah=14
mov al,'x' 
int 10h     ; print the character

这次不起作用。我想问题是我切换到图形模式:


push ax
mov ah, 0
mov al, 13h
int 10h
pop ax
ret

那么我如何仍然使用图形模式(我需要它)和打印字符?我正在使用nasm编译器,bochs调试器和8086平台。

谢谢!

随时准备Ralf Brown中断列表。

业务int 10h/AH=0Eh需要BH中的页码和BL中使用的颜色。

mov ah, 0eh           ;0eh = 14
mov al, 'x'
xor bx, bx            ;Page number zero
mov bl, 0ch           ;Color is red
int 10h

在文本模式下不使用BL,但是在图形模式下可以使用。
如果设置不当,可能会出现"黑色对黑色"的结果。

你必须把它画出来(至少如果你想要打磨它的外观)。

IIRC BIOS或DOS中断实际上能够在gfx模式下打印字符,但是字体很难看,并且它确实破坏了周围的其他内容,所以当我确实需要在13h模式下打印文本时,我不得不自己做。

如果你是新手,可以这样开始:

    创建一个6x8字节的数组,包含一些图片(*1)
  1. 绘制它=创建PutSprite(source, width=6, height=8, posx=10, posy=10)函数
  2. 创建6x8 256色的基本ASCII字体(或在互联网上搜索一些固定大小的asm字体)
  3. 创建你自己的"打印"函数调用PutSprite正确的字体字形,并为每个字符移动目的地坐标。
  4. (可选)如果你想要比例字体,你必须将每个字形的宽度与字体图形存储在一起,并根据它推进位置
  5. (可选)扩展PutSprite以检查定义的透明度颜色,例如255,因此它只会复制非透明像素的源字节。

* 1)第一步,你可以像这样使用一些调试gfx(使用默认的DOS调色板):

testSprite:   ; testing gfx glyph, size 6x8 pixels for 13h mode
    times 6 db 15 ; white line at top
    times 6*6 db 2 ; dark green middle
    times 6 db 13 ; violet line at bottom

在第二步中,您必须将值从源地址复制到0xA000:320*posy+posx内存区域,正确推进指针:源++在每个字节复制后,目的地++在单行(对于宽度字节),然后目的地+=320-width前进到下一行高度行。

相关内容

  • 没有找到相关文章

最新更新