Boas, tenho o Xcode ou (Xtools) 2.4 instalado. O que aconteçe é o seguinte, eu crio um ficheiro em C, no smultron (nao ando envolvido em mega projectos), e necessito de analizar o codigo assembly , o que me aconteçe é que apos correr o comando para tal efeito, o codigo assembly é muito confuso mesmo. Código: .stabd 46,0,0 .stabd 68,0,3 pushl %ebp movl %esp, %ebp pushl %ebx call ___i686.get_pc_thunk.bx "L00000000001$pb": .stabd 68,0,4 movl L_accum$non_lazy_ptr-"L00000000001$pb"(%ebx), %eax movl $0, (%eax) .stabd 68,0,5 movl L_j$non_lazy_ptr-"L00000000001$pb"(%ebx), %eax movl $0, (%eax) movl $0, %edx leal _vec-"L00000000001$pb"(%ebx), %eax leal 20+_vec-"L00000000001$pb"(%ebx), %ecx L2: addl (%eax), %edx addl $4, %eax cmpl %ecx, %eax jne L2 movl L_j$non_lazy_ptr-"L00000000001$pb"(%ebx), %eax movl $5, (%eax) movl L_accum$non_lazy_ptr-"L00000000001$pb"(%ebx), %eax movl %edx, (%eax) .stabd 68,0,6 Ora eu vejo colegas meus a fazer o mesmo procedimento e o assemly é muito, mas muito mais simples. Há soluçao?
Um tiro as cegas: - Terás uma optimização de código muito alta? Tenta ver se é isso. (Não me perguntes como) - O teu Mac é PowerPC ou Intel? Será isso a razão do código estar diferente?
Não estou a ver nada de complicado no assembly. O que é para tí uma coisa complicada? Mete aqui a source do .c para compilarmos em outros computadores.
Experimenta Código: gcc -S -O0 <ficheiro> Em ppc não funciona, mas para intel deve dar: Código: gcc -masm=intel -S <ficheiro> Em ultimo caso instala o objdump
@ Ajax o que acho complicado é estas linhas Código: movl L_accum$non_lazy_ptr-"L00000000001$pb"(%ebx), %eax que em outros pcs (linux) ficam assim. Código: movl accum, %eax Qual achas mais legivel? Obrigado jaac vou tentar
Jaac: Código: prog.c:1: error: bad value (intel) for -masm= switch O que ando a fazer é depuraçao de assembly na aula de arquitecturas, nao que este assembly é imperceptivel, mas é muito mas muito mais dificil de ler/compreender/alterar. Se o assembly é normal ficar assim nos macs tasse bem. Apenas pensei que ia ficar como fica em linux, que ja usei noutras alturas. De qq das maneiras fica a qui o source pra quem quiser tentar Já agora p que é "non_lazy_ptr"?? isto desaparecendo e ja ficava melhor Código: int vec[5]={-10,20,10,5,-15}; int j, accum; int main(){ accum=0; for(j=0;j<5;j++) accum+=vec[j]; }
Isso é apenas um nome diferente para a mesma coisa. Nesse caso um apontador para a variável ou se quiseres, um "endereço" de memória onde está guardada a variável. É natural que de sistema para sistema possam haver diferenças. Penso que pode haver uma forma de resolver esse problema simplificando o output. A ver se me lembro.
pois tb me pareceu que andava la com apontadores, se houver maneira de "renomear" aquilo por favor diz-me, sei que é a mesma coisa mas era pra ficar mais readable