Assembly 16Bits no macOS com NASM e DOSBox

Bricando com asm do 8086 no macOS via DOSBox e compialndo com NASM

Brincando com Assembly

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.

comments powered by Disqus