Ensamblador - lectura de memoria - decodificacion 1ra parte

 
Vista:

lectura de memoria - decodificacion 1ra parte

Publicado por Gabriel (5 intervenciones) el 07/08/2002 21:07:55
Saludos a la Gente del Foro! y muchas gracias por leerme
Queria ver si me pueden responder una duda/inquietud que tengo desde hace tiempo y que realmente me esta desesperando ya q no encuentro respuesta alguna por ningun lado, espero q este sea el lugar... voy al grano... el tema es el siguiente: en lineas generales el procesador direcciona y lee bloques de memoria (ya sea byte, palabra, doble palabra...) y decodifica e interpreta los datos extraidos de dicho bloque, los cuales se encuentran codificados en binario. Por ej, en caso de haber un caracter almacenado en un numero binario, lo decodifica implementando ascii y le da un caracter como resultado, en caso de haber un numero (BCD) lo de codifica tambien y obtiene el numero
en decimal y en caso de haber una instruccion la lee y la ejecuta. El tema es el siguiente: ¿Como sabe el procesador que tipo de informacion tiene contenida el numero binario que esta leyendo en ese momento? esta pregunta es importante ya que sino se supiera que tipo
de dato esta almacenado en ese bloque de memoria entonces ese numero binario podria ser decodificado de distintas maneras y se obtendrian diferentes resultados; por ej: si se lee un byte de memoria que contiene 01000000 , este dato puede ser el caracter 'A' si se
decodifica mediante ASCII, el numero 64 si se decodifica mediante BCD, el hexadecimal 41H y quizás tambien una instrucción que indique que se tiene que hacer algo en particular. ¿Otra duda es como se sabe cuando empieza una informacion y cuando termina y empieza otra?
osea... ¿como se si el dato que estoy leyendo tiene una longitud de 1 o 2 bytes, etc?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

2da parte

Publicado por Gabriel (5 intervenciones) el 07/08/2002 21:08:59
Espero a que se entienda a lo que me estoy refiriendo, por ejemplo en C/C++ se definen los tipos de variables y a partir de esa definicion se sabe que dato contiene, la cantidad que ocupa en memoria y como tiene que ser interpretado, lo mismo en otros lenguajes como BASIC
(incluso en las variables variant que dejan unos flags activados de sus bits que indica que tipo de datos almacenan), pero en un nivel mas bajo en donde esos tienen que ser grabados en memoria... ¿que es lo que le indica al micro si esos bits son numeros, caracteres, o instrucciones del tipo MOV, JMP CMP etc?

No se si esta duda es de nivel muy de principiante (creo que no) pero lo que se es que estuve leyendo cosas de asembler y otros tutoriales y en ninguno se refiere a esto. Espero una respuesta que me solucione esta duda y MUCHAS GRACIAS de antemano. saludos, gabriel.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:2da parte

Publicado por Juan Antonio ( Ifrit ) (1 intervención) el 07/08/2002 23:16:04
Gabriel, esta duda que tienes tu, precisamente marca la diferencia entre los lenguajes de alto nivel y los de bajo nivel, en ensamblador es el programador el que tiene que saber q es lo que representa cada bloque de memoria. en concreto, en la arquitectura del 8086 ( q es la mas sencilla ) a la horra de trabajar la memoria digamos que se divide en 4 partes, una de codigo ( en cuya memoria se almacenan las instrucciones ), la de datos ( para variables ) , la de pila ( Tipo Abstracto de Dato ) y la estra, que sirve de modo auxiliar.Tu cuando estas programando en ensamblador tienes que sasber que no puedes guardar el resultado de una operacion en el segmento de codigo, no se si me entiendes, tu cuando trabajas en c, defines tus variables y no te preocupas donde ni como se guardan, en ensamblador si, y esta es una de las diferencias respecto del alto nivel. SI kieres algo + concreto, mandame un correo. espero servirte de ayuda. BYE!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:2da parte

Publicado por David Cañadas (3 intervenciones) el 25/08/2002 12:15:14
Bueno, esta complicada duda que tienes probablemente la tienes porque no has asimilado de forma correcta el modo en que trabaja un microprocesador.

Imagínate un microprocesador como un montón de tuberías de diferente longitud y caudal. Cada tubería corresponde a un valor, así cuando el micro recibe un valor '1', lo pasa por la tubería '1'. Si la tubería tiene mucho caudal, necesitará entrar otro valor para completar el caudal.

Bueno, pues un micro es algo parecido. Cada valor que recibe le hace funcionar de forma distinta, si recibe un 0x01 éste no pasa por la misma circuitería que un 0x02, etc. Así pues cada circuitería decide cuántos datos necesita.

Por otra parte, tienes la duda de cómo sabe si un valor es ASCII, BCD, etc. Bueno, realmente no lo sabe, estas convenciones son para entendernos los humanos, al microprocesador le da igual, puedes obligarle si te apetece a ejecutar una cadena alfanumérica, aunque dará error, pero lo intentará, porque él no sabe lo que le suministras ni en qué formato está, el ensamblador no entiende de formatos.

Salu2.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

ayuda!!!

Publicado por Juan Gtz (1 intervención) el 24/09/2003 00:48:40
Espero que alguien pueda leer esto, ya que las ultimas fechas que leo son de hace mas de un año.
Necesito un programa que convierta un numero bcd en forma desempaquetada a su equivalente hexadecimal de 1 byte de longitud. y esto en el ensamblador (debug)

Espero peudan ayudarme, se iran al cielo

gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar