[duvida] Gcc e Xcode

Fork

What is folding?
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 é ***** 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
 
Back
Topo