Jump to content

Ensamblador..?..?


MrSkaoz
 Share

Recommended Posts

Wenas Wenas, soy un reciente mac, acabo de comprar una mac por consejos, como ya se ha dicho en otra parte de este foro, todos tenemos un maestro macero, ahora bien, acabo de comenzar la carrera de ingenieria en computacion, y por lo que he leido no tendre problemas, lo que llamo mi atencion, es que en mi paln de estudios tengo marcado la carrera de Lenguaje ensamblador, y al consultar con algunas personas (mecatronicos para ser exacto) me han dicho que no podre hacer practicas con mac, ya que para este lenguaje es necesaria tener la arquitectura de una pecera, acaso este es el punto flaco de mac?? favor de solventar mis dudas ya que algun dia los ayudare :P

Link to comment
Share on other sites

La verdad, no se si existe un compilador de ensamblador para mac, que entiendo que si que tendira uqe haber (vamos, como para linux). Asi que teoricamente necesitarias un mac con procesador intel. En todo caso y que no encontraras nada, siempre puedes montar un pc virtual con virtualbox, virtualpc, parallels, qemu o algun similar.

Link to comment
Share on other sites

Vamos a ver: de un tiempo a esta parte, Mac OS X (que de por sí, es UNIX) corre en procesadores compatibles x86, vaya, que corre sobre procesadores Intel Core 2 Duo o Xeon Quad Core, según el tipo de Mac.

 

Antes corrían en otra plataforma, PowerPC de IBM y Motorola, que TAMBIÉN tenía lenguaje ensamblador (cómo se habría empezado a programar entonces?) pero es otro lenguaje al ser otro tipo de arquitectura completamente distinta. Pero por tener ensamblador, claro que tiene... es que la gente va de lista y piensa que sólo existe en ensamblador de "PC x86 compatible Intel" (para diferenciarlo de alguna forma), cuando antes de todo eso del Intel ya teníamos otros procesadores con otros ensambladores.

 

Pero vaya, si tienes un Mac con Intel (todos los actuales) sólo te queda usar un compilador para ensamblador para Mac (que seguro que lo hay...) o mucho mejor, "virtualizar" un Linux o Windows con VirtualBox o parecidos, los accesos y demás animaladas que hagas en ensamblador, en caso de pifia, no van directamente al procesador o las memorias. Por si acaso.

 

Saludos

Link to comment
Share on other sites

La verdad, no se si existe un compilador de ensamblador para mac, que entiendo que si que tendira uqe haber (vamos, como para linux). Asi que teoricamente necesitarias un mac con procesador intel. En todo caso y que no encontraras nada, siempre puedes montar un pc virtual con virtualbox, virtualpc, parallels, qemu o algun similar.

Bueno, depende de en qué ensamblador quieras hacer experimentos. Si te da por ahí hay un emulador de MIPS bastante bueno (SPIM)

 

Vamos, que ensamblador no significa "código máquina para Intel". ;)

 

 

Pero vaya, si tienes un Mac con Intel (todos los actuales) sólo te queda usar un compilador para ensamblador para Mac (que seguro que lo hay...) o mucho mejor, "virtualizar" un Linux o Windows con VirtualBox o parecidos, los accesos y demás animaladas que hagas en ensamblador, en caso de pifia, no van directamente al procesador o las memorias. Por si acaso.

 

El compilador de C que viene de serie en Xcode, gcc, permite meter ensamblador en línea.

 

Ejemplo dentro de un programa en C:

 __asm__ ("movl %eax, %ebx\n\t"
	  "movl $56, %esi\n\t"
	  "movl %ecx, $label(%edx,%ebx,$4)\n\t"
	  "movb %ah, (%ebx)");

 

(tomado de este "HOWTO")

 

En cuanto a fundir algo, calma, que ni de coña. Si pudieras romper algo por programar en ensamblador sería un gravísimo problema de seguridad en el sistema operativo.

 

Por cierto, si tenéis curiosidad malsana, el gcc permite generar ensamblador a partir de un programa en C. Esto es "Hello, World\n".

 

(versión PPC)

trillian:~ borjam$ gcc -S world.c
trillian:~ borjam$ more world.s
	.section __TEXT,__text,regular,pure_instructions
	.section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32
	.machine ppc7400
	.cstring
	.align 2
LC0:
	.ascii "Hello, World!\0"
	.text
	.align 2
	.globl _main
_main:
	mflr r0
	stmw r30,-8(r1)
	stw r0,8(r1)
	stwu r1,-80(r1)
	mr r30,r1
	bcl 20,31,"L00000000001$pb"
"L00000000001$pb":
	mflr r31
	addis r2,r31,ha16(LC0-"L00000000001$pb")
	la r3,lo16(LC0-"L00000000001$pb")(r2)
	bl L_puts$stub
	lwz r1,0(r1)
	lwz r0,8(r1)
	mtlr r0
	lmw r30,-8(r1)
	blr
	.section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32
	.align 5
L_puts$stub:
	.indirect_symbol _puts
	mflr r0
	bcl 20,31,"L00000000001$spb"
"L00000000001$spb":
	mflr r11
	addis r11,r11,ha16(L_puts$lazy_ptr-"L00000000001$spb")
	mtlr r0
	lwzu r12,lo16(L_puts$lazy_ptr-"L00000000001$spb")(r11)
	mtctr r12
	bctr
	.lazy_symbol_pointer
L_puts$lazy_ptr:
	.indirect_symbol _puts
	.long   dyld_stub_binding_helper
	.subsections_via_symbols

 

 

trillian:~ borjam$ gcc -arch i386 world.c
trillian:~ borjam$ 
trillian:~ borjam$ 
trillian:~ borjam$ 
trillian:~ borjam$ 
trillian:~ borjam$ cat world.s
.cstring
LC0:
.ascii "Hello, World!\0"
.text
.globl _main
_main:
pushl	%ebp
movl	%esp, %ebp
pushl	%ebx
subl	$20, %esp
call	L3
"L00000000001$pb":
L3:
popl	%ebx
leal	LC0-"L00000000001$pb"(%ebx), %eax
movl	%eax, (%esp)
call	L_puts$stub
addl	$20, %esp
popl	%ebx
leave
ret
.section __IMPORT,__jump_table,symbol_stubs,self_modifying_code+pure_instructions,5
L_puts$stub:
.indirect_symbol _puts
hlt; hlt; hlt; hlt; hlt
.subsections_via_symbols
trillian:~ borjam$

 

Y, lo olvidaba, el mismo gcc (compilador de C) se traga sin problemas estos archivos .s.

 

Aunque a mi personalmente no me parece nada didáctico programar en ensamblador en un sistema Unix. Lo lógico es hacer esas prácticas con microcontroladores.

Edited by borjam
Link to comment
Share on other sites

Bueno, depende de en qué ensamblador quieras hacer experimentos. Si te da por ahí hay un emulador de MIPS bastante bueno (SPIM)

 

Vamos, que ensamblador no significa "código máquina para Intel". ;)

 

Lamentablemente, el quiere programar ensamblado por temas de estudios, vamos, para hacer la carrera de informatica. Y en fundamentos de computadoras se programa assembler sobre tecnologia intel x86, asi que nos olvidamos totalmente de otras plataformas como sparc, powerpc, etc...

 

Respecto lo de programar utilizando xcode... creo que eso le va a traer bastantes complicaciones, que añadidas a las propias de los estudios, que le haran las practicas "imposibles". Además, ha de haber algo mas sencillo. En todo caso, en la facultad le facilitan las herramientas necesarias, pero siempre sobre Windows o Linux... asi que yo dejaria abierta la opcion de una maquina virtual.

Link to comment
Share on other sites

Respecto lo de programar utilizando xcode... creo que eso le va a traer bastantes complicaciones, que añadidas a las propias de los estudios, que le haran las practicas "imposibles". Además, ha de haber algo mas sencillo. En todo caso, en la facultad le facilitan las herramientas necesarias, pero siempre sobre Windows o Linux... asi que yo dejaria abierta la opcion de una maquina virtual.

Que no se me entiende...

 

En el ejemplo que he puesto utilizo gcc, que es el compilador de C de GNU de toda la vida, el mismo que el personal usa en Linux, FreeBSD, etc.

 

Ese compilador VIENE CON XCODE. Pero no tienes por qué usar el Xcode para nada. ¿No ves cómo lo he hecho? Terminal, vi o el editor que más rabia te de, y llamando al compilador a mano.

 

Mira que nos complicamos la vida... ;)

Link to comment
Share on other sites

Si, es cierto, ultimamente me he empezado a llevar con el profe y se acaba de comprar una pro de 13 iwal a la mia (ahora me cae bien :P) y me dijo que el deja los programasa los alumnos en linux, pero de hecho cuando recibe los trabajos los revisa en gcc desde la terminal del mac al fin y al cabo sabemos las grandes semejanzas, el no utiliza el xcode, solo para la escritura del codigo

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.