Está en la página 1de 8

BLOQUE PRINCIPAL DEL PROGRAMA

.model small
.stack
.data
.code

INICIO: inicio del bloque del cdigo
mov ax,@data asigna valores a l registro ax
mov ds,ax



mov ax,4c00h
int 21h
end INICIO fin del bloque de cdigo


MTODOS
Pueden contener cualquier nombre y deben ser llamados con la palabra call
tecla proc near inicion del cuerpo del metodo
mov ah,07h hace pausa y captura una tecla que se almacena en registro al
int 21h interruccion
ret fin del metodo
tecla endp fin del cuerpo de mtodo

mens proc near
mov ah,09h lee una cadena de texto
int 21h
ret
mens endp

caract proc near
mov dl, al asigna a dl, el contenido de al (cdigo ascii)
mov ah,02h imprime un caracter correspondiente a ascii
int 21h
ret
caract endp

fin proc near
mov ax,4c00h cierre del bloque del cdigo principal
int 21h
ret
fin endp

borrar proc near
mov ax,0003h borra pantalla
int 10h interrupcin
ret
borrar endp

Variables
asignar cadenas
cad db Hola Mundo $
asignar cadenas con saltos de lnea
me db 10,13,Hola mundo$ cadena con salto de lnea al principio
ma db Hola mundo, 10,13,$ cadena con salto de lnea al final
mo db Hola mundo, 10,13,
db Como ests, 10,13, cadena con texto que tiene salto de lnea en una sola variable

variables sin asignacin
x db ?
y db ?
z db ?
Esto indica que las variables no tienen valor

Etiquetas
Encierran un determinado bloque de cdigo que puede ser usado en cualquier parte del
programa mediante los saltos

etiqueta: Inicio de la puerta de la etiqueta
lea dx, cad asigna a dx una varible que contiene texto
call mens llama al mtodo que imprime una cadena
En este caso las etiquetas no tienen un fin siguen hasta que el cdigo finalice

Saltos
Saltan a determinadad etiquetas segn corresponda
loop salto corto sin condicin
jmp salto largo sin condicin

cmp al,48 inicio de condicin
ja si al es mayor salta a etiqueta
jb si al es menor salta a etiqueta
je si al es igual salta a etiqueta

Etiqueta:
cmp al,47
ja mayor
jb menor
je igual

mayor:
loop etiqueta

menor:
loop etiqueta

igual:
jmp salir en caso de que loop no funciones por desborsamiento

salir:
call fin

los saltos se pueden producir aunque las etiquetas estn antes o despus de la condicin

salir:
call fin

compara:
cmp al,28
ja salir
loop continuar

continua:
lea dx,mo
call mens
loop compara

1


Realizar la Resta de Dos nmeros
.model small
.stack
.data
m db "Ingrese el primer numero:",10,13,"$"
m2 db 10,13,"Ingrese el segundo numero:",10,13,"$"
m3 db 10,13,"El resultado de la resta es:",10,13,"$"
x db ?
y db ?
.code
inicio:
call cls
mov ax,@data
mov ds,ax

lea dx,m
call impm
primero:
call capt
cmp al,48
jb primero
cmp al,57
ja primero
call impc
mov x,al

lea dx,m2
call impm
segundo:
call capt
cmp al,48
jb segundo
cmp al,57
ja segundo
call impc
mov y,al
mov al,x
sub al,y
add al,48
mov x,al
lea dx,m3
call impm
mov al,x
call impc
call capt
call fin
capt proc near
mov ah,07h
int 21h
ret
capt endp

impm proc near

2

mov ah,09h
int 21h
ret
impm endp


impc proc near
mov dl, al
mov ah,02h
int 21h
ret
impc endp

cls proc near
mov ax,0003h
int 10h
ret
cls endp

fin proc near
mov ax,4c00h
int 21h
ret
fin endp

end inicio

Realizar la suma de dos nmeros de dos cifras
.model small
.stack
.data

m1 db "1 Suma",10,13
db "Presione enter para salir ",10,13,"$"
m2 db "Ingrese el primer numero",10,13,"$"
m3 db 10,13,10,13,"Ingrese el segundo numero",10,13,"$"
m4 db 10,13,10,13,"El resultado es: $"

v db ?
w db ?
x db ?
y db ?
z db ?

.code
INICIO:
call borrar
mov ax,@data
mov ds,ax
lea dx,m1
call mens
tecle:
call tecla
cmp al,13

3

je salir
cmp al,49
je ingreso1
ja tecle
jb tecle

salir:
call tecla
call fin


ingreso1:
call borrar
lea dx,m2
call mens

wr:
call tecla
cmp al,13
je cerow
loop blockw

blockw:
cmp al,48
jb wr
cmp al,57
ja wr
loop mostrarw

cerow:
mov al,48
loop mostrarw

mostrarw:
call caract
mov w,al
loop xr

xr:
call tecla
cmp al,13
je cerox
loop blockx

blockx:
cmp al,48
jb xr
cmp al,57
ja xr
loop mostrarx

cerox:
mov al,w
mov x,al

4

mov al,48
mov w,al
mov al,x
loop mostrarx

mostrarx:
mov x,al
call borrar
lea dx,m2
call mens
mov al,w
call caract
mov al,x
call caract
loop ingreso2

ingreso2:
lea dx,m3
call mens

yr:
call tecla
cmp al,13
je ceroy
loop blocky

blocky:
cmp al,48
jb yr
cmp al,57
ja yr
loop mostrary

ceroy:
mov al,48
loop mostrary

mostrary:
call caract
mov y,al
loop zr

zr:
call tecla
cmp al,13
je ceroz
loop blockz

blockz:
cmp al,48
jb zr
cmp al,57
ja zr
loop mostrarz

5


ceroz:
mov al,y
mov z,al
mov al,48
mov y,al
mov al,z
loop mostrarz

mostrarz:
mov z,al
call borrar
lea dx,m2
call mens
mov al,w
call caract
mov al,x
call caract
lea dx,m3
call mens

mov al,y
call caract
mov al,z
call caract
loop resz

resz:
mov v,48
mov al,x
add z,al
sub z,48
mov al,z
cmp al,57
ja cifra
jb resw

cifra:
sub al,10
mov z,al
mov v,49
loop resw

resw:
mov al,y
add w,al
sub w,48
mov al,v
mov v,48
add w,al
sub w,48
mov al,w
cmp al,57
ja cifra1

6

jb mostrares

cifra1:
sub al,10
mov w,al
mov v,49
jb mostrares

mostrares:
lea dx,m4
call mens
mov al,v
call caract
mov al,w

call caract
mov al,z
call caract
call tecla
jmp inicio

tecla proc near
mov ah,07h
int 21h
ret
tecla endp

mens proc near
mov ah,09h
int 21h
ret
mens endp

caract proc near
mov dl, al
mov ah,02h
int 21h
ret
caract endp


fin proc near
mov ax,4c00h
int 21h
ret
fin endp


borrar proc near
mov ax,0003h
int 10h
ret
borrar endp
end INIICIO

También podría gustarte