繁体   English   中英

以16位汇编形式写入图形像素

[英]Write graphics pixels in 16-bit assembly

我正在尝试出于教育目的开发自己的非常基本的操作系统。 在对内核进行编码时,我尝试将颜色设置为屏幕上的某些像素以使其看起来更好,但失败了。

我在视频模式13h (320x200图形,256色,1页)中使用AH = 0CH INT 10h ,并尝试了其他几种模式,例如01h03h但它们不起作用。

这是我完整的代码:

;set video mode
mov ah, 00h
mov al, 13h

int 10h

;write pixels on screen
mov ah, 0ch
mov bh, 0
mov dx, 5
mov cx, 5
mov al, 0100b

int 10h

我的代码有什么问题?

编辑:您的代码在DOS中工作(在我的Linux机器上的dosbox测试)。

因此,它要么没有达到(启动程序和代码之前的问题),要么您设置的内核/环境阻止了int 10h BIOS中断起作用(您不是偶然地破坏了IVT吗?)。 还是您的引导加载程序已经超过510B大小,所以引导扇区看起来不像您期望的那样?

根据有关引导加载程序的Wiki,它看起来像是您将自己的代码(或本示例)放入磁盘上的第一个扇区,并在扇区末尾将其标记为0xAA55时,它应能工作(并且在按键时可能会崩溃)。结束)。

您可能还想尝试一下他们的引导程序示例(编写问候世界)。


要测试直接写入VRAM,可以使用以下代码(可以在我的Linux机器上的dosbox中运行,因此,如果您的操作系统设置了类似的16b环境并允许BIOS中断):

palette.asm:

; to compile DOS COM file: nasm -o palette.com palette.asm
; to run it with dosbox: dosbox palette.com -exit
    BITS    16
    ORG     100h
start:
    mov ax,13h
    int 10h
  ; draw palette in 32x8 squares, each square 5x5 pixels big (so 160x40px)
    push 0a000h
    pop es
    xor di,di
    xor ax,ax  ; color
    mov cx,8   ; big rows (each having 32 5x5 squares)
bigRowLoop:
    mov bx,5 ; pixel height of single row
rowLoop:
    mov dx,32 ; squares per row
    push ax
    push di
squareLoop:
    ; draw 5 pixels with "ah:al" color, ++color, di += 5
    mov [es:di],ax
    mov [es:di+2],ax
    mov [es:di+4],al
    add ax,0101h
    add di,5
    dec dx
    jnz squareLoop
    pop di
    pop ax     ; restore color for first square
    add di,320 ; move di to start of next line
    dec bx     ; do next single pixel line
    jnz rowLoop
    ; one row of color squares is drawn, now next 32 colors
    add ax,02020h ; color += 32
    dec cx
    jnz bigRowLoop
  ; wait for any key and exit
    xor ah,ah
    int 16h
    ret

以下代码以红色显示一个像素。 颜色,nr,4即。 您必须使用NASM进行编译,然后才能运行。

mov ax,13h        
int 10h             
mov ax,0A000h        
mov es,ax             
mov ax,32010          
mov di,ax             
mov dl,4             
mov [es:di],dx        
int 10h

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM