很好,尝试使用 10 中断逐像素显示图像。整个代码如下所示:
macro pixel color, W, H
{
mov al, color
mov cx, H
mov dx, W
int 10h
}
pixel 0x08, 0x0, 0x0
pixel 0x08, 0x0, 0x1
pixel 0x08, 0x0, 0x2
pixel 0x08, 0x0, 0x3
pixel 0x08, 0x0, 0x4
pixel 0x08, 0x0, 0x5
pixel 0x08, 0x0, 0x6
pixel 0x08, 0x0, 0x7
但是,我只写了 7040 多点像素,然后程序因 OUT_OF_MEMORY 错误而停止。 为什么?如果我理解正确,我必须在 RAM 中有空间才能用 256 种颜色写入 64000 像素(我只使用八种颜色),我哪里错了?我必须以某种方式清除“缓冲区地址”吗?
事实上,它只在emu8086中运行良好,vmware绘制十个像素并挂起,加载CPU。 该程序是 x86 架构的可引导 BIN 文件,并且(目前)在实模式下工作
我还没有尝试解决这个问题,因为我在Google中没有找到类似的东西,而且我只是在学习ASM。
更新: 最小可重现的例子
macro pixel color, W, H
{
mov al, color
mov cx, H
mov dx, W
int 10h
}
start:
db 0x55, 0xAA
mov al, 0x13
mov ah, 0
int 10h
mov ah, 0Ch
pixel 0x08, 0x0, 0x0
pixel 0x08, 0x0, 0x1
pixel 0x08, 0x0, 0x2
pixel 0x08, 0x0, 0x3
...
pixel 0x08, 0x132, 0xae
pixel 0x08, 0x132, 0xaf
范围 AL 是 00-0F
当一堆 W 值具有相同的颜色和 H 坐标时,这显然是非常低效的。它甚至可以是一个循环,而不是展开来分别处理每个像素,或者遍历数据数组
我会尝试优化重复颜色的代码。
我正在尝试使用宏输出 308 x 177 像素的图像,我有 54,000 行“代码”来执行此操作。临时解决方案