elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  Ejercicio ensamblador
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ejercicio ensamblador  (Leído 17,407 veces)
juank2_7

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Ejercicio ensamblador
« en: 6 Diciembre 2016, 16:54 pm »

Compañeros hoy vengo a pedirles una gran ayuda, me están solicitando realizar el siguiente ejercicio, pero la verdad no tengo conocimiento alguno en ensamblador, de pronto si alguno de ustedes puede darme una mano, les agradecería.

• Realice el prototipo funcional en lenguaje Ensamblador, que incluya el siguiente menú de opciones:

MENÚ

1. Datos del autor.
2. Suma de dos números.
3. Resta de dos números.
4. Multiplicación de dos números.
5. División de dos números.
6. Validar si un número es positivo o negativo
7. Salir

• La opción para datos del autor (opción 1), debe imprimir en pantalla:

 Nombre del estudiante
 Nombre del colegio
 Fecha

• Las opciones 2, 3, 4 y 5 deben solicitar por teclado dos números de un dígito cada uno.

Mil gracias si pueden ayudarme.


En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Ejercicio ensamblador
« Respuesta #1 en: 6 Diciembre 2016, 17:03 pm »

no se hacen tareas se resuelven dudas... muestra tu código y tus avances...


En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
BlackM4ster


Desconectado Desconectado

Mensajes: 499


Error, el teclado no funciona. Pulse F1 para continuar


Ver Perfil WWW
Re: Ejercicio ensamblador
« Respuesta #2 en: 7 Diciembre 2016, 14:09 pm »

MENÚ

1. Datos del autor.

 :xD ;-) ;-)
En línea

- Pásate por mi web -
https://codeisc.com
david03

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: Ejercicio ensamblador
« Respuesta #3 en: 15 Mayo 2017, 23:04 pm »

compañero donde puedo encontrar el programa descrito al inicio por el compañero

Realice el prototipo funcional en lenguaje Ensamblador, que incluya el siguiente menú de opciones:

MENÚ

1. Datos del autor.
2. Suma de dos números.
3. Resta de dos números.
4. Multiplicación de dos números.
5. División de dos números.
6. Validar si un número es positivo o negativo
7. Salir

• La opción para datos del autor (opción 1), debe imprimir en pantalla:

 Nombre del estudiante
 Nombre del colegio
 Fecha

• Las opciones 2, 3, 4 y 5 deben solicitar por teclado dos números de un dígito cada uno.

Mil gracias si pueden ayudarme.
En línea

MCKSys Argentina
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.518


Diviértete crackeando, que para eso estamos!


Ver Perfil
Re: Ejercicio ensamblador
« Respuesta #4 en: 15 Mayo 2017, 23:34 pm »

no se hacen tareas se resuelven dudas... muestra tu código y tus avances...

Saludos!
En línea

MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."

david03

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: Ejercicio ensamblador
« Respuesta #5 en: 15 Mayo 2017, 23:42 pm »

no he podido realizar la validación y el salir me pueden ayudar por favor

6. Validar si un número es positivo o negativo
7. Salir


Código
  1. name: " PROTOTIPO FINAL"
  2. org 100h ; inicio de programa
  3.  
  4. include 'emu8086.inc' ;Incluye funciones de libreria emu8086
  5. DEFINE_SCAN_NUM
  6. DEFINE_PRINT_STRING
  7. DEFINE_PRINT_NUM
  8. DEFINE_PRINT_NUM_UNS
  9.  
  10.  
  11. jmp inicio
  12.  
  13.  
  14. menu1:
  15.      db 13,10,'ELKIN DAVID AGUILAR LLANOS',13,10,
  16.      db 13,10,'Codigo 10697830',13,10,
  17.      db 13,10,'Universidad Nacional Abierta y a Distancia UNAD-Cead ElBordo',13,10,
  18.      db 13,10,'Fecha:Mayo 15 de 2017',13,10,
  19.      db 13,10, '******MENU******',13,10,
  20.      db 13,10,'1 Suma de dos numeros ',13,10,
  21.      db 13,10,'2 Resta de dos numeros ' ,13,10,
  22.      db 13,10,'3 Multiplicacion de dos numeros ',13,10,
  23.      db 13,10,'4 Division de dos numero',13,10,                        
  24.      db 13,10,'5 Validar numeros negativos y positivos',13,10,
  25.      db 13,10,'6 Salir ' ,13,10,
  26.  
  27.  
  28. db 13,10,13,10,'Digite el Primer Numero: $'
  29. texto2 db 13,10,13,10,'Digite el Segundo Numero: $'
  30. texto3 db 13,10,13,10, 'La Suma Es: $'
  31. texto4 db 13,10,'La Resta Es: $'
  32. texto5 db 13,10,'La Multiplicacion Es: $'
  33. texto6 db 13,10,'La Divison es: $'  
  34. texto7 db 13,10,'positivo: $'  
  35. texto8 db 13,10,'negativo: $'
  36. texto9 db 13,10,'cero: $'
  37.  
  38. num1 dw ? ;defino variables de 2 bytes
  39. num2 dw ? ; el simbolo ? es para indicar q no se inicilizan con valor algunp
  40.  
  41. inicio:
  42.  
  43. mov ah,09 ;instruccion para imprimir en pantalla
  44. lea dx,menu1 ;carga cadena de texto 1 en dx
  45. int 21h ;interrupcion pantalla
  46.  
  47. call SCAN_NUM ;Llama Funcion SCAN_NUM que toma numero de teclado; el valor se guarda en ax
  48. mov num1,cx ;mueve numero a variable num1
  49.  
  50. mov ah,09 ;interrupcion para imprimir en pantalla
  51. lea dx,texto2 ;carga cadena de texto 2 en dx
  52. int 21h
  53.  
  54. call SCAN_NUM ;Llama Funcion SCAN_NUM que toma numero de teclado; el valor se guarda en ax
  55. mov num2,cx ;mueve numero a variable num2
  56.  
  57. mov ah,09
  58. lea dx,texto3
  59. int 21h
  60.  
  61. mov ax,num1 ;mueve primer numero digitado a ax
  62. add ax,num2 ;suma los numeros digitado, queda almacenaddo en ax
  63. call PRINT_NUM
  64.  
  65. mov ah,09
  66. lea dx,texto4
  67. int 21h
  68. mov ax,num1 ;mueve primer numero digitado a ax
  69. sub ax,num2 ;resta el 2do del 1er numero, queda almacenaddo en ax
  70. call PRINT_NUM
  71.  
  72.  
  73.  
  74. mov ah,09
  75. lea dx,texto5
  76. int 21h
  77. mov ax,num1 ;mueve primer numero digitado a ax
  78. mov bx,num2 ;mueve segundo numero digitado a bx
  79. mul bx ;ax = ax*bx
  80. call PRINT_NUM
  81.  
  82. mov ah,09
  83. lea dx,texto6
  84. int 21h
  85. xor dx,dx ;deja en cero dx; si no lo hago se desborda la division
  86. ;DX ALMACENA EL modulo de la division, por eso hay q dejarlo en cero
  87. mov ax,num1 ;mueve primer numero digitado a ax
  88. mov bx,num2 ;mueve segundo numero digitado a bx
  89. div bx ;ax = ax*bx
  90. call PRINT_NUM  
  91.  
  92. cmp bl,0
  93.  
  94.  
  95. mov ah,09h
  96. lea dx,texto7
  97. int 21h
  98.  
  99. mov ah,09h
  100. lea dx,texto8
  101. int 21h
  102.  
  103. mov ah,09h
  104. lea dx,texto9
  105. int 21h


· Los códigos deben ir en etiquetas GeSHi
>aquí las reglas del foro
-Engel Lex
« Última modificación: 15 Mayo 2017, 23:45 pm por engel lex » En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.391


Ver Perfil
Re: Ejercicio ensamblador
« Respuesta #6 en: 21 Mayo 2017, 18:37 pm »

Un número negativo, es una convención de acuerdo.
Aunque pueden proveerse diferentes formas de usar números negativos, al comienzo del diseño de la lógica del hardware, se vio claro que:
 x - x = 0
 0 - 1 = -1
 -1 + 2 =1
 1 - 1 = 0
Luego en binario debería ser igual... entonces se encontró que la forma de hacelro igual es que el último bit (el de más peso), tiene la función asignada del signo.
Así, éste valor: 1111.1111 puede significar 2 valores
si no admite números negativos es 255, pero si es un número negativo, será -1
Por tanto que sea positivo o negativo, depende del tipo de datos declarado. Sin más datos al respecto (por ejemplo podríamos estar trabajando con datos BCD) lo más que se puede hacer es verificar el bit de más peso.

Hay varias maneras... una podría ser haciendo desplazamiento (o rotaciones) a la izquierda (multiplicar por 2) y consultar luego el banderín de Acarreo (incluso el de desbordamiento). Si hubo acarrero, es porque es ebit estaba a 1, por tanto es negativo.
Código
  1. MOV al, Valor
  2. SAL al, 1  <--- desplazamiento aritmetico a la izquierda (1bit)
  3. JC Negativo
  4.  --> Es positivo
  5. RET
  6. Negativo:
  7.  --> Es negativo
  8. RET
  9.  
  10.  
También se puede hacer con RCL, RCR, ROL y ROR, pero tienes que controlar que contiene previamente el acarrero. en cualquier caso, el registro afectado (al), queda modificado... Estudia el comportamiento (condiciones) de los banderines de acarreo y desbordamiento en este tipo de operaciones: Rotaciones y Desplazamientos.

Otra forma es comparar el bit 7 del valor con un valor inmediato que tiene ese bit a 1 y el resto a 0, es decir con 128
Código
  1. MOV al, Valor
  2. TEST al, 128 <--- ¿Esta activado el bit 7 del registro 'al'?
  3. JNZ Negativo
  4.  --> Es positivo
  5. RET
  6. Negativo:
  7.  --> Es negativo
  8. RET

El segundo método es superior, por su sencillez. La ventaja del 2º método sobre el primero, es que el 2º, no modifica el estado del registro 'al', en el 1º, se ha multiplicado por 2 y como operamos con un byte, si era negativo, el valor queda truncado (el valor de ese bit se conserva en el banderín, por si se precisa).

Para devolver una llamada a una función usas RET x (Retorno, Return, x es un parámetro opcional que se suma al registro SP, para descartar parámetros de llamada), y para Salir, se usan directivas end: END, END modulo, ENDM para fin de una macro... etc... esto puede variar ligeramente según el ensamblador usado, pero varían poca cosa entre sí.
Código
  1. ProcA Proc FAR
  2. ...
  3. ...
  4. Ret
  5. ProcA ENDP <---- fin del procedmientoA
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
ensamblador
Electrónica
marcela 0 2,804 Último mensaje 30 Mayo 2005, 19:23 pm
por marcela
ensamblador
Ingeniería Inversa
CYPRESSKILL 2 3,297 Último mensaje 21 Noviembre 2005, 00:09 am
por CYPRESSKILL
[Ejercicio] Aca tienen un ejercicio para practicar « 1 2 3 »
Programación Visual Basic
Dreamaker 20 16,577 Último mensaje 5 Septiembre 2010, 02:57 am
por TGa.
ejercicio conclase pag 70 ejercicio 1
Programación C/C++
flony 2 4,564 Último mensaje 17 Octubre 2010, 12:16 pm
por Akai
Ejercicio en ensamblador suma-desplazamiento
ASM
Lariscal23 0 2,112 Último mensaje 16 Abril 2022, 11:31 am
por Lariscal23
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines