Сборка x86: Как отобразить изображение, которое конвертируется в нули и единицы? - PullRequest
1 голос
/ 17 января 2020

Я сделал пример изображения. Я хочу отобразить его при запуске моей ОС. Я сделал Python программу для преобразования пикселей моего изображения в нули и единицы. Черный равен 0, а белый равен 1. Я поменялся местами, потому что фон ОС черный. Как я могу l oop пикселей моего изображения для отображения на экране? Я использую int 10h / ah=0h, чтобы установить режим отображения. Я использую режим 13h (320x200). Положение отображаемого изображения может быть любым. Любая часть изображения не будет находиться за пределами экрана.

Пример кода:

; Pixels that converted to zeros and ones: (00 byte tells that row ends.)
pixels: db '0000000000000000000000000000000000000000000000000000000', 0
        db '0111111000000000000000000000000000000000000000000000000', 0
        db '0111111000000011111000111110000000000110000001000100010', 0
        db '0110000001100111111001111110001111000110000000100100100', 0
        db '0110000001100110000001100000011111100110000000010101000', 0
        db '0111111000000110000001100000011001100110000000000000000', 0
        db '0111111001100111111001111110011111100110000001110101110', 0
        db '0110000001100111111001111110011000000110000000000000000', 0
        db '0110000001100110000001100000011001100110000000010101000', 0
        db '0111111001100110000001100000011111100111100000100100100', 0
        db '0111111001100110000001100000001111000111100001000100010', 0
        db '0000000000000000000000000000000000000000000000000000000', 0

; Setting display mode:
mov ah, 0   ; set display mode
mov al, 13h ; set 320x200 pixels
int 10h     ; set it

; I use these lines to put pixel:
mov cx, 10  ; col
mov dx, 10  ; row
mov ah, 0ch ; put pixel

1 Ответ

1 голос
/ 17 января 2020

Я думал, что смогу нарисовать изображение. Он пропускает черные пиксели и dr aws белые пиксели. Если вы хотите увеличить пиксели, вы можете увеличить cx и dx на 2.

Код:

mov ah, 0
mov al, 13h
int 10h

mov si, pixels
mov cx, 10
mov dx, 10
mov ah, 0ch

drawloop: ; Loop
lodsb ; Set al the memory address of si and increase si
cmp al, 0 ; Is the pixel black?
je drew
cmp al, 2 ; Did the row end?
je rowend
cmp al, 3 ; Did the image end?
je finish
int 10h ; Draw a pixel

drew: ; If the pixel was black, increase cx
inc cx
jmp drawloop

rowend: ; If row ended, increase dx and reset cx
inc dx
mov cx, 10
jmp drawloop

finish:

jmp $ ; Infinite loop

pixels: db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2
        db 0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2
        db 0,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0, 2
        db 0,1,1,0,0,0,0,0,0,1,1,0,0,1,1,1,1,1,1,0,0,1,1,1,1,1,1,0,0,0,1,1,1,1,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,0, 2
        db 0,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,1,1,1,0,0,1,1,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0, 2
        db 0,1,1,1,1,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2
        db 0,1,1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0, 2
        db 0,1,1,0,0,0,0,0,0,1,1,0,0,1,1,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2
        db 0,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0, 2
        db 0,1,1,1,1,1,1,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,1,1,1,0,0,1,1,1,1,0,0,0,0,0,1,0,0,1,0,0,1,0,0, 2
        db 0,1,1,1,1,1,1,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,1,1,1,0,0,0,1,1,1,1,0,0,0,0,1,0,0,0,1,0,0,0,1,0, 2
        db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...