You are on page 1of 33

( htt p://www.program ac ion.c om .

py)
Inicio (htt p://www.program ac ion.c om .py) Escritorio ( htt p://www.program ac ion.c om .py/c ategoria/esc ritorio) Ensam
blador
( htt p://www.program ac ion.c om .py/c ategoria/esc ritorio/ensam blador) Ejercicios resueltos en Ensam blador 8086

Ejercicios resueltos en Ensamblador 8086


Rodrigo Paszniuk ( htt p://www.program ac ion.c om .py/author/raps) | 2013-05-20 | No hay com entarios
( htt p://www.program ac ion.c om .py/esc ritorio/ensam blador/ejerc ic ios- resueltos- en- ensam blador8086#respond)

En este artculo les voy a dejar los program as m s im portantes que he hecho en Ensam blador. La m ayora de los program as eran
tareas que m e dio m i profesor en la universidad.
E j e r c i c i o 1 : Escribir un cdigo que verifique si dos cadenas son iguales
org 100h
comienzo
: mov
si, x
mov al, msg2[si]
cmp msg[si], al ;comparar letra por letra las cadenas, si uno no coincide manda directamente a fin y
termina el programa jne fin:
cmp msg[si], "$" ;si es el final y el programa llega aca, quiere decir que
son iguales jz final:
inc x
loop
comienzo
final:
mov dx, offset
msg3 mov ah, 9
int
21h
fin:
ret
msg db "hello world
$" msg2 db "hello
world $" msg3 db
"Son iguales $" x dw
0

E j e r c i c i o 2 : Escribir un cdigo que verifique si una cadena es subcadena de


otra. Por ejem plo: la Mu es subcadena de Hola Mundo.
La cadena: 233 es subcadena de la cadena 2122432234
org 100h
mov si, 0 ;ponemos si en 0

comienzo:
mov al, msg2[0] ;copiar la primera letra de la
palabra a al cmp msg[si],"$" ;si es el fin de la
cadena mandar a final
jz final
cmp msg[si], al ;comparar si encuentra la primera letra de la
cadena jne seguir
mov di, 1 ;poner en 1
di comprobar:
mov al, msg2[di]
mov bx, di
cmp msg[si+bx], al ;posicion de la letra coincidente + di, comparar con
la cadena jne seguir ;si no coincide mandar a seguir
inc di ;incrementar di para seguir recorriendo cadena
cmp msg2[di],"$" ;si es el fin de la cadena y el programa llego aca quiere decir que la cadena es parte
de la palabra jz resultado
loop comprobar ;bucle para recorrer
cadena seguir:
inc si ;para seguir recorriendo la palabra
loop comienzo ;bucle principal para recorrer
palabra resultado:
mov dx, offset msg3 ;copiar msg3 a dx
mov ah, 9 ;preparar ah con 9 para la
interrupcion 21h int 21h ;mostrar contenido en
dx
final:
ret
msg db "Hola
Mundo$" msg2 db
"ola$"
msg3 db "Si es subcadena$"

E j e r c i c i o 3 : Escribir un cdigo que verifique que todas los caracteres de una cadena se encuentran en otra.
Por ejem plo: todas las letras de la cadena casa se encuentran en escaso. Pero no todas las letras de cerro se en cuentran en
recanate
org 100h
mov si, 0 ;ponemos si
en 0 comienzo:
cmp msg[si],"$" ;si es el fin de la cadena mandar a
final jz resultado
mov di, 0 ;poner en 0
di comprobar:
mov al, msg2[di] ;copiar msg2 con su posicion
a al cmp msg[si], al ;comparar msg con su
posicion con al jz seguir ;si se encuentra
entonces continua
inc di ;incrementar di para seguir recorriendo cadena
cmp msg2[di], "$" ;si es que llega al final y no encontro coincidencia, entonces ya termina
el programa jz final
loop comprobar ;bucle para
recorrer seguir:
inc si ;para seguir recorriendo la palabra
loop comienzo ;bucle principal para recorrer
palabra resultado:
mov dx, offset msg3 ;copiar msg3 a dx
mov ah, 9 ;preparar ah con 9 para la
interrupcion 21h int 21h ;mostrar contenido en
dx
final:
ret
msg db "cerro$"
msg2 db "recanate$"
msg3 db "Si se encuentran todos los caracteres$"

E j e r c i c i o 4 : Escribir una program a que reciba una cadena ingresada por teclado, term inada en ENTER. Luego que elim ine todos los
caracteres que no son dgitos, sin utilizar una variable auxiliar.
ORG 100H
mov si,
0
lectura:
mov ah,1
int 21h
cmp al,13
jz resultado:
cmp al, 57 ;si tecla es mayor a 57 entonces ir a fin3 (tecla > 57)
ja fin3
cmp al,47 ;si tecla no es mayor a 47 ir a fin3 (tecla <= 47)
jng fin3
mov bx[si], al ;si es un digito entonces guardo
en bx inc si ;incrementa si
fin3:
jmp
lectura
resultado:
mov ah,00h ;limpia la
pantalla mov al,03h
int 10h
mov bx[si], "$"
mov dx, offset
bx
mov ah, 9 ;preparar ah con 9 para la
interrupcion 21h int 21h ;mostrar contenido en
dx
ret

E j e r c i c i o 5 : Escribir un program a que tom e una cadena que representa un nm ero decim al y escriba su equivalente octal
org 100h ; inicio de
programa mov si, 0
mov al, 0
cadAnum:
cmp cad[si],
"$" jz seguir
mov bl,
10 mul bl
sub cad[si],
'0' add al,
cad[si]
inc si
loop cadAnum
seguir:
mov cx,
si mov
si, 0 mov
bl, 8
pasar:
div bl ;dividir al con bl
mov oct[si], ah ;copiar a la cadena oct el resultado sobrante de la
division inc si ;incrementar si
loop
pasar
fina:
cmp ah,
0 jnz
final
mov oct[si],
al final:
;mov dx, offset res

;mov ah, 9 ;preparar ah con 9 para la interrupcion 21h

;int 21h ;mostrar contenido


en dx ret
cad db
"64$" oct
db 0

E j e r c i c i o 6 : Escribir un program a que tom e tres cadenas, la prim era y la tercera representan un nm ero y la segunda una operacin, por
ejem plo: 329, -, 21 e im prim a el resultado 308
org 100h ; inicio de programa
include 'emu8086.inc' ;Incluye funciones de libreria emu8086
; DEFINE_SCAN_NUM
;
DEFINE_PRINT_STRING
DEFINE_PRINT_NUM
DEFINE_PRINT_NUM_UN
S mov si, 0
mov al, 0
;Convertir primera cadena a
numero cadAnum:
cmp cad1[si],
"$" jz seguir
mov bl,
10 mul bl
sub cad1[si],
'0' add al,
cad1[si]
inc
si
loop cadAnum
seguir:
mov aux1, al
;Convertir segunda cadena a
numero mov si, 0

mov al, 0

cadAnum2:
cmp cad3[si],
"$" jz seguir2
mov bl,
10 mul bl
sub cad3[si],
'0' add al,
cad3[si]
inc
si
loop cadAnum2
seguir2:
mov bl, al
mov al,
aux1
;realizar operaciones normalmente teniendo ya los dos numeros
decimales cmp cad2, "-"
jz resta
cmp cad2,
"+" jz suma
cmp cad2,
"*" jz
multi
cmp cad2,
"/" jz divi
resta:
sub al,
bl jmp
fin suma:
add al,
bl jmp
fin
multi:
mul bl

jmp
fin
divi:

div bl
jmp
fin
fin:
mov bx,
ax mov
ah,09 lea
dx,msg
int 21h
mov ax, bx
call PRINT_NUM
ret
cad1 db
"10$" cad2
db "-" cad3
db "2$"
aux1 db ?
aux2 dw ?
msg dw "El resultado es: $"

E je rc ic io 7 : Escribir un program a que im prim a X en la pantalla hasta que se presiones ESC .


name
"keybrd"
org 100h
; print a welcome message:
mov dx, offset
msg mov ah, 9
int 21h
;============================
; eternal loop to get
; and print keys:
wait_for_key:
; check for keystroke in
; keyboard buffer:
mov dh, pos

mov dl,
pos

mov bh,
0 mov
ah, 2
int 10h ;Movemos el
cursor mov al,'X'
mov bh,0
mov bl,1
mov cx,1
mov
ah,09h
inc pos ;Imprimimos
una x int 10h
mov ah,
1 int
16h
jz wait_for_key
; get keystroke from keyboard:
; (remove from the buffer)
mov ah,
0 int
16h
; print the key:
mov ah,
0eh int
10h
; press 'esc' to exit:
cmp al,
1bh jz
exit
jmp wait_for_key
;============================
exit:
ret
msg db "Type anything...", 0Dh,0Ah
db "[Enter] - carriage return.",
0Dh,0Ah db "[Ctrl]+[Enter] - line
feed.", 0Dh,0Ah db "You may hear a

beep", 0Dh,0Ah
db " when buffer is overflown.",
0Dh,0Ah db "Press Esc to exit.",
0Dh,0Ah, "$"
pos db 1

end

E je rc ic io 8 : Escribir un program a que ordene un vector de m ayor a m enor.


name "arreglomayor" org 100h
mov cx, 8
bucle1:
mov c,
cx
mov bx,
cx mov
cx, 9
bucle2
:
mov
si,
cx
mov ah, v[si1]
cmp ah,v[bx1]
jnge seguir ;Si v[8] < v[7] no hacer nada,
sino:
mov dh, v[bx-1] ;Copiar v[7]
en dh mov dl, v[si-1] ;Copiar
v[8] en dl mov v[bx-1], dl
;Copiar dl en v[7] mov v[si1], dh ;Copiar dh en v[8]
seguir:
loop
bucle2
mov cx, c
loop bucle1
ret
v db

2,32,64,32,98,12,5,21,91 c
dw 0

E je rc ic io 9 : Escribir un program a que halle el MC M Y MC D

; Programa que calcula el MCD y MCM de dos numeros decimales (soporta numeros de 8 bits o 1 byte)
mov cont,1 ;inicializar variable cont
en 1 bucle:
mov
ah,0
mov
al,cont
mov
bl,nro1
div bl
cmp ah,0 ;si el resto de la division del contador con el nro1 es
igual 0 je parte1
bc
:
inc
cont
;incrementar
el
contador
jmp bucle ;bucle hasta que encuentre
el MCM
parte1: ;si nro1 es multiplo del
contador mov ah,0
mov
al,cont
mov
bl,nro2
div bl
cmp ah,0 ;compara si el resto de la division del contador con el
nro2 es 0 je parte2
jmp bc ;si el nro2 no es multiplo del contador regresa a
bucle1 parte2: ;si el nro1 y el nro2 son multiplos del
contador
mov
al,cont
mov MCM,al ;guarda el
MCM
jmp parte3 ;ir a
final

parte3: ;una vez que tengamos el MCM primero multiplicar nro1


* nro 2
mov al, nro1 ;con ese resultado, dividir por el MCM de nro1 y nro2 y
tenemos el MCD
mov bl,
nro2 mul bl
mov
bl,
MCM
div
bl
mov
MCD,
al
ret ;fin del programa

cont
db
0
;cont
=
contador
MCM db 0 ;en esta variable se guarda
el MCM MCD db 0 ;en esta variable se
guarda el MCD nro1 db 48 ;numero1
decimal
nro2
db
60
;numero2
decimal

E je rc ic io 1 0 : Escribir un program a que dibuje una diagonal en la pantalla.


mov
cx,1
mov al,
13h mov
ah, 0
int 10h ; set graphics video mode.
bucle1
:
mov dx, cx
mov al, color ;AL = pixel color
mov ah, 0ch ;Change color for a single
pixel int 10h ;set pixel
cmp cx, 101 ;llegar hasta 100 x 100 (va en diagonal)
jz fin
inc cx ;DX = row.
add color, 2 ;para cambiar
colores jmp bucle1 ;CX = column
fin
:
re
t
color db
1

E je rc ic io 1 1 : Escribir un program a que lea un archivo y cuente cuantas palabras term inan con la letra a.
name
"archivo3"

org
100h
mov al, 0 ;modo de acceso para abrir arhivo, modo lectura/escritura
mov dx, offset archivo ;offset lugar de memoria donde esta la
variable mov ah, 3dh ;se intenta abrir el archivo
int 21h ;llamada a la interrupcion DOS
jc error ; si se prendio la bandera c ir a error
mov handle, ax ;si no paso mover a lo que le dio el SO
jmp leer
error:
; ....
;leer
archivo
leer:
mov bx,
handle mov
cx, 1
mov dx, offset
leido mov ah, 3fh
int 21h
cmp ax, 0 ;ax queda en 0 cuando llega a EOF
jz FIN ;si es 0 entonces va a fin para cerrar archivo
;Detectar palabras que terminan
con a mov dl, leido[0]
cmp dl, " " ;comparar si es espacio
jz mostrar ;si es espacio entonces ir a
mostrar jmp abajo ;si no es espacio
entonces ir a abajo
mostrar:

cmp aux, "a" ;compara si el anterior es a

jnz abajo
inc cont ;si es a entonces incrementar
contador abajo:
mov aux, dl ;guardar en aux lo que hay en dl para comparar en la
proxima vuelta jmp leer
FIN:
;cerramos
archivo mov bx,
handle
mov ah,
3eh int
21h
ret
archivo db "C:\prueba.txt", 0 ;ascii del nombre del
archivo leido db "$"
handle dw ? ;identificador del
arhivo aux db "$"
cont db 0

En: Ensamblador (ht t p:// www.pr ogr am ac ion.c om.py/c at egoria/esc rit orio/ensamblador) 8086 (ht t p://www.pr ogr am ac ion.c om.py/t ag/8086)
asm
(ht t p:// www.pr ogr am ac ion.c om.py/t ag/asm) ensamblador (ht t p://www.pr ogr am ac ion.c om.py/t ag/ensamblador- 2)

Acerca del autor: Rodrigo Paszniuk (http://rodrigopaszniuk.stilogames.c om.py)

Tcnico Superior en Inform tica. Estudiante de Ing. Inform tica, am ante de la tecnologa, la m sica y aprender cosas
nuevas. En m is tiem pos libres m e gusta jugar vdeojuegos, program ar o practicar ciclism o.

Posts Relacionados

(htt p://www.program ac ion.c om .py/esc ritorio/ensam blador/ejem plos- de- program as- en- ensam blador- 8086) Ejem
plos

de program as en Ensam blador 8086

(htt p://www.program ac ion.c om .py/esc ritorio/ensam blador/introducc ion- al- lenguaje- ensam blador) Introduccin al

lenguaje Ensam blador

Siguiente Post (http://www.program ac ion.c om .py/web/php/app- m ultilenguaje- enyii)


Anterior Post ( htt p://www.program ac ion.c om .py/web/php/tem as- en- yii)

Anuncios Google

MSG

Convertir mov

Ejercicios

Assembler

Deja un comentario
Tu debes loguearte ( htt p://www.program ac ion.c om .py/wp- login.php? redirect_to=http%3A%2F%2Error! Referencia de hipervnculo no
vlida.) para hacer com entarios.

( htt p://www.fac ebook.c om /pages/P rogram ac ionc om py/170660109749450)

( htt p://www.program ac ion.c om .py/c ontac tenos)

GITHUB

(https://twitter.com /ProgC om Py)

(htt p://www.program ac ion.c om .py/feed)


()

()

(https://github.com /Program acionC om


Py)

ENTRADAS RECIENTES
Google lanza Dart 1.0, su alternativa a Javascript (http://www.program ac ion.c om .py/notic ias/google- lanza- dart- 1- 0- sualternativa- a- javascript)
Django 1.6 final disponible (htt p://www.program ac ion.c om .py/notic ias/django- 1- 6- final- disponible)
Instalar Zabbix 2 en Ubuntu 13 utilizando MySql com o m otor de base de datos (htt p://www.program ac ion.c om
.py/varios/linux- all/instalar-zabbix-2-en-ubuntu-13-utilizando-m ysql-com o-m otor-de-base-de-datos)
Open Site Explorer: Herram ienta para m ejorar SEO (http://www.program ac ion.c om .py/notic ias/open- site- explorer- herram
ienta- para- m ejorar-seo)
Offline.js, avisa de una desconexin a Internet a los usuarios de tu site (http://www.program ac ion.c om .py/notic ias/offline- jsavisa- de- una-desconexion-a-internet-a-los-usuarios-de-tu-site)

COMENTARIOS RECIENTES

ETIQUETAS

8086 ( htt p: //www . programacion. com. py/t ag/8086)

android (htt p://www.programac ion.c om.py/tag/android- 2) asm

( htt p: //www . programacion. com. py/t ag/asm) Bootstrap 3 ( htt p: //www . programacion. com. py/t ag/boot st rap- 3)

(http://www.program acion.com.py/tag/c-3) c++

(http://www.programacion.com.py/tag/c-2) c adenas (http://w w w .programac ion.c om.py/tag/c


adenas) CentOS

(http://www.programac i on.c om.py/tag/c entos) css (http://www .programacion.com.py/tag/css- 2)

delphi (http://www.programacion.com.py/tag/delphi-2) ensamblador


(h tt p ://www.pro g ramac ion.c om.p y /t ag /e nsambl ador- 2) exportar ( htt p://www .programacion.com.py/t ag/export ar) fechas
( htt p: //www . programacion. com. py/t ag/fechas) fedora (h tt p ://www.pro g ramac ion.c om.p y /t ag /fe dora) FICHEROS ( htt p: //www . programacion. com. py/t ag/ficheros)

func iones (h ttp://w w w .programac ion.c om.py/tag/func iones) gii ( htt p://www .programacion.com.py/t ag/gii) google

(http:// www.programac ion.c om.py / tag/ google ) gridview (htt p://www.programacion.com.py/t ag/gridview ) HTML5
( htt p: //www . programacion. com. py/t ag/ht ml5) HTML parser ( htt p: //www . programacion. com. py/t ag/ht ml- parser)

Java

(http://www.programac i on.c om.py/tag/j ava- esc ri tori o) jquery (http://www.programacion.com.py/tag/jquery) JSOUP

linux
(http://www.program acion.com.py/tag/linux)
( htt p: //www . programacion. com. py/t ag/jsoup) lamp ( htt p: //www . programacion. com. py/t ag/lamp)

( htt p: //www . programacion. com. py/t ag/mint )


pdf
( htt p: //www . programacion. com. py/t ag/pdf)
Postfix

Menu ( htt p: //www . programacion. com. py/t ag/menu) mint

mysql (h tt p ://www.pro g ramac ion.c om.p y /t ag /my sql ) PageSpeed ( htt p://www .programacion.com.py/t ag/pagespeed)

php (http://www.programacion.com .py/tag/php- 2)

( htt p: //www . programacion. com. py/t ag/post fix) PostgreSQL ( htt p: //www . programacion. com. py/t ag/post gresql)

red hat (h tt p://www.p rog ramac ion.c o m.py /t ag /re d -

hat) reportes (h tt p://www.p rog ramac ion.c o m.p y /t ag /re porte s) SBDOO ( htt p://www .programacion.com.py/t ag/sbdoo) shell script
( htt p: //www . programacion. com. py/t ag/shell- script) soc kets (h tt p://www.p rog ramac ion.c o m.py /t ag /soc ke t s) sql server
( htt p: //www . programacion. com. py/t ag/sql- server)

ubuntu (h ttp://w w w .programac ion.c om.py/tag/ubuntu) validaciones

( htt p: //www . programacion. com. py/t ag/validaciones) windows ( htt p: //www . programacion. com. py/t ag/w indow s) Wordpress

Yii (http://w w w
.programacion.com.py/tag/yii)
( htt p: //www . programacion. com. py/t ag/w ordpress)

LICENCIA DEL CONTENIDO


Sitio web bajo licencia C reative C om m ons Attribution-NonC om m ercial-ShareAlike 3.0 License ( htt p://c reativec om m
ons.org/lic enses/by- nc - sa/3.0/deed.es)

META
Registrarse (http://www.program ac ion.c om .py/wp- login.php?
action=register) Acceder (htt p://www.program ac ion.c om .py/wplogin.php)
RSS (Really Sim ple Syndication) de las entradas ( htt p://www.program ac ion.c om .py/feed)
RSS (Really Sim ple Syndication) de los com entarios ( htt p://www.program ac ion.c om .py/c om m
ents/feed) WordPress.org (http://es.wordpress.org/)

LO MS LEDO
Funciones y procedim ientos + Operaciones con fechas + Funciones de cadenas en Delphi ( htt p://www.program ac ion.c om
.py/esc ritorio/delphi/func iones- y- proc edim ientos- operac iones- c on- fec has- func iones- de- c adenas) DEFINES Y MAC ROS en C
( htt p://www.program ac ion.c om .py/esc ritorio/c /defines- y- m ac ros- en- c )
Manual bsico de Yii fram ework (PHP) ( htt p://www.program ac ion.c om .py/web/php/m anual- basic o- de- yii)
Ejercicios resueltos en Ensam blador 8086 ( htt p://www.program ac ion.c om .py/esc ritorio/ensam blador/ejerc ic ios- resueltos- en- ensam
blador8086)
Bases de datos (DAO) en Yii (http://www.program ac ion.c om .py/web/php/bases- de- datos- dao- en- yii)

ACERCA DE
Program acion.com .py es un sitio web donde podrs encontrar recursos y docum entacin de distintos lenguajes de program acin.
StiloGam es ( htt p://www.stilogam es.c om
.py)

Tecnologia ( htt p://www.tec nologia.c om


.py)

Network (htt p://www.network.c om .py)

2013 PROGRAMAC ION.C OM.PY - Design By Rodrigo Paszniuk ( htt p://rodrigopasz niuk.stilogam es.c om .py)

(http://www.facebook.com /pages/Program

acioncom py/170660109749450)
(https://twitter.com /ProgC om Py) () ()

( htt p://www.program ac ion.c om .py/c ontac tenos)

( htt p://www.program ac ion.c om .py/feed)

You might also like