小编Ita*_*mar的帖子

奇怪的宏(TASM)

考虑以下宏:

pixelFast MACRO
    ; This macro draws a pixel, assuming the coordinates are already loaded in cx&dx and the color is in al.
    xor bh, bh
    mov ah, 0ch
    int 10h
ENDM

drawRect MACRO x1, y1, x2, y2, color
    LOCAL @@loop, @@row_loop
    xor cx, cx
    mov dx, y1
    mov al, BYTE PTR [color]

    @@loop:
        mov cx, x1
        @@row_loop:
            pixelFast

            inc cx
            cmp cx, x2
            jna @@row_loop

        inc dx
        cmp dx, y2
        jna @@loop
ENDM

rendToolBar MACRO
    drawRect COLORDISP_X1, COLORDISP_Y1, COLORDISP_X2, …
Run Code Online (Sandbox Code Playgroud)

macros assembly interrupt tasm dosbox

6
推荐指数
1
解决办法
752
查看次数

在模式13中读取像素时的数据错误(386 Assembly - DOS)

对于一个学校项目,我正在为DOSBOX编写一个程序集的绘图程序.在我的程序中,用户使用鼠标左键来绘制某种颜色的像素.我在模式13中使用直接写入.用户可以通过右键单击来更改该颜色,该颜色读取鼠标指向的像素的颜色.

这完全正常,直到用户启动某个用于擦除屏幕的子程序,并显示要从中选择的颜色调色板(具有相同的右键单击功能).然后,用户右键单击调色板中的颜色,使用int 10h,0dh读取颜色.无论用户在调色板屏幕中右键单击何处,用户稍后写入屏幕的颜色始终为白色.

tl; dr右键单击任意位置可以正确更改画笔颜色,但如果在调色板模式下完成,则后续颜色始终为白色.这是我的代码:

GRAPHICS equ 13h
H_HOTSPOT equ 7
V_HOTSPOT equ 7
H_RES equ 320
V_RES equ 200
PIXELCOUNT equ H_RES*V_RES
DISPLAY_SEG equ 0A000h

EXIT_KEY equ 1071h          ; q key
COLORPICKER_KEY equ 1177h   ; w key

PALETTE_SIZE equ 16
SQUARE_SIZE equ 10
SQUARE_PADDING equ 2
SQUARE_ROW_JUMP equ H_RES - SQUARE_SIZE
PALETTE_ROW_JUMP equ H_RES - (SQUARE_PADDING + SQUARE_SIZE)*PALETTE_SIZE

sseg SEGMENT
    db 256 dup(?)
sseg ENDS

dseg SEGMENT

stdBrushMask    dw 1111111011111111b
                dw 1111111011111111b
                dw 1111111011111111b
                dw 1111111011111111b
                dw 1111111011111111b
                dw …
Run Code Online (Sandbox Code Playgroud)

graphics assembly colors dosbox

3
推荐指数
1
解决办法
562
查看次数

标签 统计

assembly ×2

dosbox ×2

colors ×1

graphics ×1

interrupt ×1

macros ×1

tasm ×1