用masm 8086汇编语言获取像素值

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

我正在用masm 8086汇编语言画砖,我想知道是否有任何指令可以返回屏幕的像素值。

currently there is no code
assembly masm proc emu8086
1个回答
0
投票

任何返回屏幕像素值的指令。

看到你提到“画砖”并谈论“像素”,我知道你正在研究图形视频模式。

我将进一步假设该视频模式是 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
  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 功能快得多。

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