返回屏幕像素值的任何指令。
看到你提到“画砖”和谈论“像素”,我知道你正在研究图形视频模式。
我将进一步假设此视频模式是 256 色模式 13h (320 x 200),这是最容易编程且色彩最丰富的传统视频模式(模式编号低于 20)。
您可以要求 BIOS 为您提供屏幕上任何像素的颜色
; CX is X [0,319]
; DX is Y [0,199]
; -> AL is color [0,255]
; IN (cx,dx) OUT (al) MOD (ah)
GetPixel:
push bx
mov bh, 0 ; DisplayPage
mov ah, 0Dh ; BIOS.GetPixel
int 10h ; -> AL
pop bx
ret
依靠 BIOS 是一种安全且紧凑的解决方案,也适用于任何其他传统视频模式。
您可以自己读取屏幕上任何像素的颜色
; CX is X [0,319]
; DX is Y [0,199]
; -> AL is color [0,255]
; IN (cx,dx) OUT (al) MOD (ah)
GetPixel:
push ds ; DirectionFlag (DF) assumed 0
push bx
push dx
mov ax, 0A000h ; Video buffer for 256-color mode 13h (320 x 200)
mov ds, ax
mov ax, 320 ; BytesPerScanline (BPS)
mul dx ; Y * BPS
add ax, cx ; Y * BPS + X
mov bx, ax ; BX is address
mov al, [BX] ; AL is color
pop dx
pop bx
pop ds
ret
自己读取视频内存需要更多的代码,在其他传统视频模式下有些麻烦,但比使用 BIOS 功能快得多。