INT 10h功能0Dh不一致

问题描述 投票:-1回答:1

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

我知道CX在模式13h中加倍。但我非常怀疑问题是我绘制的形状(两个填充的矩形),恰好标题为逆时针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
assembly x86 emu8086
1个回答
1
投票

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

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

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

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

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

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

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