Ensamblador - AYUDA DESEPERADA!!!.

 
Vista:

AYUDA DESEPERADA!!!.

Publicado por Aidor (1 intervención) el 23/01/2004 01:04:19
No me queda claro, pero el tema lo traigo de la creación de compiladores. Hace unos días dije, ¿y cómo es la cosa?... El ensamblador (supongamos x86), sirve para crear ejecutables?? Unos parientes míos dicen que no, porke no es lenguaje de máquina. Entonces digo yo, ¿acaso tengo que escribir al compilador para que arme --muy artesanalmente-- tiritas (little strings diriá Bush) de 1 y 0, según se lo pida el código fuente???
Además los otros días estuve investigando, y resulta que hace unos lustros, cuando todos le dábamos a los micros, por ejemplo, usuarios del Spectrum programaban juegos en ensamblador --Z80-- y no lo compilaban, ni linkaban, ni nada. Entonces ¿el Spectrum lo intepretaba "in situ"?? ¿Los PC --dioses topoderosos de hoy en día-- no pueden hacer eso???
No puedo dormir!!! Porke: ¿A VER COMO ES EL ASUNTO?
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

RE:AYUDA DESEPERADA!!!.

Publicado por biT (3 intervenciones) el 23/01/2004 02:37:55
si puedes crear ejecutables para los x86
el archivo asm contiene instrucciones (opcodes) que el x86 puede entender, por lo general este archivo lo transforman el un objeto coff, luego el linker transforma este objeto coff (.obj) en un archivo executable (.exe).
esto es bajo Windows, el executable tiene que tener una estrucutra que Windows pueda entender, Windows usa el PE (Portable Executable), que contiene secciones como (data, code, data no inicializada, recursos, etc), y el x86 ejecutara la parte del codigo (code).
pero no tienes que programar con 1 y 0, eso es simplemente imposible :)
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:AYUDA DESEPERADA!!!.

Publicado por cemendil (8 intervenciones) el 27/01/2004 12:31:52
Vamos a ver. El ensamblador es un lenguaje de programacion, pero es lo mas proximo al codigo maquina que hay. Supongamos que estamos en los tiempos del Z80 (*sigh*) y que quiero que una subrutina haga una llamada al servicio de la BIOS 0xbb5a (escribir caracter en el registro A en un Amstrad) y que luego retorne al llamador. Lo que haria seria escribir en ensamblador:

call bb5a
ret

Ahora esto lo paso por un programa ensamblador, que convierte la anterior cadena de caracteres en una tira de unos y ceros, y que escribire en hexadecimal por motivos de sanidad mental:

cd 5a bb c9

Los tres primero bytes son la instruccion call (observa el caracter little-endian del z80) y el cuarto es la instruccion ret.

¿Por que el ensamblador? Porque es lo mas parecido que hay al codigo maquina. A menos que seas un jamao, no te aprenderas todos los opcodes numericos (en tiempos del Z80 era posible, pero hoy es una locura completa, algo asi como aprenderse la guia telefonica) En vez de eso te aprendes nombres (como 'call', 'add', 'jmp', etc) que son equivalentes (mas o menos) exactos a los opcodes numericos. Esto facilita mucho la vida, y si eres listo, aun puedes tener una idea de lo que esta pasando por debajo. Hoy en dia el problema no es saber en que cadena de bytes se codifica una instruccion, si no el saber en que cantidad de bytes se codifica una instruccion: no es lo mismo: mov 0, eax que xor eax, eax por ejemplo. Para colmo, aunque el primero sea mas grande, en algunas maquinas es mas rapido. En fin, que corren otros tiempos. Ya no estamos en la era del Z80 (re-*sigh*)
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