Vous êtes sur la page 1sur 9

Emular el siguiente código y escribir comentarios sobre el funcionamiento del código,

averiguar las funciones de ciertas interrupciones y adjuntar la captura de pantalla del


ejercicio funcionando.
Ejercicio 1: Escribir un código que verifique si dos cadenas son iguales

org 100h instrucción de inicio


comienzo:
mov si, x ;
mov al, msg2[si] poner la dirección de si en al.
cmp msg[si], al compara las letras de los dos mensajes y si una no coincide,
fin del programa
jne fin: saltar a fin si no coincide.
cmp msg[si], "$" si es el fin de la cadena mandar a final, pongo un carácter
diferente para decirle a mi programa que llego al final del
mensaje
jz final: saltar a fin si coincide.
inc x incrementar x para seguir recorriéndola palabra.
loop comienzo bucle principal para recorrer palabra, repitiéndose esta acción
hasta que el contador sea cero.
final:
mov dx, offset msg3 copiar el mensaje msg3 a dx
mov ah, 9 preparar ah con 9 para la interrupción de int.
int 21h ;la 21h es un interrupción para imprimir una cadena de caracteres
fin:
ret
msg db "hello world $" declaración de la variable msg.
msg2 db "hello world $" declaración de la variable msg2 y el $ es para señalar el final
de la cadena.
msg3 db "Son iguales $" declaración de la variable msg3 y el $ es para señalar el final
de la cadena.
x dw 0 va hacer mi contador porqué necesito comparar

1
Ejercicio 2: Escribir un código que verifique 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 instrucción de inicio


mov si, 0 ponemos si en 0

comienzo:
mov al, msg2[0] copia la primera letra de la palabra a la dirección de
memoria al
cmp msg[si],"$" cuando encuentre el carácter $ sabrá que es el final de
la cadena para mandar al final
jz evalúa solo un bit del registro de estado y salta si el
valor es cero
cmp msg[si], al compara la primera letra de la cadena de la dirección al
jne salto condicional, si la condición es ≠
mov di, 1 poner en 1 di

di comprobar:
mov al, msg2[di] copia la siguiente letra de la palabra a la dirección de
memoria al
mov bx, di
cmp msg[si+bx], al posición de la letra + di, comparar con la cadena
jne si no coincide el carácter mandar a seguir
inc di incremento de di y guarda el resultado en el mismo
operando
cmp msg2[di],"$" si es el fin de la cadena y el programa llego hasta esta
línea, quiere decir que la cadena es parte de la palabra.
jz evalúa solo un bit del registro de estado y salta si el
valor es cero
loop comprobar bucle para recorrer cadena

seguir:
inc si incremento de si
loop comienzo Bucle principal para recorrer

palabra resultado:
mov dx, offset msg3 copiar msg3 a la dirección dx
mov ah, 9 preparar ah con 9 para la interrupción 21h
int 21h mostrar contenido en dx

final:
ret
msg db "Hola Mundo$" declaración de la variable msg
msg2 db "ola$" declaración de la variable msg2
msg3 db "Si es subcadena$" declaración de la variable msg3

2
Ejercicio 3: Escribir un código que verifique que todos 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 encuentran en “recanate”

org 100h instrucción de inicio


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] poner la dirección de di en al.
cmp msg[si], al comparar msg con su cada posición 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 encontró coincidencia,
entonces ya termina el programa
jz final ; saltar al final
loop comprobar ; bucle para recorrer el programa
seguir:
inc si incrementar 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 interrupción 21h
int 21h mostrar contenido en dx
final:
ret

3
msg db "cerro$" declaración de la variable msg y el $ es para señalar el
final de la cadena
msg2 db "recanate$" declaración de la variable msg2 y el $ es para señalar el
final de la cadena
msg3 db "Si se encuentran todos los caracteres$" declaración de la variable msg3 y el $ es
para señalar el final de la cadena

Ejercicio 4: Escribir un 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 instrucción de inicio


mov si, 0 ponemos si en 0

lectura:
mov ah,1 ponemos ah en 1
int 21h mostrar contenido en dx
cmp al,13 comparar el valor ingresado con 13, si es igual
ir al resultado
jz salto condicional, si la condición es =
cmp al, 57 comparar el valor ingresado con 57, si es
mayor ir al final
ja fin3 salto condicional, si la condición es >
cmp al,47 compara el valor con 47, si no es mayor ir a
fin3
jng fin3 salto condicional, si la condición es <
mov bx[si], al si es un digito entonces guardo en bx
inc si incrementar si

4
fin3
jmp Realiza un salto incondicional a la dirección
especificada

resultado:
mov ah,00h limpiar la pantalla
mov al,03h modo de texto 80x25x16
int 10h ingreso de 10h
mov bx[si], "$" si es el fin de la cadena
mov dx, offset bx obtener la dirección de bx y mover a dx
mov ah, 9 preparar ah con 9 para la interrupción 21h
int 21h mostrar contenido en dx y terminar el
programa
ret

5
Ejercicio 5: Escribir un programa que tome una cadena que representa un número decimal
y escriba su equivalente
Octal

org 100h instrucción de inicio


mov si, 0 mover 0 a si
mov al, 0 mover 0 a al
cadAnum: función cadAnum
cmp cad[si], "$" comprar cad con “$”
jz seguir saltar a seguir si es igual a cero
mov bl, 10 mover 10 a bl
mul bl multiplicar a bl
sub cad[si], '0' restar 0 de cad
add al, cad[si] sumar cad a al
inc si incrementar si
loop cadAnum bucle cadanum
seguir: función seguir
mov cx, si mover si a cx
mov si, 0 mover 0 a si
mov bl, 8 mover 8 a bl
pasar: function pasar
div bl dividir bl
mov oct[si], ah mover ah a oct
inc si incrementar si
loop pasar bucle pasar
fina: función fina
cmp ah, 0 comprar o con ah
jnz final saltar a final si no es cero
mov oct[si], al mover al a oct
final: función final
;mov dx, offset res comentario
;mov ah, 9 comentario
;int 21h comentario
Ret retorno
cad db "64$" variable de bit cad
oct db 0 variable de bit oct

6
Ejercicio 6: 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 del programa


include 'emu8086.inc' incluye la librería emu8086
; DEFINE_SCAN_NUM define escanear número
; DEFINE_PRINT_STRING define imprimir cadena
DEFINE_PRINT_NUM define imprimir numero
DEFINE_PRINT_NUM_UNS define imprimir numero sin signo
mov si, 0 mover 0 a si
mov al, 0 mover 0 a al
cadAnum: función cadAnum
cmp cad1[si], "$" comparar cad1 con $
jz seguir si es igual a cero saltar a seguir
mov bl, 10 mover 0 a bl
mul bl multiplicar a bl
sub cad1[si], '0' restar 0 a cad1
add al, cad1[si] sumar cad1 a al
inc si incrementar si
loop cadAnum bucle cadAnum
seguir: función seguir
mov aux1, al mover al a aux1
mov si, 0 mover 0 a si
mov al, 0 mover 0 a al
cadAnum2: cadAnum2 función
cmp cad3[si], "$" comprar cad3 con $
jz seguir2 saltar a seguir2 si es igual a cero
mov bl, 10 mover 10 a bl
mul bl multiplicar bl
sub cad3[si], '0' restar 0 de cad3

7
add al, cad3[si] sumar cad3 a al
inc si incrementar si
loop cadAnum2 bucle cadAnum2
seguir2: Función seguir2
mov bl, al mover al a bl
mov al, aux1 mover aux1 a al
cmp cad2, "-" comprar cad2 con -
jz resta saltar a resta si es igual a cero
cmp cad2, "+" comprar cad2 con +
jz suma saltar a suma si es igual a cero
cmp cad2, "*" comprar cad2 con *
jz multi saltar a multi si es igual a cero
cmp cad2, "/" comprar cad2 con /
jz divi saltar a divi si es igual a cero
resta: función resta
sub al, bl restar bl de al
jmp fin saltar al final
suma: función suma
add al, bl sumar bl a al
jmp fin saltar al final
multi: función multi
mul bl multiplicar bl
jmp fin saltar al final
divi: función división
div bl dividir bl
jmp fin saltar al final
fin: función fin
mov bx, ax mover ax a bx
mov ah,09 mover 09 a ah

lea dx,msg poner msg en dx


int 21h interrupción para imprimir
mov ax, bx mover bx a ax
call PRINT_NUM llamar a imprimir numero
ret volver al inicio
cad1 db "10$" variable de bit cad1=10
cad2 db "-" variable de bit cad2=-
cad3 db "2$" variable de bit cad3=2
aux1 db ? variable de bit aux=?
aux2 dw ? variable de letra aux2=?
msg dw "El resultado es: $" variable de letras msg= el resulta es

8
9