lunes, 26 de septiembre de 2011

MOSTRAR EN ENSAMBLADOR LOS NÚMEROS DEL 1 AL 100 EN BASE HEXADECIMAL

CÓDIGO EN ENSAMBLADOR

page 60, 132
title Cien_Caracteres
;--------------------

pila segment para stack 'stack'
DB 12 dup ('pilapila')
pila ends
;--------------------

dato segment para 'data'

dato ends
;--------------------

codigo segment para 'code'
inicio proc far
assume cs: codigo, ds:dato, es:dato, ss:pila
push ds
sub ax, ax
push ax
mov ax, dato
mov ds, ax
mov es, ax
;-------------------- PROGRAMA PRINCIPAL -------------------
mov bl, 31h;asignacion b=1
mov cl, 41h;asignacion c=A

unidades1:; en esta etiqueta se imprimen los primeros numeros de un digito del 1 a 9
                                               mov ah,08; se lee un caracter de pantalla
                                               int 21h

                                               mov ah, 02
                                               mov dl, bl; salida en pantalla de bl (numeros del 1 al 9)
                                               int 21h

                                               mov ah, 02
                                               mov dl, 20h;salida en pantalla de espacio para separar los numeros
                                               int 21h

                                               inc bl;incremento de bl
                                               cmp bl, 39h;comparacion de bl con 9
                                               ja unidades2;salto condicional: si bl es igual a 9 salta a unidades2 para ahora imprimir de la A a la F
                                               jmp unidades1;salto incondicional a unidades 1 para continuar imprimiendo numeros

unidades2:; en esta etiqueta se imprimen los primeros numeros de un dígito  de la A a la F
                                               mov ah,08;se lee un caracter de pantalla
                                               int 21h

                                               mov ah, 02
                                               mov dl, cl; salida en pantalla de letras de la A a la F
                                               int 21h

                                               mov ah, 02
                                               mov dl, 20h;salida en pantalla de espacio para separar los numeros
                                               int 21h

                                               inc cl ;incremento de cl
                                               cmp cl, 46h; comparacion de cl con F
                                               ja decenas;salto condicional: si cl es mayor que F saltara a decenas
                                               jmp unidades2;salto incondicional a unidades2

                                               decenas:;en esta etiqueta asignamos nuevos valores a bl y cl para comezar con los numeros de dos digitos
                                               mov bl, 31h;asignamos a bl 1
                                               mov cl, 30h;asignamos  a cl 0
                                               jmp doble1;salto incondicional a doble1

incremento1:;aqui se majen las letras para los numeros de dos cifras
                                               mov cl,41h; se asigna a cl A
                                               cmp cl,46h;se compara cl con F
                                               ja incremento2;salto condicional: si cl es mayor  que F salta a incremento2
                                               jmp doble2;salto incondicional a doble2

incremento2:;aqui se controla el incremento de bl y se asigna a cl 0 para iniciar una nueva impresion de unidades
                                               mov cl,30h; asignacion a cl de 0
                                               inc bl;; se incrementa bl
                                               cmp bl,36h;se compara bl con 6
                                               je doble3;salto condicional: si bl es igual a 6 salta a doble3
                                               jmp doble1;salto incondicional  a doble1 para continuar imprimiendo numero con numero

doble1:;en esta etiqueta se muestran en pantalla numeros de dos digitos (numero con numero)
                                               mov ah,08;lee un caracter en pantalla
                                               int 21h

                                               mov ah,02
                                               mov dl, bl;se imprime en pantalla un numero(del 1 al 5)
                                               int 21h

                                               mov ah,02
                                               mov dl, cl¨;se imprime en pantalla un numero(del 0 al 9)
                                               int 21h

                                               mov ah, 02
                                               mov dl, 20h; se imprime un pantalla un espacio
                                               int 21h

                                               inc cl;incremento de cl
                                               cmp cl,39h;comparacion de cl con 9
                                               ja incremento1;salto condicional:  si cl es mayor que 9 salta a incremento1
                                               jmp doble1;salto incondicional a doble1 para continuar imprimiendo numero y numero

doble2:;en esta etiqueta se imprimen numeros de dos cifras formados por numero y letra
                                               mov ah,08;leer un caracter en pantalla
                                               int 21h

                                               mov ah,02
                                               mov dl, bl;se imprime en pantalla un numero(del 0 al 9)
                                               int 21h

                                               mov ah,02
                                               mov dl, cl;se imprime en pantalla una letra(de la A a la F)
                                   int 21h

                                               mov ah, 02
                                               mov dl, 20h;muestra en pantalla un espacio
                                               int 21h

                                               inc cl;incremento de cl
                                               cmp cl,46h;comparacion de cl con F
                                               ja incremento2;salto condicional: si cl es mayor que F salta a incremento2
                                               jmp doble2;salto incondicional a doble2 para seguir imprimiendo numero y letra

doble3:; aqui se terminan de imprimir los numeros del 60 al 64 para no llegar hasta el 6F
                                               mov ah,08;lee un caracter de la pantalla
                                               int 21h

                                               mov ah,02
                                               mov dl, bl;imprime un numero, que en esta parte siempre es 6
                                               int 21h

                                               mov ah,02
                                               mov dl, cl;imprime numeros del 0 al 4
                                               int 21h

                                               mov ah, 02
                                               mov dl, 20h; muestra en pantalla el espacio
                                               int 21h

                                               inc cl;incremento de cl
                                               cmp cl,34h;comparacion de cl con 4
                                               ja fin;salto condicional: si cl es mayor a 4 salta a fin
                                               jmp doble3;salto incondicional  a doble3 para continuar imprimendo del 60 al 64

;------------
fin:; fin del programa
                nop;no realiza accion alguna
;-------------------------- END PP -------------------------
ret
inicio endp
codigo ends
end inicio


ENSAMBLADO, ENLACE Y EJECUCIÓN USANDO TASM Y TLINK



1 comentario: