我正在用masm 8086汇编语言画砖,我想知道是否有任何指令可以返回屏幕的像素值。
currently there is no code
任何返回屏幕像素值的指令。
看到你提到“画砖”并谈论“像素”,我知道你正在研究图形视频模式。
我将进一步假设该视频模式是 256 色模式 13h (320 x 200),这是最容易编程且色彩最丰富的传统视频模式(模式编号低于 20 的模式)。
; 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
xor bx, bx ; DisplayPage BH=0
mov ah, 0Dh ; BIOS.GetPixel
int 10h ; -> AL is color
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
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 功能快得多。