assembly - 与 dos 下相比,全屏模式下的颜色不一样

标签 assembly tasm

我正在尝试在汇编中使用全屏模式。我在 dos 中将颜色设置为浅蓝色,但每当我尝试将其与全屏模式合并时,颜色就会发生变化。它会变成类似绿色的东西。

有没有办法让它们互相兼容。我正在使用 Tasm;文本板; window 。谢谢。

这是我的宏

drawSquare MACRO color,cy,cx,dy,dx
    mov ah,06
    mov al, 0
    mov bh,color
    mov ch,cy
    mov cl,cx
    mov dh,dy
    mov dl,dx
    int 10h
endm
-------------------------------------------------
include macros.txt
.model small
.stack
.data  
    saveMode db ?

.code
main proc
    mov ax, @data
    mov ds, ax

    call SetVideoMode

    drawSquare 90h, 0h, 49h, 18h, 4fh

    call RestoreVideoMode

    mov ax, 4c00h
    int 21h
main endp
SetVideoMode proc
    mov ah, 0fh
    int 10h
    mov saveMode, al


    mov ah, 0
    mov al, 13h
    int 10h

    push 0A000h
    pop es
    ret
SetVideoMode endp
RestoreVideoMode proc
    mov ah, 10h
    int 16h

    mov ah, 0
    mov al, saveMode
    int 10h
    ret
RestoreVideoMode endp
end main

最佳答案

您设置了 256 色视频模式 13h。后来你用颜色 90h 画了一个盒子。
这与 DOS 屏幕(文本模式)的颜色不匹配,因为只有前 16 个颜色数字匹配!

如果您的 DOS 屏幕使用 BLUE=1,则选择颜色 1 作为宏调用的第一个参数。
如果您的 DOS 屏幕使用 GREEN=2,则选择颜色 2 作为宏调用的第一个参数。

关于assembly - 与 dos 下相比,全屏模式下的颜色不一样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33182605/

相关文章:

c++ - .load(std::memory_order_relaxed) 的成本是否与读取非原子变量相同?

assembly - TASM 输出到文件问题

assembly - 如何将变量转换为 DECIMAL 字符串以进行打印?

TASM 和 MASM 之间的 assembly 差异

assembly - 当我们将 16 位数字除以 8 位 1 时会发生什么?

assembly - ".="在 AT&T 汇编语言中意味着什么?

c - 在 ARM 上将参数从 asm 传递到 C in

c - 基本c到汇编的解释

c++ - 在内联汇编代码中使用 C++ 命名空间

assembly - 调色板不适用于 VGA 中的某些颜色