FASM BIOS 啊 0Ch;诠释 10h

问题描述 投票:0回答:0

很好,尝试使用 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 行“代码”来执行此操作。临时解决方案

x86 x86-16
© www.soinside.com 2019 - 2024. All rights reserved.