08/10/2014

Exemplo em Assembly: Escrevendo números em         binário

Hoje vamos fazer um programa para escrever números em binário. Ele irá escrever os números em binário    até 42.

Explicação da instrução ROL




 
   INSTRUÇÕES USADAS NO SOFTWARE:
MOV: atribuição de valor
ROL: rotaciona o bit mais a esquerda para esquerda.(Vê la na imagem que é de boa)
JMP: jumpar, pular para
CMP: comparação. Se CL for igual a X, por exemplo
INC: Incrementa +1 no registrador. Exemplo: INC DH, incrementa +1 no registrador DH
JE: jump if equals/pule se for igual
JC: jump if carry. Pula se houver carry(1)
JNC: jump if no carry. Pula se não houver carry(0)
JMP: pulo incondicional.  



Código disponível para cópia:
code segment
start:
;comeca
MOV DH,00000000B ;comeca com o numero 0

IMPRIME:
 MOV CL,0 ;deixa o CL com 0

ROTACIONA: 
 ROL DH, 1 ;joga um numero(sempre o primeiro) para a esquerda, como demonstrado na imagem1 acima 
 JC UM     ;se o numero jogado p/ esquerda for 1, pula para sub-rotina UM:
 JNC ZERO  ;se for 0, pula para sub-rotina ZERO:

VERIFICA:         ;verifica quantos numeros ja foram jogados para esquerda
 INC CL        ;incrementa 1 um CL
 CMP CL,8      ;ate que CL seja igual a 8
 JE PROXIMO    ;quando CL for 8, pula para a sub-rotina PROXIMO:
 JMP ROTACIONA ;enquanto nao for, repete a sub-rotina ROTACIONA:

UM:             ;imprime o numero 1
 MOV AH,2      ;rotina para imprimir um caracter
 MOV DL,"1"    ;manda uma string com o numero '1' para o video
 INT 21H       ;chama o servico de video p/ efetuar a impressao
 JMP VERIFICA  ;pula para a sub-rotina VERIFICA:

ZERO:            ;imprime o numero 0
 MOV AH,2      ;rotina para imprimir um caracter 
 MOV DL,"0"    ;manda uma string com o numero '0' para o video
 INT 21H       ;chama o servico de video p/ efetuar a impressao
 JMP VERIFICA  ;pula para a sub-rotina VERIFICA:

PROXIMO:  ;essa sub-rotina pula uma linha para imprimir o proximo numero e verifica se todos os numeros ja foram escritos
 MOV AH,2 
 MOV DL,13
 INT 21H
 MOV AH,2
 MOV DL,10
 INT 21H 

 INC DH     ;incrementa 1 em DH
 CMP DH,43  ;ate DH ser 42
 JE FIM     ;se dh for 42. Pula para sub-rotina FIM: e encerra o programa
 JMP IMPRIME;se for diferente(nesse caso, menor que 42). Pula para IMPRIME:

FIM: 
ends
end start ;fim


ou faça download do projeto. (Só abrir com o EMU8086)

0 comentários:

Postar um comentário