我试图获得单个像素的颜色(我在Emu8086中使用13h图形模式),因为我使用了中断10h的函数0Dh。但它根本不一致。它无法给出正确的像素颜色,并给我00(黑色)。
我知道在模式13h中CX增加了一倍。但我非常怀疑问题是我绘制的形状(两个填充的矩形),恰好标题为逆时针45度。
似乎有什么问题?以及如何一致地获得单个像素的颜色?
.MODEL SMALL
.DATA
X DW ?
Y DW ?
T DW ?
linecounter dw ?
LastX DW ?
LastY DW ?
PixelClr DB ?
.CODE
.STARTUP
MOV AH, 00
MOV AL, 13h
INT 10h
MOV X, 85
MOV Y, 93
MOV linecounter, 75
Square4Top:
MOV BH, 0
MOV CX, X
MOV DX, Y
MOV T, 7
MOV AH, 0Ch
MOV AL, 01h
DrawSquare4Top:
INT 10h
INC CX
INC DX
DEC T
CMP T, 0
JNZ DrawSquare4Top
INC X
DEC Y
DEC linecounter
CMP linecounter, 0
JNZ Square4Top
MOV X, 61
MOV Y, 93
MOV linecounter, 50
Square5Top1:
MOV BH, 0
MOV CX, X
MOV DX, Y
MOV T, 7
MOV AH, 0Ch
MOV AL, 0Bh
DrawSquare5Top1:
INT 10h
INC CX
INC DX
DEC T
CMP T, 0
JNZ DrawSquare5Top1
INC X
DEC Y
DEC linecounter
CMP linecounter, 0
JNZ Square5Top1
;;;
;;; INITIALIZE MOUSE
;;;
MOV AX, 0
INT 33h
MOV AX, 1
INT 33h
MOV AX, 2
INT 33h
MouseAgain:
MOV AX, 3
INT 33h
CMP BX, 1
JNZ MouseAgain
MOV AH, 0Dh
MOV BH, 00
SHR CX, 1
INT 10h
MOV PixelClr, AL
JMP MouseAgain
END
答案 0 :(得分:1)
因为你没有真正向我们展示你的代码,所以有点难以说出你做错了什么!
但是,在调用中断之前,至少应确保已设置所有相关寄存器(请参阅here)。这意味着所有:
AH = 0Dh
BH = page number
CX = column
DX = row
当然,你可能实际在那里看一个黑色像素,特别是因为大多数屏幕是黑色。我会检查你是否正在查看形状之外的像素,如下面的“图形”中的x
而不是y
:
/\
/ \
x/ /
/y /
/ /
/ /
/ /
\ /
\/
在绘制矩形之前,如果用白色填充整个屏幕,那么检查是否相当容易,看看你是否变回白色或仍然变黑。