Welcome, Guest
Username: Password: Remember me

TOPIC: Dudas de la materia

Dudas de la materia 4 months 2 weeks ago #9376

  • kirstein
  • kirstein's Avatar Topic Author
  • Offline
  • Profesor
  • Profesor
  • Posts: 2879
  • Karma: 1666
  • Thank you received: 1653
Hola,

+ Este será el topic para que pregunten dudas de la materia.
+ Recuerden leer las dudas anteriores de los compañeros antes de postear.
+ Esto es importante para no hacer perder el tiempo en las mismas preguntas al profesor y a los compañeros.

Saludos,
Kirstein

Please Identificarse to join the conversation.

Dudas de la materia 4 months 2 weeks ago #9378

  • ktencio
  • ktencio's Avatar
  • Offline
  • Mr(s). Invisible
  • Mr(s). Invisible
  • Posts: 13
  • Karma: 6
  • Thank you received: 7
Compañeros, los que haya visto el asm del eco, adjunto una screenshot de las partes que le pregunté al profe. Y aquí dejo unas dudas que le comenté al profe:

Pregunta: Profe, era para hacerlo un par de consultas.
En estos ciclos, que forman parte del eco. Digamos, ahí trae el loop ciclo, sin embargo trae la asignación de 3 al registro contador más abajo; lo que me pregunto es si ese loop ciclo de dónde a dónde aplica precisamente, pues me confunde ese orden.

Respuesta: El loop es solo un salto condicional que bifurca si el cx es mayor que 0 y en ese caso lo decrementa. Si el cx es igual a 0 no bifurca. Por lo anterior el loop no es un ciclo, es una herramienta que usamos para implementar el ciclo.

Pregunta: Por otro lado, quería saber si me puede dar una explicación corta de porqué se usa mov byte ptr rotulo[di] con el 0Dh y luego con el 0Ah, es decir, ¿Qué hace usar esos hexadecimales?

Respuesta: 0Dh y 0Ah son los códigos ASCII que corresponden a un cambio de línea. Si no se los agregáramos al final de la línea a repetir la desplegaría 3 veces pero seguidas en un solo renglón sin hacer el cambio de línea.

Pregunta: Y por útlimo, ¿Qué función cumplía incrementar el si y el di luego de traerse los byte?

Respuesta: Avanzar en la memoria. [si] y [di] son punteros a un byte particular de la memoria. Si no los incrementamos siempre apuntarían a la misma letra del mensaje en memoria y no podríamos procesarlo completo.
Attachments:
The following user(s) said Thank You: jorgutierrez, dnivia, masolano

Please Identificarse to join the conversation.

Dudas de la materia 4 months 24 minutes ago #9529

  • ktencio
  • ktencio's Avatar
  • Offline
  • Mr(s). Invisible
  • Mr(s). Invisible
  • Posts: 13
  • Karma: 6
  • Thank you received: 7
Buenas noches, profe.
¿Usted cree poder dar un pequeño resumen de la lógica e implementación del código de convertir un '5'(char) a un 5(int)?

Puesto que en el ejemplo que vimos esto es en del César, por lo menos para mí, confunde un poco al leerlo, ya que no distingo qué se refiere al proceso de convertir en César y al proceso de convertir un char a int.
Adjunto un extracto del César, de la parte de conversión, por si puede aclarar un poco esta conversión, de nuevo.
¡Gracias!
Attachments:

Please Identificarse to join the conversation.

Dudas de la materia 3 months 4 weeks ago #9530

  • walopez
  • walopez's Avatar
  • Offline
  • Mr(s). Invisible
  • Mr(s). Invisible
  • Posts: 2
  • Thank you received: 0
Profe, una pregunta.
¿Cómo se usa el debugger o cuáles son los comandos para usarlo?

Please Identificarse to join the conversation.

Dudas de la materia 3 months 4 weeks ago #9531

  • kirstein
  • kirstein's Avatar Topic Author
  • Offline
  • Profesor
  • Profesor
  • Posts: 2879
  • Karma: 1666
  • Thank you received: 1653

ktencio wrote: Buenas noches, profe.
¿Usted cree poder dar un pequeño resumen de la lógica e implementación del código de convertir un '5'(char) a un 5(int)?

Puesto que en el ejemplo que vimos esto es en del César, por lo menos para mí, confunde un poco al leerlo, ya que no distingo qué se refiere al proceso de convertir en César y al proceso de convertir un char a int.
Adjunto un extracto del César, de la parte de conversión, por si puede aclarar un poco esta conversión, de nuevo.
¡Gracias!


Veamos.

Primero es importante entender el qué estamos haciendo.

1. Cuando alguien almacena un número como "texto" a lo que se refiere es que cada dígito se almacena con un formato de código ascii y que se almacenan de forma consecutiva en memoria. Por ejemplo si se almacena el número "169" se usan tres bytes donde el primero almacena al código ascii del 1 que es un 49, luego el del 6 que es un 54 y por último un 57 que es el del 9. Si se traducen los bytes a hexadecimal el mapa de memoria como lo hacíamos en FOC sería:

31 36 39

2. Las instrucciones aritméticas de ASM como la de sumar (add), multiplicar (mul), etc. no funcionan con texto sino que suponen que los números se almacenan como números enteros con el formato de complemento a la base (que también vimos en FOC). Por esto si queremos usar el número anterior "169" con alguna operación que lo requiera como número ocupamos convertirlo de formato texto a número. En nuestro ejemplo ocuparíamos que ese 169 se almacenara como:
10101001 en binario osea
A9 en hexadecimal osea
169 en decimal.

3. Convertir un solo dígito de texto a número es trivial. Basta con efectuar una sencilla operación AND de bits con la máscara correcta. En este caso 0Fh o 00001111b
Por esto la instrucción clave en el código que preguntas de ejemplo es:
and al, 0Fh
esta es la instrucción que convierte un dígito.
¿Por qué funciona?
Los códigos ascii de los dígitos terminan en el número correspondiente en hexadecimal. El 0 es el 30h, el 1 el 31h, el 2 el 32h, etc. por lo que basta con deshacernos del 3 de la izquierda. Esto lo hacemos con ands con 0 en el nible de la izquierda y con 1 en el de la derecha para mantener el número.

4. ¿Qué sucede si el número es de más de un dígito? Ocupamos hacer un pequeño algoritmo para procesar todos los dígitos.
Se van leyendo y procesando los dígitos del texto de izquierda a derecha y se va acumulando un valor que comienza en cero.
Se convierte el dígito actual y se suma al acumulado. Si hay más dígitos el acumulado se multiplica por 10 y se pasa al siguiente dígito.
En nuestro ejemplo para convertir el "169" se comienza con un acumulado de 0 y se procesa el 1 y se le suma al acumulado (que ahora es 1). Como el número no se ha terminado se multiplica ese acumulado de 1 por 10 y se acumula 10. Se convierte el 6 y se le suma al acumulado y llegamos a 16. Como el número no se ha terminado se multiplica por 10 (acumulamos 160). Se procesa el 9 y se le suma al acumulado y llegamos al 169. Al no haber más dígitos el acumulado es el resultado final de la conversión.

5. En nuestro código por el que preguntas implementamos una simplificación de este algoritmo ya que suponemos que viene o un dígito solo o máximo dos dígitos.
Primero convertimos el primer dígito con el primer AND.
Luego averiguamos si el número es de dos dígitos comparando el ascii del byte con un valor de '0' de manera que si es menor (no es un dígito) no hacemos nada más (saltamos a asignar). Si es un dígito multiplicamos por 10 el acumulado y convertimos ese segundo dígito con el segundo AND y lo sumamos al acumulado, terminando este proceso antes de la etiqueta asignar.

6. El resto del código luego de asignarle el valor que obtuvimos en la conversión a la variable cesar es el mismo que el del ejemplo anterior, haciendo la encripción cesar.

Saludos,
Kirstein
The following user(s) said Thank You: ktencio

Please Identificarse to join the conversation.

Dudas de la materia 3 months 4 weeks ago #9532

  • kirstein
  • kirstein's Avatar Topic Author
  • Offline
  • Profesor
  • Profesor
  • Posts: 2879
  • Karma: 1666
  • Thank you received: 1653

walopez wrote: Profe, una pregunta.
¿Cómo se usa el debugger o cuáles son los comandos para usarlo?


El debugger es el programa que se llama TD.exe
A la hora de ensamblar y linkear tu programa para poder usarlo en el debugger es necesario que uses las opciones de
/zi en el tasm
/v en el tlink
Esto para que se almacenen las tablas de símbolos en tu ejecutable y sea más entendible el usarlo.

La interfaz del debugger tiene menúes y botones y ventanas que leyendo y traveseando te van guiando.
En partircular F8 ejecuta una instrucción del programa a la vez.

Saludos,
Kirstein
The following user(s) said Thank You: walopez

Please Identificarse to join the conversation.

  • Not Allowed: to create new topic.
  • Not Allowed: to reply.
  • Not Allowed: to add attachements.
  • Not Allowed: to edit your message.
Time to create page: 0.190 seconds
Powered by Kunena Forum