hace 3 o 4 dias empece con ASM, y la verdad es que de momento solo ha servido para que le tenga una rabia increible a mac... xD
pero bueno al tema, he copiado directamente un programa de una web:
http://fabiensanglard.net/macosxassembly/index.php
el cual es este:
Código
.bss .data output: .asciz "The processor Vendor ID is '%s' \n" .lcomm buffer, 13 .text .globl _main _main: movl $0, %eax # define cpuid output option cpuid movl $buffer, %edi # put values in string movl %ebx, 0(%edi) movl %edx, 4(%edi) movl %ecx, 8(%edi) movl $0, %ecx movl %ecx, 12(%edi) # Now Calling printf subl $0x4, %esp #padding stack :/ ! pushl $buffer pushl $output call _printf #macosx need libc pre_ # ESP is at 0xXXXXXXX0 now, # with MacOS X Special stub it will be at 0xXXXXXXXC call _exit nop
el codigo lo he compilado de la siguiente manera (tambien especial para mac...):
Código:
as -arch i386 -o cpuid.o cpuid.s
ld -e _main -o cpuid -lc cpuid.o
y el problema viene a que, si lo ejecuto en la particion donde esta el sistema, el programa funciona correctamente. pero si lo ejecuto en una particion que tengo para mis cosas, el programa da segmentation fault.
en cambio, si compilo el codigo con:
Código:
gcc -arch i386 -o cpuid cpuid.s
alguien sabe a que puede deberse? despues de buscar todas (creo y espero) las diferencias entre el asm de mac y cualquier otro sistema me gustaria al menos rematar la faena y saber por que esto no funciona. si podeis pasarme algun link que hable sobre ello ya estaria mas que satisfecho, ya que directamente no se ni como buscarlo.
un saludo y muchas gracias!