You are on page 1of 9

EJEMPLOS

Y
EJERCICIOS RESUELTOS

Ejemplo: el siguiente cdigo borra la pantalla (estableciendo el color 0 a todos los


pixels):
MOV
MOV

AX,0A000H
ES,AX

MOV CX,320*200 ; ESTA OPERACIN LA REALIZA EL ENSAMBLADOR


XOR DI,DI
CLD
REP STOSB
o podemos escribir cada lnea de su propio color:
CLD
XOR DI,DI
MOV AX,0A000H
MOV ES,AX
MOV AX,0FF00H
BUCLE:
MOV CX,320
REP STOSB
INC AX
JNZ BUCLE

Ntese que asignando a AX el valor ff00h nos ahorramos una comparacin en cada bucle, ya que el
propio INC actualiza los flags.
Ejemplo:
title programa que imprime si es mayor de edad o no
.model small
.stack 64
.data
edad db 15
mayor db 'ERES MAYOR DE EDAD...','$'
menor db 'ERES MENOR DE EDAD...','$'
.code
begin proc far
mov ax,@data

mov ds,ax
mov es,ax
cmp edad,18
jae b20
mov ah,09h ;peticion para desplegar
lea dx,menor ;carga la direccion de la indicacion
int 21h ;llama al dos
jmp b21 ;salta a la etiqueta b21 para salir
b20:
mov ah,09h ;peticion para desplegar
lea dx,mayor ;carga la direccion de la indicacion
int 21h ;llama al dos
b21:
mov ax,4c00h
int 21h
begin endp
end begin

title programa que imprime si es mayor de edad o no


.model small
.stack 64
.data
edad db 15
mayor db 'ERES MAYOR DE EDAD...','$'
menor db 'ERES MENOR DE EDAD...','$'
.code
begin proc far
mov ax,@data
mov ds,ax
mov es,ax
cmp edad,18
jae b20
mov ah,09h ;peticion para desplegar
lea dx,menor ;carga la direccion de la indicacion
int 21h ;llama al dos
jmp b21 ;salta a la etiqueta b21 para salir
b20:
mov ah,09h ;peticion para desplegar
lea dx,mayor ;carga la direccion de la indicacion
int 21h ;llama al dos
b21:
mov ax,4c00h
int 21h
begin endp
end begin

Ejercicio 1. Desarrolle un programa en ensamblador que pase el contenido de una variable a otra.
page 60,132
title prog02 Operaciones de movimiento
pilasg segment para stack 'stack'
dw 32 dup(0)
pilasg ends
datossg segment para 'data'
cad1 db 'itslv'
cad2 db 5 dup(?)
datossg ends
codigosg segment para 'code'
inicio proc far
assume ss:pilasg,ds:datossg,cs:codigosg
mov ax,datossg
mov ds,ax
lea bx,cad1
lea di,cad2
mov al,[bx]
mov [di],al ;mover la letra i
inc bx
inc di
mov al,[bx]
mov [di],al ;mover la letra t
inc bx
inc di
mov al,[bx]
mov [di],al ;mover la letra s
inc bx
inc di
mov al,[bx]
mov [di],al ;mover la letra l
inc bx
inc di
mov al,[bx]
mov [di],al ;mover la letra v
inc bx
inc di

Ejercicio 2. Desarrolle un programa en ensamblador que tenga una variable para guardar el nombre
de una persona, otra variable para guardar los apellidos de la persona y una ultima variable donde
guardaremos todo el nombre completo. El programa deber pasar el contenido de la variable que
tiene el nombre a la variable donde se guardara el nombre completo y posteriormente pasar el
contenido de la variable que tiene los apellidos a la misma variable donde se tendr el nombre
completo.

page 60,132
title p03asm (EXE) Operaciones de movimiento extendidos
.model small
.stack 64
.data
nom db 'FAUSTINO','$'
ape db 'VAZQUEZ','$'
nomcom db 'ABCDEFGHIJKLMNO','$'
.code
begin proc far
mov ax,@data
mov ds,ax
mov es,ax
mov cx,08
lea si,nom
lea di,nomcom
b20:
mov al,[si]
mov [di],al
inc si
inc di
dec cx
jnz b20
mov cx,07
lea si,ape
b21:
mov al,[si]
mov [di],al
inc si
inc di
dec cx
jnz b21
mov ah,09h ;peticion para desplegar
lea dx,nomcom ;carga la direccion de la indicacion
int 21h ;llama al dos
mov ax,4c00h
int 21h
begin endp
end begin

page 60,132
title programa que imprime un marco
.model small
.stack 64
.data
car db '*','$'
col db 0
ren db 0
.code
begin proc far
mov ax,@data
mov ds,ax
;limpiar pantalla
mov ax,0600h
mov bh,71h
mov cx,0000h
mov dx,184fh
int 10h
;imprimir lineas horizontales
mov cx,80
a10:
;colocar cursor
mov ah,02h
mov bh,00
mov dh,0 ;renglon 0
mov dl,col ;columna
int 10h
;imprimir *
mov ah,09h
lea dx,car
int 21h
;colocar cursor
mov ah,02h
mov bh,00
mov dh,22
mov dl,col
int 10h
;imprimir *
mov ah,09h
lea dx,car
int 21h
inc col
loop a10
;imprimir lineas verticales
mov cx,23
a20:
;colocar cursor
mov ah,02h
mov bh,00
mov dh,ren
mov dl,0
int 10h
;imprimir
mov ah,09h

lea dx,car
int 21h
;colocar cursor
mov ah,02h
mov bh,00
mov dh,ren
mov dl,79
int 10h
;imprimir
mov ah,09h
lea dx,car
int 21h
inc ren
loop a20
mov ax,4c00h
int 21h
begin endp
end begin

title programa que imprime si es mayor de edad o no


.model small
.stack 64
.data
edad db 15
mayor db 'ERES MAYOR DE EDAD...','$'
menor db 'ERES MENOR DE EDAD...','$'
.code
begin proc far
mov ax,@data
mov ds,ax
mov es,ax
cmp edad,18
jae b20
mov ah,09h ;peticion para desplegar
lea dx,menor ;carga la direccion de la indicacion
int 21h ;llama al dos
jmp b21 ;salta a la etiqueta b21 para salir
b20:
mov ah,09h ;peticion para desplegar
lea dx,mayor ;carga la direccion de la indicacion
int 21h ;llama al dos
b21:
mov ax,4c00h
int 21h
begin endp
end begin

Ejercicios Propuestos:
Ejercicio 1:
1. Calcule la sucesin de Fibonacci para los 10 primeros trminos de la serie, utilizando
para ello un ciclo controlado por la instruccin Loop. La sucesin est formada por
nmeros, de modo tal que cada nmero es la suma de los dos anteriores- Ejemplo:
1,1,2,3,5,8,13,21,34,55.

RESPUESTA AL EJERCICIO PROPUESTO:


Programa: Loop.ASM Descripcin:
.COMMENT
*
*.MODEL tiny .
CODE Inicio: ;
Punto de entrada al programa Mov AX,0;
AX=0
Mov BX,1;
BX=1
Estos son los dos primeros elementos 0+1=1
Mov CX,10 ;
Repetir 10 veces Repite: Mov DX,AX ;
DX=AX Add DX,BX ;
DX=AX+BX Mov AX,BX ;
Avanzar AX Mov BX,DX ;
Avanzar BX Loop Repite ;
siguiente nmero Mov AX,4C00h ;
Terminar programa y
salir al DOS Int 21h ;

Ejercicio 2. Desarrolle un programa en ensamblador que pase el contenido de una variable a otra.
RESPUESTA AL EJERCICIO PROPUESTO:
title prog02 Operaciones de movimiento
pilasg segment para stack 'stack'
dw 32 dup(0)
pilasg ends
datossg segment para 'data'
cad1 db 'itslv'
cad2 db 5 dup(?)
datossg ends
codigosg segment para 'code'
inicio proc far
assume ss:pilasg,ds:datossg,cs:codigosg
mov ax,datossg
mov ds,ax
lea bx,cad1
lea di,cad2
mov al,[bx]
mov [di],al ;mover la letra i
inc bx
inc di
mov al,[bx]
mov [di],al ;mover la letra t

inc
inc
mov
mov
inc
inc
mov
mov
inc
inc
mov
mov
inc
inc

bx
di
al,[bx]
[di],al ;mover la letra s
bx
di
al,[bx]
[di],al ;mover la letra l
bx
di
al,[bx]
[di],al ;mover la letra v
bx
di

Ejercicio 3. Desarrolle un programa en ensamblador que tenga una variable para guardar el nombre de
una persona, otra variable para guardar los apellidos de la persona y una ultima variable donde
guardaremos todo el nombre completo. El programa deber pasar el contenido de la variable que tiene el
nombre a la variable donde se guardara el nombre completo y posteriormente pasar el contenido de la
variable que tiene los apellidos a la misma variable donde se tendr el nombre completo.

RESPUESTA AL EJERCICIO PROPUESTO:


title p03asm (EXE) Operaciones de movimiento extendidos
.model small
.stack 64
.data
nom db 'FAUSTINO','$'
ape db 'VAZQUEZ','$'
nomcom db 'ABCDEFGHIJKLMNO','$'
.code
begin proc far
mov ax,@data
mov ds,ax
mov es,ax
mov cx,08
lea si,nom
lea di,nomcom
b20:
mov al,[si]
mov [di],al
inc si
inc di
dec cx
jnz b20
mov cx,07
lea si,ape
b21:
mov al,[si]
mov [di],al
inc si
inc di
dec cx
jnz b21
mov ah,09h ;peticion para desplegar
lea dx,nomcom ;carga la direccion de la indicacion
int 21h ;llama al dos
mov ax,4c00h
int 21h
begin endp
end begin

You might also like