【发布时间】:2018-11-05 12:20:53
【问题描述】:
如何在VESA图形模式下绘制像素?
我正在尝试中断10h 函数0ch,但它不起作用。怎么了?
(注意:我用 NASM 语法编写了这段代码,并用 qemu 进行了测试)
; Code:
Mov ax, 4F02h
Mov bx, 0105h ; 1024x768 pixels
Int 10h
Mov ah, 0ch ; Draw pixel function
Mov cx, 2 ; column
Mov dx, 3 ; row
Mov bh, 0
Mov bl, 00000101b ; colour
Int 10h
Jmp $ ; jump forever
Times 510-($-$$) db 0
Dw 0xaa55
【问题讨论】:
-
请用 NASM 语法或类似 NASM(TASM、MASM 等)而不是 GAS 语法回答这个问题。因为,我无法使用 GNU Assembler 语法。
-
@Juan:您要查找的术语是 Intel 与 AT&T 语法。无论如何,您可以通过使用
mov byte [bx], 123(或word 或其他任何内容,取决于您设置的像素格式)将像素存储到视频内存中来绘制像素。将ds或es设置为视频RAM 基地址。 -
2 票否决?用户提供 1. 他们试图完成的事情,2. 他们尝试过的事情,3. 代码应该做什么的描述,4. 代码不能绘制像素。看看接受的答案,似乎尝试的东西也不是很远......?说:“问题是我忘了把颜色放在 ax 的低字节中。”这样说是没有意义的。无需投票,但在我看来,问题和答案是一个有趣的问题和解决方案。
-
@user176692:删除了我的反对票。当我第一次阅读这篇文章时,我错过了尝试绘制像素以及设置视频模式的情况。 (我不知道有有一个
int 10h函数。看起来调用它比存储到视频内存需要更多的代码。)仍然不是minimal reproducible example,并且只需阅读文档即可解决。 (除非你知道直接存储到视频 RAM 比int 10h快得多。)
标签: assembly x86 nasm x86-16 vesa