Inicio (https://www.programacion.com.p (https://www.programacion.com.py) y) » Escritorio (https://www.programacion.com.py/categor (https://www.programacion.com.py/categoria/escritorio ia/escritorio)) » Ensamblador (https://www.programacion.com.p (https://www.programacion.com.py/categoria/es y/categoria/escritorio/ critorio/ensamblador) ensamblador) » Ejercicios resueltos en Ensamblador 8086
Ejercicios resueltos en Ensamblador 8086 Rodrigo Paszniuk (https://www.programacion.com.py/autho (https://www.programacion.com.py/author/raps) r/raps) | 2013-05-20 | 3 Comments (https://www.programacion.com.p (https://www.programacion.com.py/escritorio y/escritorio/ensamblador /ensamblador/ejercicios-resu /ejercicios-resueltos-en-ensam eltos-en-ensamblador-8086#d blador-8086#disqus_thread) isqus_thread)
45 (//m.addthis.com/live/r (//m.addthis.com/live/redirect/? edirect/? url=mailto%3A%3Fbody%3Dhtt url=mailto%3A%3Fbody%3Dhttps%253A%252F%252Fwww ps%253A%252F%252Fwww.programacion.com.p .programacion.com.py%252Fescrit y%252Fescritorio%252Fensam orio%252Fensamblador%252Fejer blador%252Fejerciciosciciosresueltos-en-ensamblador8086%26subject%3DEjercicios%2520r 8086%26subject%3DEjercicios%2520resueltos%2520en esueltos%2520en%2520Ensamblador% %2520Ensamblador%25208086&uid=5a2cb17c6f06a5&p 25208086&uid=5a2cb17c6f06a5&pub=raub=ra513297721cbba692&rev=v8.3.10-wp&per=undened 513297721cbba692&rev=v8.3.10-w p&per=undened&pco=tbx32-300) &pco=tbx32-300)
Lo mejor de Rusia en HD
Los mejores partidos en HD. Desde $479 al mes x 2 meses
En este artículo les voy a dejar los programas más importantes que he hecho en Ensamblador. Ensamblador. La mayoría de los programas eran tareas que me dio mi profesor en la universidad. universidad. Escribir un código que verique 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 coinc ide manda directamente a fin y term ina 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
Escribir un código que verique si una cadena es subcadena de otra. Por ejemplo: “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$"
Escribir un código que verique que todas los caracteres de una cadena se encuentran en otra. Por ejemplo: todas las letras de la cadena “casa” se encuentran en “escaso”. Pero no todas las letras de “cerro” se en cuentran en “recanate”
Lo mejor de Rusia en HD Los mejores partidos en HD. Desde $479 al mes x 2 meses
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$"
Escribir una programa que reciba una cadena ingresada por teclado, terminada en ENTER. Luego que elimine todos los caracteres que no son dígitos, 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
Escribir un programa que tome una cadena que representa un número decimal 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
Escribir un programa que tome tres cadenas, la primera y la tercera representan un número y la segunda una operación, por ejemplo: “329”, “-“, “21” e imprima 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_UNS 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: $"
Escribir un programa que imprima 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
Escribir un programa que ordene un vector de mayor a menor.
name "arreglo-mayor" org 100h mov cx, 8 bucle1: mov c, cx mov bx, cx mov cx, 9 bucle2: mov si, cx mov ah, v[si-1] cmp ah,v[bx-1] jnge seguir ;Si mov dh, v[bx-1] mov dl, v[si-1] mov v[bx-1], dl mov v[si-1], dh seguir: loop bucle2
v[8] < v[7] no hacer nada, sino: ;Copiar v[7] en dh ;Copiar v[8] en dl ;Copiar dl en v[7] ;Copiar dh en v[8]
mov cx, c loop bucle1 ret v db 2,32,64,32,98,12,5,21,91 c dw 0
Escribir un programa que halle el MCM Y MCD
; 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
Escribir un programa 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, mov al, mov ah, int 10h
cx color ;AL = pixel color 0ch ;Change color for a single pixel ;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: ret color db 1
Escribir un programa que lea un archivo y cuente cuantas palabras terminan 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
45 (//m.addthis.com/live/redirect/? url=mailto%3A%3Fbody%3Dhttps%253A%252F%252Fwww.programacion.com.py%252Fescritorio%252Fensamblador%252Fejerciciosresueltos-en-ensamblador8086%26subject%3DEjercicios%2520resueltos%2520en%2520Ensamblador%25208086&uid=5a2cb17c6f06a5&pub=ra513297721cbba692&rev=v8.3.10-wp&per=undened&pco=tbx32-300)
En: Ensamblador (https://www.programacion.com.py/categoria/escritorio/ensamblador) 8086 (https://www.programacion.com.py/tag/8086) asm (https://www.programacion.com.py/tag/asm) ensamblador (https://www.programacion.com.py/tag/ensamblador-2)
Acerca del autor: Rodrigo Paszniuk (http://www.rodrigopaszniuk.com) Ingeniero Informático, amante de la tecnología, la música, el ciclismo y aprender cosas nuevas.
Posts Relacionados
(https://www.programacion.com.py/escritorio/ensamblador/ejemplos-de-programas-en-ensamblador-
8086) Ejemplos de programas en Ensamblador 8086
(https://www.programacion.com.py/escritorio/ensamblador/introduccion-al-lenguaje-ensamblador)
Introducción al lenguaje Ensamblador Siguiente Post (https://www.programacion.com.py/web/php/app-multilenguaje-en-yii) Anterior Post (https://www.programacion.com.py/web/php/temas-en-yii) →
←
Forget Bitcoin, Sweden Will Make Crypto Investors Rich When the name of Sweden's cryptocurrency is released many people will become millionaires practically overnight
Learn More Sponsored by Kryptonex
Report ad
3 Comentarios Recomendar
Programación Paraguay
1 Iniciar sesión
Mejores primero
⤤ Compartir
Unite a la discusión... INICIA SESIÓN CON
O REGISTRATE EN DISQUS ?
Nombre Rodrigo Amezcua hace 12 días
⚑
Muy bueno, como seria el de ordenar los numeros de mayor a menor pero que te los pida en pantalla y que los muestre en pantalla? Responder
Pilar Rius Hernández hace 3 meses
⚑
Gracias por compartir Rodrigo... Responder
Rodrigo Paszniuk > Pilar Rius Hernández hace 3 meses
Denada, me alegro que te sirvió :)
⚑
espon er
✉ Suscribirse d Agregá Disqus a tu sitioAdd DisqusAñadir
Privacidad
Mamá Millonaria De Mexico City Cuenta La Historia De Cómo Se Gana $9100/hr Desde Casa
Learn More Sponsored by Daily News
Report ad
-20%
-61%
-46%
-68%
-57%
-64%
SEGU NOS EN FACEBOOK
Programación Paraguay Me gusta esta página
431 Me gusta
Sé el primero de tus amigos en indicar que te gusta esto.
Programación Paraguay hace aproximadamente 9 meses
Nuevo manual liberado, con el mismo van a poder aprender lo básico de Swift
Manual básico de Swift 3 Este manual es ideal para a prender a programar c… WWW.PROGRAMACION.COM.PY
LOS MÁS VISTOS Ejercicios resueltos en Ensamblador 8086 (https://www.programacion.com.py/escritorio/ensamblador/ejerciciosresueltos-en-ensamblador-8086) Ejemplos de programas en Ensamblador 8086 (https://www.programacion.com.py/escritorio/ensamblador/ejemplos-deprogramas-en-ensamblador-8086) ARREGLOS Y CADENAS en C++ (https://www.programacion.com.py/escritorio/c/arreglos-y-cadenas-en-c) Arboles en C++ (https://www.programacion.com.py/escritorio/c/arboles-en-c) Pilas en C++ (https://www.programacion.com.py/escritorio/c/pilas-en-c)
GITHUB
(https://github.com/ProgramacionComPy)
-20%
-64%
-46%
-61%
-38%
-68%
ACERCA DE Programacion.com (http://Programacion.com).py es un sitio web donde podrás encontrar recursos y documentación de distintos lenguajes de programación.
ENTRADAS RECIENTES Manual básico de Swift 3 (https://www.programacion.com.py/manuales/manual-basico-de-swift-3) Estructuras y Protocolos en Swift 3 (https://www.programacion.com.py/varios/swift/estructuras-y-protocolos-en-swift-3) Tuplas y Enumeraciones en Swift 3 (https://www.programacion.com.py/varios/swift/tuplas-y-enumeraciones-en-swift-3) Clases en Swift 3 (https://www.programacion.com.py/varios/swift/clases-en-swift-3) Funciones en Swift 3 (https://www.programacion.com.py/varios/swift/funciones-en-swift-3)
ETIQUETAS
android (https://www.programacion.com.py/tag/android-2) angularjs (https://www.programacion.com.py/tag/angularjs) c (https://www.programacion.com.py/tag/c-3) c++ (https://www.programacion.com.py/tag/c-2) cadenas (https://www.programacion.com.py/tag/cadenas) CentOS
(https://www.programacion.com.py/tag/centos) delphi
(https://www.programacion.com.py/tag/delphi-2) ensamblador (https://www.programacion.com.py/tag/ensamblador-2) express (https://www.programacion.com.py/tag/express) Express.js
(https://www.programacion.com.py/tag/express-js) fedora (https://www.programacion.com.py/tag/fedora) framework (https://www.programacion.com.py/tag/framework) funciones (https://www.programacion.com.py/tag/funciones) gii (https://www.programacion.com.py/tag/gii) google
(https://www.programacion.com.py/tag/google) hibernate
Java (https://www.programacion.com.py/tag/java-escritorio) java ee (https://www.programacion.com.py/tag/hibernate) HTML5 (https://www.programacion.com.py/tag/html5)
(https://www.programacion.com.py/tag/java-ee) Javascript (https://www.programacion.com.py/tag/javascript-2) jsp
linux (https://www.programacion.com.py/tag/linux) maven (https://www.programacion.com.py/tag/jsp)
(https://www.programacion.com.py/tag/maven) MONGODB (https://www.programacion.com.py/tag/mongodb) mvc
(https://www.programacion.com.py/tag/mvc) mysql (https://www.programacion.com.py/tag/mysql) Node.js (https://www.programacion.com.py/tag/node-js) nodejs (https://www.programacion.com.py/tag/nodejs) phonegap
php (https://www.programacion.com.py/tag/php-2) PostgreSQL (https://www.programacion.com.py/tag/phonegap-2)
(https://www.programacion.com.py/tag/postgresql) rails (https://www.programacion.com.py/tag/rails) red hat (https://www.programacion.com.py/tag/red-hat) reportes (https://www.programacion.com.py/tag/reportes) rest
(https://www.programacion.com.py/tag/ror-2) ruby (https://www.programacion.com.py/tag/ruby-2) soap (https://www.programacion.com.py/tag/soap) sockets (https://www.programacion.com.py/tag/sockets) sql server (https://www.programacion.com.py/tag/sql-server) Swift (https://www.programacion.com.py/tag/swift) ubuntu (https://www.programacion.com.py/tag/ubuntu) (https://www.programacion.com.py/tag/rest) ror
web service (https://www.programacion.com.py/tag/web-service) windows (https://www.programacion.com.py/tag/windows)
Yii
(https://www.programacion.com.py/tag/yii) Tecnologia (https://www.tecnologia.com.py) StiloGames (https://www.stilogames.com) Frases 480 (https://www.frases480.com/) © 2018 PROGRAMACION.COM (http://PROGRAMACION.COM).PY - Design By Rodrigo Paszniuk (http://www.rodrigopaszniuk.com)
(https://www.facebook.com/pages/Programacioncompy/170660109749450) (https://twitter.com/ProgComPy) () () (https://www.programacion.com.py/contactenos) (https://www.programacion.com.py/feed)