Mostrando entradas con la etiqueta ejemplo de programa en ensamblador. Mostrar todas las entradas
Mostrando entradas con la etiqueta ejemplo de programa en ensamblador. Mostrar todas las entradas

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



MOSTRAR EN PANTALLA UNA FIGURA EN ENSAMBLADOR



CÓDIGO DEL PROGRAMA
page 60, 132
title figu
;--------------------

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

dato segment para 'data'
; figu es la figura que se va a mostrar en pantalla, cada linea comienza con DB y termina con 0ah,0dh para
; salto del inea, al final de la figura va el caracter $ para indicar que termina la figura
figu DB '    \\\ ',0ah,0dh
                 DB '     \\\\\\ ',0ah,0dh
                 DB '      \(0)/ ',0ah,0dh
                 DB '     (/ \ ',0ah,0dh
                 DB '     /\  \ ',0ah,0dh
                 DB '    ///   \ ',0ah,0dh
                 DB '   ///|   | ',0ah,0dh
                 DB '  ////|   | ',0ah,0dh
                 DB ' //////   / ',0ah,0dh
                 DB '  |////  /_ ',0ah,0dh
                 DB ' /|///_ _ _/ ',0ah,0dh
                 DB '//\/|     | ',0ah,0dh
                 DB '__////____\__\_______ ',0ah,0dh
                 DB '_____________________ ',0ah,0dh
                 DB '    ||       || ',0ah,0dh
     DB '    ||       ||','$'
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 ah,09; funcion 09 envio de una cadena de caracteres en este caso es nuestra figura de nombre figu
mov dx,offset figu
int 21h
;------------
fin:;etiqueta fin
nop;no realiza instruccion
;-------------------------- END PP -------------------------
ret
inicio endp
codigo ends
end inicio



ENSAMBLADO, ENLACE Y EJECUCIÓN USANDO TASM Y TLINK