繁体   English   中英

组装-在图形模式下打印字符

[英]Assembly - Printing a char on graphical mode

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


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 ,但是在图形模式下使用BL
设置不正确可能最终会写成“ black on black”。

您必须绘制它(至少如果要修饰它的外观)。

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

如果您是新手,请按照以下步骤开始:

  1. 用一些图片创建一个6x8字节的数组(* 1)
  2. 绘制=创建PutSprite(source,width = 6,height = 8,posx = 10,posy = 10)函数
  3. 创建6x8 256色基本ASCII字体(或在Internet上搜索固定大小的asm字体)
  4. 创建您自己的“打印”函数,以正确的字形调用PutSprite,并移动每个字符的目标坐标。
  5. (可选)如果要使用比例字体,则必须将每个字形的宽度与字体图形一起存储,并根据其前进位置
  6. (可选)扩展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内存区域,正确地前进指针:复制每个字节后为source ++,在单行中为destination ++(用于宽度字节),然后将destination + = 320宽度前进到下一行以获取高度线。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM