0% encontró este documento útil (0 votos)
151 vistas39 páginas

Guía de Ejercicios en Lenguaje de Máquina

El documento presenta 5 ejercicios de programación en lenguaje de máquina. Los ejercicios piden desarrollar programas sencillos para realizar tareas como pedir datos de entrada, mover valores a registros y mostrarlos, concatenar números y analizar el efecto de agregar caracteres al final de cadenas. Los 6 estudiantes son responsables de desarrollar y probar las soluciones propuestas para cada ejercicio.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
151 vistas39 páginas

Guía de Ejercicios en Lenguaje de Máquina

El documento presenta 5 ejercicios de programación en lenguaje de máquina. Los ejercicios piden desarrollar programas sencillos para realizar tareas como pedir datos de entrada, mover valores a registros y mostrarlos, concatenar números y analizar el efecto de agregar caracteres al final de cadenas. Los 6 estudiantes son responsables de desarrollar y probar las soluciones propuestas para cada ejercicio.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

FACULTAD DE INFORMÁTICA Y CIENCIAS APLICADAS

ESCUELA DE CIENCIAS APLICADAS

Asignatura: Lenguaje de Máquina


Sección: 01

Docente: Juan José Santos Escobar

INTEGRANTES:

Chicas Navarrete Ernesto Jose 25-0696-2020


García Arévalo Nelson Jeovani 25-0061-2016
Martínez Alas, José Alexander 25-1225-2019
Martínez Sánchez Marvin Jesé 25-0600-2019
Medina Maradiaga William Alexander 25-2298-2020
Sánchez Ramos Daniela Melissa 25-1263-2020

NOMBRE DEL EQUIPO: LMGRUP

Tema: Primera guía de ejercicios

FECHA DE ENTREGA: 23/02/2023


Ejercicio 1: Hacer un programa que pida un número desde consola usando el
procedimiento READDEC, luego muestre un mensaje con el número que ha
leído.
Ejemplo:
INGRESE UN NUMERO: 25
USTED INGRESO EL NUMERO: 25

Title Ejercicio1 <U1_G1.Asm>


;@Authors:
;Chicas Navarrete, Ernesto José
;García Arévalo, Nelson Jeovani
;Martinez Alas, José Alexander
;Martinez Sánchez, Marvin Jesé
;Medina Maradiaga, William Alexander
;Sánchez Ramos, Daniela Melissa
;@Group : LMGRUP
;@Section: 01
;@Country: El Salvador, Centro America

COMMENT $
Hacer un programa que pida un número desde consola usando el
procedimiento READDEC, luego muestre un mensaje con el número que ha
leído.

Ejemplo:
INGRESE UN NUMERO: 25
USTED INGRESO EL NUMERO: 25
$

INCLUDE Irvine32.Inc

.data
;Variables
msgIn byte "Ingrese un numero: ",0
msgOut byte "Usted ingreso el numero: ",0
num byte ?

.code
MAIN PROC
;Intrucciones

;Solicitamos el ingreso del numero


mov edx, offset msgIn
call writeString
call crlf

;Capturamos y asignamos el valor ingresado


mov eax,0
call readdec
mov num,al
call crlf

;Mostramos el msgOut + número ingresado


mov edx, offset msgOut
call writeString
call crlf
call writeDec
call crlf

call crlf
call WaitMsg ;Espera que presionen <ENTER>

Exit ;Termina el programa o sale al sistema operativo


MAIN ENDP
;Aqui se insertan los procedimientos adicionales
END MAIN

EJECUCION
Ejercicio 2: Hacer un programa que en la sección de datos tenga
tres identificadores de memoria (VARIABLES) llamados: NOMBRE,
CARNET Y CARRERA todos de tipo BYTE y que luego los muestre en
consola usando WRITESTRING. Llenar datos desde teclado.

Title Ejercicio2 <U1_G1.Asm>


;@Authors:
;Chicas Navarrete, Ernesto José
;García Arévalo, Nelson Jeovani
;Martinez Alas, José Alexander
;Martinez Sánchez, Marvin Jesé
;Medina Maradiaga, William Alexander
;Sánchez Ramos, Daniela Melissa
;@Group : LMGRUP
;@Section: 01
;@Country: El Salvador, Centro America

COMMENT $
Hacer un programa que en la sección de datos tenga tres
identificadores de memoria (VARIABLES) llamados:
NOMBRE, CARNET Y CARRERA todos de tipo BYTE y que luego los muestre
en consola usando WRITESTRING. Llenar datos desde teclado.
$

INCLUDE Irvine32.Inc

.data
;Variables
nombre byte "Nombre: GRUPO ***LMGRUP***",0
carnet byte "Carnet: 25-0000-2023",0
carrera byte "Carrera: Ingenieria en sistemas y computacion",0

.code
MAIN PROC
;Intrucciones

;Mostramos datos de variables


mov edx, offset nombre
call writeString
call crlf

mov edx, offset carnet


call writeString
call crlf

mov edx, offset carrera


call writeString
call crlf

call crlf
call WaitMsg ;Espera que presionen <ENTER>

Exit ;Termina el programa o sale al sistema operativo


MAIN ENDP
;Aqui se insertan los procedimientos adicionales
END MAIN

Ejercicio 3: Hacer un programa en assembler que mueva cantidades a los


registros de propósito general y usando el procedimiento DUMPREGS muestre
en consola el contenido de los registros. Luego usando WRITEBIN muestre el
contenido de cada uno de ellos en binario.

Title Ejercicio3 <U1_G1.Asm>


;@Authors:
;Chicas Navarrete, Ernesto José
;García Arévalo, Nelson Jeovani
;Martinez Alas, José Alexander
;Martinez Sánchez, Marvin Jesé
;Medina Maradiaga, William Alexander
;Sánchez Ramos, Daniela Melissa
;@Group : LMGRUP
;@Section: 01
;@Country: El Salvador, Centro America

COMMENT $
Hacer un programa en assembler que mueva cantidades a los
registros de propósito general
y usando el procedimiento DUMPREGS muestre en consola el
contenido de los registros.
Luego usando WRITEBIN muestre el contenido de cada uno de ellos
en binario.
$

INCLUDE Irvine32.Inc

.data
;Variables
msgREGISTROSINICIALES byte "Revisemos los valores iniciales en
regitros: ",0
msgDEFINIENDOVALORES byte "Definamos los valores a mover: ",0
msgEAX byte "El valor definido en registro EAX: ",0
msgEBX byte "El valor definido en registro EBX: ",0
msgECX byte "El valor definido en registro ECX: ",0
msgEDX byte "El valor definido en registro EDX: ",0
msgREGISTROS byte "Comprobando nuevos datos movidos a registros:
",0
msgREGISTROSBINARIOS byte "Comprobando valores recien movidos,
ahora en formato BINARIO: ",0

.code
MAIN PROC
;Intrucciones
;Se muestran valores iniciales en registros
mov edx, offset msgREGISTROSINICIALES
call writeString
call crlf
call crlf
call dumpRegs
call crlf

;Se definen valores a almacenar en registros y se muestran en HEX


mov edx, offset msgDEFINIENDOVALORES
call writeString
call crlf
call crlf

mov edx, offset msgEAX


call writeString
mov eax, 5
call writeHex
call crlf

mov edx, offset msgEBX


call writeString
mov eax, 10
call writeHex
call crlf

mov edx, offset msgECX


call writeString
mov eax, 15
call writeHex
call crlf

mov edx, offset msgEDX


call writeString
mov eax, 20
call writeHex
call crlf

;Se mueven valores y se muestran registros


call crlf
mov edx, offset msgREGISTROS
call writeString
call crlf
mov eax, 5
mov ebx, 10
mov ecx, 15
mov edx, 20
call dumpRegs
call crlf

;Mostrando valores convertidos a binario


mov edx, offset msgREGISTROSBINARIOS
call writeString
call crlf
call crlf

call writeBin
call crlf

mov eax,ebx
call writeBin
call crlf

mov eax,ecx
call writeBin
call crlf

mov eax,edx
call writeBin
call crlf
call WaitMsg ;Espera que presionen <ENTER>

Exit ;Termina el programa o sale al sistema operativo


MAIN ENDP
;Aqui se insertan los procedimientos adicionales
END MAIN

EJECUCION
Ejercicio 4: Hacer un programa en assembler con la siguiente sección de datos:
.DATA
M1 BYTE " Efecto del cero"
M2 BYTE " en el procedimiento"
M3 BYTE " "writestring de la biblioteca",0
En la sección de código y usando el procedimiento WRITESTRING mostrar el
contenido de M1. Después de ver el resultado de esta operación, agregar al
final de M2 y M3 un cero. Ahora repetir la operación anterior de mostrar M1 de
nuevo.

Title Ejercicio4 <U1_G1.Asm>


;@Authors:
;Chicas Navarrete, Ernesto José
;García Arévalo, Nelson Jeovani
;Martinez Alas, José Alexander
;Martinez Sánchez, Marvin Jesé
;Medina Maradiaga, William Alexander
;Sánchez Ramos, Daniela Melissa
;@Group : LMGRUP
;@Section: 01
;@Country: El Salvador, Centro America

COMMENT $
Hacer un programa en assembler con la siguiente sección de datos:
.DATA
M1 BYTE " Efecto del cero"
M2 BYTE " en el procedimiento"
M3 BYTE " writestring de la biblioteca",0

En la sección de código y usando el procedimiento WRITESTRING


mostrar el contenido de M1.
Después de ver el resultado de esta operación, agregar al final de
M2 y M3 un cero.
Ahora repetir la operación anterior de mostrar M1 de nuevo.
$

INCLUDE Irvine32.Inc

.data
;Variables
msg1 byte "Mostrando contenido de M1 inicial: ",0
msg2 byte "Mostrando contenido agregando cero al final de cada
variable: ",0
;Para operacion inicial
M1 byte " Efecto del cero"
M2 byte " en el procedimiento"
M3 byte " writestring de la biblioteca",0
;Para segunda operacion
M1_2 byte " Efecto del cero", 0
M2_2 byte " en el procedimiento",0
M3_2 byte " writestring de la biblioteca",0

.code
MAIN PROC
;Intrucciones
;Mostrando contenido inicial
mov edx, offset msg1
call writeString
call crlf
call crlf
mov edx, offset M1
call writeString
call crlf

;Mostrando contenido agregando cero al final de cada variable


call crlf
mov edx, offset msg2
call writeString
call crlf
call crlf
mov edx, offset M1_2
call writeString
call crlf
call WaitMsg ;Espera que presionen <ENTER>

Exit ;Termina el programa o sale al sistema operativo


MAIN ENDP
;Aqui se insertan los procedimientos adicionales
END MAIN

EJECUCION
Ejercicio 5: Hacer un programa que pida dos números por consola y los
muestre unidos, quiere decir concatenados.
Ejemplo, si entro 15 y luego 89 la consola debe de mostrar 1589.

Title Ejercicio5 <U1_G1.Asm>


;@Authors:
;Chicas Navarrete, Ernesto José
;García Arévalo, Nelson Jeovani
;Martinez Alas, José Alexander
;Martinez Sánchez, Marvin Jesé
;Medina Maradiaga, William Alexander
;Sánchez Ramos, Daniela Melissa
;@Group : LMGRUP
;@Section: 01
;@Country: El Salvador, Centro America

COMMENT $
Hacer un programa que pida dos números por consola y los muestre unidos, quiere
decir concatenados.
Ejemplo, si entro 15 y luego 89 la consola debe de mostrar 1589.
$

INCLUDE Irvine32.Inc

.data
;Variables
msgIn1 byte "Ingrese el primer numero: ",0
msgIn2 byte "Ingrese el segundo numero: ",0
msgOut byte "Usted ingreso el numero (se muestran concatenados): ",0
num1 byte ?
num2 byte ?

.code
MAIN PROC
;Intrucciones

;Limpiamos registros que utilizaremos para guardar datos


mov eax,0
mov ebx,0
mov ecx,0

;Solicitando el primer número


mov edx, offset msgIn1
call writeString
call crlf

;Capturando el primer numero y almacenando en registro


call readdec
mov ebx,eax
call crlf

;Solicitando el segundo número


mov edx, offset msgIn2
call writeString
call crlf

;Capturando el segundo numero y almacenando en registro


call readdec
mov ecx,eax
call crlf

;Mostramos el msgOut + números ingresados-concatenados


mov edx, offset msgOut
call writeString
call crlf
mov eax, ebx
call writeDec
mov eax, ecx
call writeDec
call crlf

call crlf
call WaitMsg ;Espera que presionen <ENTER>

Exit ;Termina el programa o sale al sistema operativo


MAIN ENDP
;Aqui se insertan los procedimientos adicionales
END MAIN

EJECUCION
Ejercicio 6: Hacer un programa que pida 2 números de tipo byte de forma
secuencial y los sume.

Title Ejercicio6 <U1_G1.Asm>


;@Authors:
;Chicas Navarrete, Ernesto José
;García Arévalo, Nelson Jeovani
;Martinez Alas, José Alexander
;Martinez Sánchez, Marvin Jesé
;Medina Maradiaga, William Alexander
;Sánchez Ramos, Daniela Melissa
;@Group : LMGRUP
;@Section: 01
;@Country: El Salvador, Centro America

COMMENT $
Hacer un programa que pida 2 números de tipo byte de forma
secuencial y los sume.
$

INCLUDE Irvine32.Inc

.data
;Variables
msgIn byte "Ingrese numero entre 0 y 255 (BYTE) a sumar: ",0
msgError byte "ERROR: Numero fuera de rango BYTE, intente de nuevo
xd ",0
msgOut byte "La SUMA de los numeros ingresados es: ",0

.code
MAIN PROC
;Intrucciones

;Limpiamos registros que utilizaremos para guardar datos


mov eax,0
mov ebx,0

;Estructura de control para validar datos ingresados tipo BYTE y


SUMAR
mov ecx,0
Repeticion:
.if (ecx < 2)
mov edx, offset msgIn
call writestring
call readdec
.if (eax > 0 && eax < 256)
add ebx,eax
inc ecx
.else
mov edx, offset msgError
call writestring
.endif
call crlf
jmp Repeticion
.endif

;Mensaje de salida + sumatoria


mov edx, offset msgOut
call writeString
call crlf
mov eax, ebx
call writeInt
call crlf

call crlf
call WaitMsg ;Espera que presionen <ENTER>

Exit ;Termina el programa o sale al sistema operativo


MAIN ENDP
;Aqui se insertan los procedimientos adicionales
END MAIN

EJECUCION
Ejercicio 7: Hacer un programa que pida 6 números de tipo word de forma
secuencial y los sume.

INCLUDE Irvine32.Inc

.data
;Variables
msgIn byte "Ingrese numero entre 0 y 65535 (WORD) a sumar: ",0
msgError byte "ERROR: Numero fuera de rango WORD, intente de nuevo xd ",0
msgOut byte "La SUMA de los numeros ingresados es: ",0

.code
MAIN PROC
;Intrucciones

;Limpiamos registros que utilizaremos para guardar datos


mov eax,0
mov ebx,0

;Estructura de control para validar datos ingresados tipo BYTE y SUMAR


mov ecx,0
Repeticion:
.if (ecx < 6)
mov edx, offset msgIn
call writestring
call readdec
.if (eax > 0 && eax < 65536)
add ebx,eax
inc ecx
.else
mov edx, offset msgError
call writestring
.endif
call crlf
jmp Repeticion
.endif

;Mensaje de salida + sumatoria


mov edx, offset msgOut
call writeString
call crlf
mov eax, ebx
call writeDec
call crlf

call crlf
call WaitMsg ;Espera que presionen <ENTER>

Exit ;Termina el programa o sale al sistema operativo


MAIN ENDP
;Aqui se insertan los procedimientos adicionales
END MAIN
EJECUCION

Ejercicio 8: Hacer un programa que pida 10 números de tipo dword de forma


secuencial y los sume.
Title Ejercicio11

Include Irvine32.Inc

.Data
; Poner aqui las variables a utilizar

cuenta DWORD ?

msg BYTE 'Ingrese un numero: ',0


msg2 BYTE 'La suma es: ',0
msg3 BYTE '++++++++++++ SUMA DWORD +++++++++++++',0
msgError BYTE 'Ingrese un numero en el rango DWORD',0

.Code
mov ecx,100 ; establece la cuenta del ciclo
Main Proc
Call ClrScr ; Limpia la Pantalla
;Limpiamos registros que utilizaremos para guardar datos
mov eax,0
mov ebx,0
mov edx, offset msg3
call writestring
call crlf
;Estructura de control para validar datos ingresados tipo WORD y SUMAR
mov ecx,0
Repeticion:
.if (ecx < 10)
mov edx, offset msg
call writestring
call readdec
.if (eax > 0 && eax < 65536)
add ebx,eax
inc ecx
.else
mov edx, offset msgError
call writestring
.endif
call crlf
jmp Repeticion
.endif
;Mensaje de salida + sumatoria
mov edx, offset msg2
call writeString

mov eax, ebx


call writeInt
call crlf
call WaitMsg ;Espera que presionen <ENTER>

Exit ; Termina el programa


Main EndP

End Main
Ejercicio 9: Hacer un programa que pida 10 números de tipo byte de forma
secuencial y los reste.

Title Ejercicio9 <U1_G1.Asm>


;@Authors:
;Chicas Navarrete, Ernesto José
;García Arévalo, Nelson Jeovani
;Martinez Alas, José Alexander
;Martinez Sánchez, Marvin Jesé
;Medina Maradiaga, William Alexander
;Sánchez Ramos, Daniela Melissa
;@Group : LMGRUP
;@Section: 01
;@Country: El Salvador, Centro America

COMMENT $
Hacer un programa que pida 10 números de tipo byte de forma
secuencial y los reste.
$

INCLUDE Irvine32.Inc

.data
;Variables
Datos sbyte 10 dup (?)
msgIn byte "Ingrese numero entre 0 y 255 (BYTE) a restar: ",0
msgError byte "ERROR: Numero fuera de rango DWORD, intente de nuevo
xd ",0
msgOut byte "La RESTA de los numeros ingresados es: ",0

.code
MAIN PROC
;Intrucciones

;Limpiamos registros que utilizaremos para guardar Datos


mov eax,0
mov ebx,0

;Lectura y asignación de valores1


Repeticion1:
mov edx, offset msgIn
call writestring
call readdec
.if (eax > 0 && eax <= 255)
mov Datos, al
.else
mov edx, offset msgError
call writestring
call crlf
jmp Repeticion1
.endif
call crlf

;Lectura y asignación de valores2


Repeticion2:
mov edx, offset msgIn
call writestring
call readdec
.if (eax > 0 && eax <= 255)
mov Datos+1, al
.else
mov edx, offset msgError
call writestring
call crlf
jmp Repeticion2
.endif
call crlf

;Lectura y asignación de valores3


Repeticion3:
mov edx, offset msgIn
call writestring
call readdec
.if (eax > 0 && eax <= 255)
mov Datos+2, al
.else
mov edx, offset msgError
call writestring
call crlf
jmp Repeticion3
.endif
call crlf

;Lectura y asignación de valores4


Repeticion4:
mov edx, offset msgIn
call writestring
call readdec
.if (eax > 0 && eax <= 255)
mov Datos+3, al
.else
mov edx, offset msgError
call writestring
call crlf
jmp Repeticion4
.endif
call crlf

;Lectura y asignación de valores5


Repeticion5:
mov edx, offset msgIn
call writestring
call readdec
.if (eax > 0 && eax <= 255)
mov Datos+4, al
.else
mov edx, offset msgError
call writestring
call crlf
jmp Repeticion5
.endif
call crlf

;Lectura y asignación de valores6


Repeticion6:
mov edx, offset msgIn
call writestring
call readdec
.if (eax > 0 && eax <= 255)
mov Datos+5, al
.else
mov edx, offset msgError
call writestring
call crlf
jmp Repeticion6
.endif
call crlf

;Lectura y asignación de valores7


Repeticion7:
mov edx, offset msgIn
call writestring
call readdec
.if (eax > 0 && eax <= 255)
mov Datos+6, al
.else
mov edx, offset msgError
call writestring
call crlf
jmp Repeticion7
.endif
call crlf

;Lectura y asignación de valores8


Repeticion8:
mov edx, offset msgIn
call writestring
call readdec
.if (eax > 0 && eax <= 255)
mov Datos+7, al
.else
mov edx, offset msgError
call writestring
call crlf
jmp Repeticion8
.endif
call crlf

;Lectura y asignación de valores9


Repeticion9:
mov edx, offset msgIn
call writestring
call readdec
.if (eax > 0 && eax <= 255)
mov Datos+8, al
.else
mov edx, offset msgError
call writestring
call crlf
jmp Repeticion9
.endif
call crlf

;Lectura y asignación de valores10


Repeticion10:
mov edx, offset msgIn
call writestring
call readdec
.if (eax > 0 && eax <= 255)
mov Datos+9, al
.else
mov edx, offset msgError
call writestring
call crlf
jmp Repeticion10
.endif
call crlf

;Mostras valores de arreglo


mov esi, offset Datos
mov ecx, lengthof Datos
mov ebx, type Datos
call dumpMem
call crlf

;Mensaje de salida + RESTA


mov edx, offset msgOut
call writeString
call crlf

mov ebx,0
mov bl, Datos
sub bl, Datos+1
sub bl, Datos+2
sub bl, Datos+3
sub bl, Datos+4
sub bl, Datos+5
sub bl, Datos+6
sub bl, Datos+7
sub bl, Datos+8
sub bl, Datos+9
mov eax, ebx
call writeInt
call crlf
call WaitMsg ;Espera que presionen <ENTER>

Exit ;Termina el programa o sale al sistema operativo


MAIN ENDP
;Aqui se insertan los procedimientos adicionales
END MAIN

EJECUCION
Ejercicio 10: Hacer un programa que pida 5 números de tipo word de forma
secuencial y los reste.

Title Ejercicio10 <U1_G1.Asm>


;@Authors:
;Chicas Navarrete, Ernesto José
;García Arévalo, Nelson Jeovani
;Martinez Alas, José Alexander
;Martinez Sánchez, Marvin Jesé
;Medina Maradiaga, William Alexander
;Sánchez Ramos, Daniela Melissa
;@Group : LMGRUP
;@Section: 01
;@Country: El Salvador, Centro America

COMMENT $
Hacer un programa que pida 5 números de tipo word de forma secuencial y los
reste.
$

INCLUDE Irvine32.Inc
.data
;Variables
Datos sword 5 dup (?)
msgIn byte "Ingrese numero entre 0 y 65535 (WORD) a restar: ",0
msgError byte "ERROR: Numero fuera de rango DWORD, intente de nuevo xd ",0
msgOut byte "La RESTA de los numeros ingresados es: ",0

.code
MAIN PROC
;Intrucciones

;Limpiamos registros que utilizaremos para guardar Datos


mov eax,0
mov ebx,0
;Lectura y asignación de valores1
Repeticion1:
mov edx, offset msgIn
call writestring
call readdec
.if (ax > 0 && ax <= 65535)
mov Datos, ax
.else
mov edx, offset msgError
call writestring
call crlf
jmp Repeticion1
.endif
call crlf
;Lectura y asignación de valores2
Repeticion2:
mov edx, offset msgIn
call writestring
call readdec
.if (ax > 0 && ax <= 65535)
mov Datos+2, ax
.else
mov edx, offset msgError
call writestring
call crlf
jmp Repeticion2
.endif
call crlf
;Lectura y asignación de valores3
Repeticion3:
mov edx, offset msgIn
call writestring
call readdec
.if (ax > 0 && ax <= 65535)
mov Datos+4, ax
.else
mov edx, offset msgError
call writestring
call crlf
jmp Repeticion3
.endif
call crlf
;Lectura y asignación de valores4
Repeticion4:
mov edx, offset msgIn
call writestring
call readdec
.if (ax > 0 && ax <= 65535)
mov Datos+6, ax
.else
mov edx, offset msgError
call writestring
call crlf
jmp Repeticion4
.endif
call crlf
;Lectura y asignación de valores5
Repeticion5:
mov edx, offset msgIn
call writestring
call readdec
.if (ax > 0 && ax <= 65535)
mov Datos+8, ax
.else
mov edx, offset msgError
call writestring
call crlf
jmp Repeticion5
.endif
call crlf
;Mostras valores de arreglo
mov esi, offset Datos
mov ecx, lengthof Datos
mov ebx, type Datos
call dumpMem
call crlf
;Mensaje de salida + RESTA
mov edx, offset msgOut
call writeString
call crlf
mov ebx,0
mov bx, Datos
sub bx, Datos+2
sub bx, Datos+4
sub bx, Datos+6
sub bx, Datos+8
mov eax, ebx
call writeInt
call crlf
call WaitMsg ;Espera que presionen <ENTER>

Exit ;Termina el programa o sale al sistema operativo


MAIN ENDP
;Aqui se insertan los procedimientos adicionales
END MAIN

EJECUCION
Ejercicio 11: Hacer un programa que pida 2 números de tipo dword de forma
secuencial y los reste.

Title Ejercicio11 <U1_G1.Asm>


;@Authors:
;Chicas Navarrete, Ernesto José
;García Arévalo, Nelson Jeovani
;Martinez Alas, José Alexander
;Martinez Sánchez, Marvin Jesé
;Medina Maradiaga, William Alexander
;Sánchez Ramos, Daniela Melissa
;@Group : LMGRUP
;@Section: 01
;@Country: El Salvador, Centro America

COMMENT $
Hacer un programa que pida 2 números de tipo dword de forma secuencial y los
reste.
$

INCLUDE Irvine32.Inc

.data
;Variables
Datos dword 2 dup (?)
msgIn byte "Ingrese numero entre 0 y 4294967295 (DWORD) a restar: ",0
msgError byte "ERROR: Numero fuera de rango DWORD, intente de nuevo xd ",0
msgOut byte "La RESTA de los numeros ingresados es: ",0

.code
MAIN PROC
;Intrucciones

;Limpiamos registros que utilizaremos para guardar Datos


mov eax,0
mov ebx,0

;Lectura y asignación de valores1


Repeticion1:
mov edx, offset msgIn
call writestring
call readdec
.if (eax > 0 && eax <= 4294967295)
mov Datos, eax
.else
mov edx, offset msgError
call writestring
call crlf
jmp Repeticion1
.endif
call crlf

;Lectura y asignación de valores2


Repeticion2:
mov edx, offset msgIn
call writestring
call readdec
.if (eax > 0 && eax <= 4294967295)
mov Datos+4, eax
.else
mov edx, offset msgError
call writestring
call crlf
jmp Repeticion2
.endif
call crlf

;Mostras valores de arreglo


mov esi, offset Datos
mov ecx, lengthof Datos
mov ebx, type Datos
call dumpMem
call crlf

;Mensaje de salida + RESTA


mov edx, offset msgOut
call writeString
call crlf
mov ebx,0
sub ebx, Datos
sub ebx, Datos+4
mov eax, ebx
call writeInt
call crlf
call WaitMsg ;Espera que presionen <ENTER>
Exit ;Termina el programa o sale al sistema operativo
MAIN ENDP
;Aqui se insertan los procedimientos adicionales
END MAIN
Ejercicio 12: Hacer un programa que pida 9 números de forma secuencial y
valide cada uno de los tamaños y almacénelos en un arreglo del tamaño
correspondiente y mostrar los diferentes arreglos.

Ejercicio 13: Dada la siguiente sección de datos evalué cual es el mayor y el


menor.
.DATA
Arreglo Word 15,5,7,10,20,30,11,96,45,1,22,6

Ejercicio 14: Hacer un programa que pida 5 números de forma secuencial y


evalué cual es el mayor y el menor.

Title ejercicio14
Include IRVINE32.INC
; Hacer un programa que pida 5 números de forma secuencial y evalué
;cual es el mayor y el menor
.Data
msg byte "El numero menor es: " ,0
msg2 byte "El numero mayor es: " , 0
mensaje byte "Digite el numero: ",0
arreglo word 5 dup (?)

numeroMaximo word ?
numeroMinimo word ?

.Code
Main Proc
mov edx, offset mensaje
call writestring
mov eax,0
call readdec
mov arreglo,ax

.if (ax>arreglo)
mov numeroMaximo,ax
.elseif (ax<arreglo)
mov numeroMinimo,ax
.endif
mov edx, offset mensaje
call writestring
call readdec
mov arreglo+2,ax

.if (ax>arreglo)
mov numeroMaximo,ax
.elseif (ax<arreglo)
mov numeroMinimo,ax
.endif

mov edx, offset mensaje


call writestring
call readdec
mov arreglo+4,ax
.if (ax>[arreglo+2])
mov numeroMaximo,ax
.elseif (ax<[arreglo+2])
mov numeroMinimo,ax
.endif

mov edx, offset mensaje


call writestring
call readdec
mov arreglo+6,ax

.if (ax>[arreglo+4])
mov numeroMaximo,ax
.elseif (ax<[arreglo+4])
mov numeroMinimo,ax
.endif

mov edx, offset mensaje


call writestring
call readdec
mov arreglo+8,ax

.if (ax>[arreglo+6])
mov numeroMaximo,ax
.elseif (ax<[arreglo+6])
mov numeroMinimo,ax
.endif

mov eax,0
mov ax,arreglo

;imprimir menor
mov edx, offset msg
call writestring
mov ax,0
mov ax, numeroMinimo
call writedec
call CrLf
;imprimir mayor
mov edx, offset msg2
call writestring
mov ax,0
mov ax, numeroMaximo
call writedec
Exit
Main EndP
END Main
Ejercicio 15: Hacer un programa que sume la sección de .DATA siguiente.
.DATA
N1 dword 20
N2 byte 20
N3 word 20
N4 byte 20
N5 dword 20
N6 dword 20
N7 word 20
N8 word 20
N9 byte 20

Title Ejercicio15 <U1_G1.Asm>


;@Authors:
;Chicas Navarrete, Ernesto José
;García Arévalo, Nelson Jeovani
;Martinez Alas, José Alexander
;Martinez Sánchez, Marvin Jesé
;Medina Maradiaga, William Alexander
;Sánchez Ramos, Daniela Melissa
;@Group : LMGRUP
;@Section: 01
;@Country: El Salvador, Centro America

COMMENT $
Hacer un programa que sume la sección de .DATA siguiente.
.DATA
N1 dword 20
N2 byte 20
N3 word 20
N4 byte 20
N5 dword 20
N6 dword 20
N7 word 20
N8 word 20
N9 byte 20
$
INCLUDE Irvine32.Inc

.data
;Variables
N1 dword 20
N2 byte 20
N3 word 20
N4 byte 20
N5 dword 20
N6 dword 20
N7 word 20
N8 word 20
N9 byte 20
msgOut byte "La SUMA de los numeros ingresados es: ",0
.code
MAIN PROC
mov edx, offset msgOut
call writeString
call crlf
mov eax,0
mov eax, N1
add al, N2
add ax, N3
add al, N4
add eax, N5
add eax, N6
add ax, N7
add ax, N8
add al, N9
call writeInt
call crlf
call WaitMsg ;Espera que presionen <ENTER>

Exit ;Termina el programa o sale al sistema operativo


MAIN ENDP
;Aqui se insertan los procedimientos adicionales
END MAIN
Ejercicio 16: Hacer un programa que valide el tamaño del número ingresado,
se debe ejecutar 3 veces.
Ejemplo:
INGRESE UN NUMERO: 25
USTED INGRESO EL NUMERO 25 RANGO DE BYTE

Title Ejercicio16 <U1_G1.Asm>


;@Authors:
;Chicas Navarrete, Ernesto José
;García Arévalo, Nelson Jeovani
;Martinez Alas, José Alexander
;Martinez Sánchez, Marvin Jesé
;Medina Maradiaga, William Alexander
;Sánchez Ramos, Daniela Melissa
;@Group : LMGRUP
;@Section: 01
;@Country: El Salvador, Centro America

COMMENT $
Hacer un programa que valide el tamaño del número
ingresado, se debe ejecutar 3 veces.
$

INCLUDE Irvine32.Inc

.data
;Variables
msgIn byte "Ingrese un numero: ",0
msgOut byte "Usted ingreso el numero: ",0
msgByte byte ", dentro del rango de BYTE",0
msgWord byte ", dentro del rango de WORD",0
msgDword byte ", dentro del rango de DWORD",0
msgError byte "ERROR: Numero fuera de rango, intente de
nuevo xd"

.code
MAIN PROC
;Intrucciones

;Limpiamos registros que utilizaremos para guardar datos


mov eax,0
mov ebx,0
;Estructura de control para validar datos ingresados
mov ecx,0
Repeticion:
.if (ecx < 3)
mov edx, offset msgIn
call writestring
call readdec
.if (eax > 0 && eax <= 255)
mov edx, offset msgOut
call writeString
call writeDec
mov edx, offset msgByte
call writeString
call crlf
inc ecx
.elseif (eax > 0 && eax <= 65535)
mov edx, offset msgOut
call writeString
call writeDec
mov edx, offset msgWord
call writeString
call crlf
inc ecx
.elseif (eax > 0 && eax <= 4294967295)
mov edx, offset msgOut
call writeString
call writeDec
mov edx, offset msgDword
call writeString
call crlf
inc ecx
.else
mov edx, offset msgError
call writestring
.endif
call crlf
jmp Repeticion
.endif
call crlf
call WaitMsg ;Espera que presionen <ENTER>
Exit ;Termina el programa o sale al sistema operativo
MAIN ENDP
END MAIN
Ejercicio 17: Hacer un programa que valide el ingreso según el número de
carnet y fecha de nacimiento, tomar como referencia el siguiente formato de
carnet: 2500002022 y fecha: 01012022; Mostrara el mensaje de
“BIENVENIDO A LENGUAJE DE MAQUINA” si los datos son correctos de lo
contrario mostrar “LO SENTIMOS, DATOS NO REGISTRADOS”.

Title Ejercicio17 <U1_G1.Asm>


;@Authors:
;Chicas Navarrete, Ernesto José
;García Arévalo, Nelson Jeovani
;Martinez Alas, José Alexander
;Martinez Sánchez, Marvin Jesé
;Medina Maradiaga, William Alexander
;Sánchez Ramos, Daniela Melissa
;@Group : LMGRUP
;@Section: 01
;@Country: El Salvador, Centro America

COMMENT $
Ejercicio 17: Hacer un programa que valide el ingreso según el
número de carnet y
fecha de nacimiento, tomar como referencia el siguiente formato de
carnet:
2500002022 y fecha: 01012022; Mostrara el mensaje de “BIENVENIDO A
LENGUAJE
DE MAQUINA” si los datos son correctos de lo contrario mostrar “LO
SENTIMOS,
DATOS NO REGISTRADOS”.
$
INCLUDE Irvine32.Inc

.data
;Variables
msgInCarnet byte "Ingrese su numero de Carnet: ",0
msgInFechaN byte "Ingrese su Fecha de nacimiento: ",0
msgOut byte "Bienvenido a Lenguaje de Maquina ***LMGRUP*** Ciclo 01-
2023 xd",0
msgError byte "ERROR: Lo sentimos, datos no registrados. xd"

.code
MAIN PROC
;Intrucciones

;Limpiamos registros que utilizaremos para guardar datos


mov eax,0
mov ebx,0
mov ecx,0

;Solicitamos datos
mov edx, offset msgInCarnet
call writestring
call crlf
call readdec
mov ebx,eax
call crlf

mov edx, offset msgInFechaN


call writestring
call crlf
call readdec
mov ecx,eax
call crlf

;Validamos datos ingresados para LOGIN


.if (ebx == 2500002023 && ecx == 01012023)
mov edx, offset msgOut
call writeString
call crlf

.else
mov edx, offset msgError
call writestring
call crlf
.endif
call crlf
call WaitMsg ;Espera que presionen <ENTER>

Exit ;Termina el programa o sale al sistema operativo


MAIN ENDP
END MAIN
Ejercicio 18: Hacer un programa que muestre el siguiente menú; cuando
ingrese a cada opción mostrar solo el mensaje de la acción que realizara y
terminara la ejecución.
*********MENU********
1- SUMA
2- RESTA
3- ALMACENAR CARNET
4- MOSTRAR DATOS
5- SALIR
**Seleccione una opción**

Title Ejercicio18 <U1_G1.Asm>


;@Authors:
;Chicas Navarrete, Ernesto José
;García Arévalo, Nelson Jeovani
;Martinez Alas, José Alexander
;Martinez Sánchez, Marvin Jesé
;Medina Maradiaga, William Alexander
;Sánchez Ramos, Daniela Melissa
;@Group : LMGRUP
;@Section: 01
;@Country: El Salvador, Centro America

INCLUDE Irvine32.Inc
.data
;Variables
menu byte "*********MENU********",0dh,0ah
byte "1- SUMA",0dh,0ah
byte "2- RESTA",0dh,0ah
byte "3- ALMACENAR CARNET",0dh,0ah
byte "4- MOSTRAR DATOS",0dh,0ah
byte "5- SALIR",0dh,0ah,0

msgIn byte "Ingrese el numero de la accion que desea


realizar: ",0
msgOut1 byte "ACCION A REALIZAR: SUMAR ",0
msgOut2 byte "ACCION A REALIZAR: RESTAR ",0
msgOut3 byte "ACCION A REALIZAR: ALMACENAR CARNET ",0
msgOut4 byte "ACCION A REALIZAR: MOSTRAR DATOS ",0
msgOut5 byte "ACCION A REALIZAR: SALIR xd ",0

msgError byte "ERROR: Numero fuera de rango, intente de


nuevo xd"

.code
MAIN PROC
;Intrucciones

;Limpiamos registros que utilizaremos para guardar datos


mov eax,0
mov ebx,0

;Estructura de control para validar datos ingresados


mov ecx,0

Repeticion:
.if (ecx == 0)
mov edx, offset menu
call writestring
call crlf
mov edx, offset msgIn
call writestring
call crlf

call readdec
call crlf

.if (eax == 1)
mov edx, offset msgOut1
call writestring
call crlf

.elseif (eax == 2)
mov edx, offset msgOut2
call writestring
call crlf

.elseif (eax == 3)
mov edx, offset msgOut3
call writestring
call crlf

.elseif (eax == 4)
mov edx, offset msgOut4
call writestring
call crlf

.elseif (eax == 5)
mov edx, offset msgOut5
call writestring
call crlf

inc ecx
.else
mov edx, offset msgError
call writestring
call crlf
.endif
call crlf
jmp Repeticion
.endif

call crlf
call WaitMsg ;Espera que presionen <ENTER>

Exit ;Termina el programa o sale al sistema operativo


MAIN ENDP
;Aqui se insertan los procedimientos adicionales
END MAIN
Ejercicio 19: Hacer un programa que usando LOOP imprima 5 veces el mensaje
“EN EL LAZO”.
Title Ejercicio19 <U1_G1.Asm>
;@Authors:
;Chicas Navarrete, Ernesto José
;García Arévalo, Nelson Jeovani
;Martinez Alas, José Alexander
;Martinez Sánchez, Marvin Jesé
;Medina Maradiaga, William Alexander
;Sánchez Ramos, Daniela Melissa
;@Group : LMGRUP
;@Section: 01
;@Country: El Salvador, Centro America
INCLUDE Irvine32.Inc
.data
;Variables
msgOut byte "EN EL LAZO ",0
.code
MAIN PROC
;Intrucciones
mov ecx,5
Repeticion:
mov edx, offset msgOut
call writestring
call crlf
call crlf
loop Repeticion
call crlf
call WaitMsg ;Espera que presionen <ENTER>
Exit ;Termina el programa o sale al sistema operativo
MAIN ENDP
;Aqui se insertan los procedimientos adicionales
END MAIN
Ejercicio 20: Hacer un programa que multiplique 5*10 haciendo sumas
sucesivas

Include Irvine32.Inc ;Plantilla a utilizar

.Data
; Poner aqui las variables a utilizar

num1 dword 5
num2 dword 10
msg byte "El resultado es: ",0
.Code
Main Proc
;Aqui se insertan las instrucciones ejecutables

mov edx,offset msg ;Almacenamos el mensaje en el edx


call writestring ;Mandamos a imprimir el mensaje

mov eax, 0 ;El registro me quede "vacio", servira como acumulador


mov ecx,num2 ;Contador para el loop
Repeticion: ;Creacion de la etiqueta
add eax, num1 ;añadir a eax el valor de 'num1=5'
loop Repeticion ;Hasta aqui se realizan las repeticiones
call writeInt ;Mostramos el valor resultante!
Call CrLf ; Hace un Salto de linea
Call WaitMsg ; Espera a que presionen <ENTER>
Exit ; Termina el programa, sale al sistema operativo
Main EndP

End Main ;Cierre global

También podría gustarte