[Assembly 16Bits no macOS com NASM e DOSBox]

Brincando com Assembly

Veja o vídeo desse arquivo aqui.

Brincar com assembly é divertido, só com asm você tem controle total da maquina e de cada aspecto do seu programa, não há nada escondido e o computador vai fazer exatamente o que você mandou (não necessariamente o que você quer).

Hoje me dia assembly para mim é um hobby, não estou mexendo com nada tão baixo nível que realmente precise descer até o asm mas como diversão NERD não tem igual e recentemente encontrei meus antigos guias de referencia rápida das interrupções da BIOS e do MS-DOS.

Não estou interessado em assembly para maquinas modernas, quero brincar com 16 bits e os processadores da linha 80x86, até o i386 no máximo, criando arquivos .com completamente flat, a ideia é relembrar os velhos tempos em que computadores eram caixas mágicas repletas de coisas para descobrir.

Ambiente de desenvolvimento

Então para brincar montei um pequeno ambiente de desenvolvimento, NASM como compilador e DOSBox para rodar os programas. O emulador é necessário porque os sistemas operacionais modernos trabalham em modo protegido e é impossível rodar um .com diretamente.

E claro que teve muita evolução da época dos 16 bits até hoje e as ferramentas atuais são fantásticas, e eu não tenho problema nenhum em usar as ferramentas modernas, afinal por que não tornar a brincadeira ainda mais divertida.

Por exemplo o Visual Studio Code tem um bom plugin para assembly. Usar um emulador no lugar de uma maquina real faz com que eu não tenha que dar but na maquina ela trava devido a algum erro de programação… sim sem memória protegida você pode travar o sistema todo sem querer.

Para iniciar a brincadeira criei um pequeno programa que muda a fonte da maquina, pretendo expandir para as outras letras simplesmente porque é divertido desenhar bitmaps.

Código Fonte

    org 100h
section .text

start:  
    mov    bp,font    ; aponta para fonte
    mov    cx,1       ; mudar 1 bitmap
    mov    dx,0041h   ; A 41h = 65 = A na
                      ; tabela ASCII
    mov bx,1000h      ; bh = 16 bl = 00. 
        ; 16 bytes/char, bloco de RAM 00
    mov ax,1100h      ; serviço 11h muda a fonte
    int 10h           ; interrupção 10h
    mov ax,4C00h      ; serviço 04h do MS-DOS, 
                      ; termina o programa 
    int 21h           ; int 21h MS-DOS

section .data
font:	
	    db	00000000b       ; 1
	    db	01111100b       ; 2
	    db	11111110b       ; 3
	    db	11000010b       ; 4
	    db	11000010b       ; 5
	    db	11000010b       ; 6
	    db	11000010b       ; 7
	    db	11111110b       ; 8
	    db	11000010b       ; 9
	    db	11000010b       ; 10
	    db	11000010b       ; 11
	    db	11000010b       ; 12
	    db	11000010b       ; 13
	    db	11000010b       ; 14
	    db	00000000b       ; 15
	    db	00000000b       ; 16

.end

Para compilar basta fazer o seguinte:

nasm -f bin -o font.com font.asm

Esse e mais alguns exemplos você pode baixar no meu repositório no GitHub em https://github.com/crgimenes/assembly.

Cesar Gimenes