15/10/2014

Exemplo em Assembly: Contador de 0 a 9

Este é um programa que incrementa números de 0 a 9, retornando para 0 ao final e reiniciando a contagem:



Como não vamos usar nenhuma variável nem a pilha, não precisamos declará-las.
Vamos direto ao code segment.




Quando você emular o código no EMU8086 ele pode ficar muito rápido. Você pode mudar isso fazendo um delay, usando a barra indicada abaixo.




Essa é a tabela ASCII:

Os caracteres(char) são representados por números decimais ou hexadecimais. Como demonstrado abaixo, os caracteres 0 até 9 são equivalentes ao números, em hexadecimal, de 30 até 39. 






Código disponível para cópia:
code segment
code segment
mov dl,30h ; move o valor correspondente ao caracter 0 na tabela ASCII para DL

incrementa: ; rotina que imprime os números e soma 1
mov ah,02h ; estabelece que o cursor escreverá o caracter na primeira posição da tela
int 21h ; imprime o número

mov ax,3h ; com isso, a instrução int 10h limpa a tela
int 10h ; instrução relacionada a serviços de vídeo, neste caso limpa a tela

cmp dl,39h ; compara o valor de dl com 39 (caracter 9 na tabela ASCII)
je zera ; se for igual a 39, pula pra rotina “zera”, onde o valor de DL voltará a 30h
inc dl ; caso contrário, aumenta em 1 o valor de DL
jmp incrementa ; volta para a rotina “incrementa” e repete o processo

zera:
mov dl,30h ; valor de DL volta a ser 30h (0)
jmp incrementa ; pula para a rotina “incrementa”, onde será aumentado o valor

ends ;fim do segmento de código

Um comentário: