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