INT 10h功能0Dh不一致

时间:2017-12-20 01:11:58

标签: assembly x86 emu8086

我试图获得单个像素的颜色(我在Emu8086中使用13h图形模式),因为我使用了中断10h的函数0Dh。但它根本不一致。它无法给出正确的像素颜色,并给我00(黑色)。

我知道在模式13h中CX增加了一倍。但我非常怀疑问题是我绘制的形状(两个填充的矩形),恰好标题为逆时针45度。

似乎有什么问题?以及如何一致地获得单个像素的颜色?

The shape

.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

1 个答案:

答案 0 :(得分:1)

因为你没有真正向我们展示你的代码,所以有点难以说出你做错了什么!

但是,在调用中断之前,至少应确保已设置所有相关寄存器(请参阅here)。这意味着所有:

AH = 0Dh
BH = page number
CX = column
DX = row

当然,你可能实际在那里看一个黑色像素,特别是因为大多数屏幕黑色。我会检查你是否正在查看形状之外的像素,如下面的“图形”中的x而不是y

      /\
     /  \
   x/   /
   /y  /
  /   /
 /   /
/   /
\  /
 \/

在绘制矩形之前,如果用白色填充整个屏幕,那么检查是否相当容易,看看你是否变回白色或仍然变黑。