SoloCodigo
Programación General => C/C++ => Mensaje iniciado por: © Jonathan © en Miércoles 30 de Abril de 2003, 15:28
-
Hola a todos, quisiera saber que es lo que hace realmente esta funcion:
far, _far o __far
En algunos compiladores se escribe como far en otros _far o __far, no se que es lo que hace realmente, vi que la utilizaban en un programa con el cual veias que puerto paralelo tenias instalado.
Gracias de antemano, saludos
-
se utiliza esta sentencia para declaratr una variable que accese a alguna direccion de memoria absoluta, por lo general para "mapearse" a la memoria de algun dispositivo, como por ejemplo la tarjeta de video o un puerto paralelo o serial..
algunos compiladores como el gcc no lo soportan y traen incluidas algunas rutinas para obtener los mismo resultados esta rutinas comienzan por _far pero internamente invocan _far, pero su simbolo, es decir una vez ya compilado es __far(los simbolos de las funciones suelen empezar con _ por convencion).
far char *rgb;
seria un apuntador a un segmento de la memoria de video.
Espero que te haya servido de ayuda.
-
Gracias juank, me has aclarado la duda, una vez mas te agradesco :gracias: . Saludos
:adios:
-
La resapuesta de JuanK si esta bien fundamentada, pero creo realmente que un beginner no la entendería; se usa la directiva far en c o asm para especificar un salto de dirección larga.
Todas las instrucciones de un ejecutable (.exe) son puestas en memoria en el momento de su ejecución, osea que cada instruccion posee una direccion de memoria por medio de la cual el registro IP del procesador la accesa.
Ahora, como la logica del program permite transferir el control del programa a instrucciones adelante o atras; muchas veces existe codigo que puede estar en modulos lejanos o que superan el limite de salto de direccion en memoria; en esos casos se debe especificar que la variable o tipo de dato estan en una direccion "LEJANA", en ingles far hace referencia a "lejano"; en el codigo de JuanK la instruccion hace referencia a memoria de video.
Recordemos que la memoria de video se encuentra en un segmento totalmente aparte del resto de la memoria del pc específicamente comenzando en direccion base A000H con desplazamiento 0000H.
Espero no ser confuso con la explicación.
Saludos.
-
Todo la informacion que tu das es muy cierta y esta bastante completa, realmente a mi no se me hubiera ocurrido responderlo de esa manera.
Sin embargo trate de hacer mi comentario lo mas sencillo y entendible posible, para que un "beginner" lo entienda, sin adentrar en los detalles del proceso de ejecucion ni en la arquitectura del pc, un tanto porque este tema ya hace parte un poco mas del foro de assembler, y otro tanto porque, como tu mismo te daras cuenta, quedan muchos asuntos pendientes. Aunque tal vez jonathan si conozca algo de los registros del procesador, la inmensa mayoria en este foro no sabra a que te refieres con el registro IP del procesador, ni tampoco entendera el porque existe un limite de salto, ni siquiera a que te refieres con salto...
Creo que tu solucion quedo aun mas lejana que la mia, para que la entienda un principiante.
Pero olvidandonos del detalle de los "beginners", si esta muy buena tu publicacion, porque aunque a decir verdad manejo estos conceptos, no lo hago cotidianamente y como ya lo dije no se me hubiese ocurrido responder asi, a veces hace falta para que algun no-beginner, aclare algunas inquietudes.
Chau
Juank