compiladores i- 1 - comparacion programa fuente y ensamblador generado
TRANSCRIPT
![Page 1: Compiladores I- 1 - COMPARACION PROGRAMA FUENTE Y ENSAMBLADOR GENERADO](https://reader035.vdocuments.net/reader035/viewer/2022071709/56649d835503460f94a68971/html5/thumbnails/1.jpg)
Compiladores I - 1 -
COMPARACION PROGRAMA FUENTE Y
ENSAMBLADOR GENERADO
![Page 2: Compiladores I- 1 - COMPARACION PROGRAMA FUENTE Y ENSAMBLADOR GENERADO](https://reader035.vdocuments.net/reader035/viewer/2022071709/56649d835503460f94a68971/html5/thumbnails/2.jpg)
Compiladores I - 2 -
Programa Fuente
#include <stdio.h>
void *malloc();
struct CharNode { char c; struct CharNode *Sig;};
struct CharNode *Append(struct CharNode *l1,struct CharNode *l2)
{ if (l1==NULL) return l2; else { struct CharNode *tmp;
tmp=malloc(sizeof (struct CharNode)); tmp->c=l1->c; tmp->Sig=Append(l1->Sig,l2); return tmp; }}
void PrintCharNode(struct CharNode *cn){ while (cn) { putchar(cn->c); cn=cn->Sig; }}
![Page 3: Compiladores I- 1 - COMPARACION PROGRAMA FUENTE Y ENSAMBLADOR GENERADO](https://reader035.vdocuments.net/reader035/viewer/2022071709/56649d835503460f94a68971/html5/thumbnails/3.jpg)
Compiladores I - 3 -
Programa Fuente
struct CharNode *StrToCharNode(char *Str) { struct CharNode *cn; if (!*Str) return NULL; cn=malloc(sizeof (struct CharNode)); switch (*Str) { case '\\': ++Str; cn->c=*Str++; break; default: if (*Str>='a' && *Str<='z') cn->c=*Str++ - 'a' + 'A'; else cn->c=*Str++; } cn->Sig=StrToCharNode(Str); return cn;}void main() { float Loteria[10][20]; int rnd,i,j; struct CharNode *a=StrToCharNode("Bon Nadal i "); struct CharNode *b=StrToCharNode("Bon Any Nou."); PrintCharNode(a); puts(""); PrintCharNode(Append(a,b)); for (i=0;i<10;++i) { for (j=0;j<20;++j) { rnd=(rnd*255+48) % 65536; Loteria[i][j]=rnd; } } printf("\nEl gordo es %f\n",Loteria[rnd % 10][rnd % 20]);}
![Page 4: Compiladores I- 1 - COMPARACION PROGRAMA FUENTE Y ENSAMBLADOR GENERADO](https://reader035.vdocuments.net/reader035/viewer/2022071709/56649d835503460f94a68971/html5/thumbnails/4.jpg)
Compiladores I - 4 -
Programa Compilado (append)
.file "code.c"gcc2_compiled.:.text
.align 2.globl _Append_Append:
pushl %ebpmovl %esp,%ebpsubl $4,%espcmpl $0,8(%ebp)jne L2movl 12(%ebp),%eaxjmp L1.align 2,0x90jmp L3.align 2,0x90
L2:pushl $8call _mallocaddl $4,%espmovl %eax,-4(%ebp)movl -4(%ebp),%eaxmovl 8(%ebp),%edxmovb (%edx),%clmovb %cl,(%eax)pushl 12(%ebp)movl 8(%ebp),%eaxpushl 4(%eax)call _Appendaddl $8,%espmovl %eax,%eaxmovl -4(%ebp),%edxmovl %eax,4(%edx)movl -4(%ebp),%eaxjmp L1.align 2,0x90
L3:L1:
leaveret.align 2
![Page 5: Compiladores I- 1 - COMPARACION PROGRAMA FUENTE Y ENSAMBLADOR GENERADO](https://reader035.vdocuments.net/reader035/viewer/2022071709/56649d835503460f94a68971/html5/thumbnails/5.jpg)
Compiladores I - 5 -
Programa Compilado (PrintCharNode)
.align 2.globl _PrintCharNode_PrintCharNode:
pushl %ebpmovl %esp,%ebpnop
L5:cmpl $0,8(%ebp)je L6decl __iob+20cmpl $0,__iob+20jl L7movl __iob+24,%eaxmovl 8(%ebp),%edxmovb (%edx),%clmovb %cl,(%eax)incl __iob+24jmp L8.align 2,0x90
L7:pushl $__iob+20movl 8(%ebp),%eaxmovsbl (%eax),%edxpushl %edxcall __flsbufaddl $8,%esp
L8:movl 8(%ebp),%eaxmovl 4(%eax),%ecxmovl %ecx,8(%ebp)jmp L5.align 2,0x90
L6:L4:
leaveret
![Page 6: Compiladores I- 1 - COMPARACION PROGRAMA FUENTE Y ENSAMBLADOR GENERADO](https://reader035.vdocuments.net/reader035/viewer/2022071709/56649d835503460f94a68971/html5/thumbnails/6.jpg)
Compiladores I - 6 -
Programa Compilado (StrToCharNode)
.align 2.globl _StrToCharNode_StrToCharNode:
pushl %ebpmovl %esp,%ebpsubl $4,%espmovl 8(%ebp),%eaxcmpb $0,(%eax)jne L10xorl %eax,%eaxjmp L9.align 2,0x90
L10:pushl $8call _mallocaddl $4,%espmovl %eax,-4(%ebp)movl 8(%ebp),%eaxmovb (%eax),%dlcmpb $92,%dlje L12jmp L13.align 2,0x90
L12:incl 8(%ebp)movl -4(%ebp),%eaxmovl 8(%ebp),%edxmovb (%edx),%clmovb %cl,(%eax)incl 8(%ebp)jmp L11.align 2,0x90
L13:movl 8(%ebp),%eaxcmpb $96,(%eax)jle L14movl 8(%ebp),%eaxcmpb $122,(%eax)jg L14movl -4(%ebp),%eaxmovl 8(%ebp),%edxmovb (%edx),%claddb $-32,%clmovb %cl,(%eax)incl 8(%ebp)jmp L15.align 2,0x90
L14:movl -4(%ebp),%eaxmovl 8(%ebp),%edxmovb (%edx),%clmovb %cl,(%eax)incl 8(%ebp)
L15:L11:pushl 8(%ebp)
call _StrToCharNodeaddl $4,%espmovl %eax,%eaxmovl -4(%ebp),%edxmovl %eax,4(%edx)movl -4(%ebp),%eaxjmp L9.align 2,0x90
L9: leaveret
![Page 7: Compiladores I- 1 - COMPARACION PROGRAMA FUENTE Y ENSAMBLADOR GENERADO](https://reader035.vdocuments.net/reader035/viewer/2022071709/56649d835503460f94a68971/html5/thumbnails/7.jpg)
Compiladores I - 7 -
Programa Compilado (main I)
LC0:.ascii "Bon Nadal i \0"LC1:.ascii "Bon Any Nou.\0"LC2:.ascii "\0"LC3:.ascii "\12El gordo es
%f\12\0".align 2
.globl _main_main:
pushl %ebpmovl %esp,%ebpsubl $828,%esppushl %esipushl %ebxcall ___mainpushl $LC0call _StrToCharNodeaddl $4,%espmovl %eax,-816(%ebp)pushl $LC1call _StrToCharNodeaddl $4,%espmovl %eax,-820(%ebp)pushl -816(%ebp)call _PrintCharNodeaddl $4,%esppushl $LC2call _putsaddl $4,%esppushl -820(%ebp)pushl -816(%ebp)call _Appendaddl $8,%esp
movl %eax,-824(%ebp)pushl -824(%ebp)call _PrintCharNodeaddl $4,%espmovl $0,-808(%ebp)
L18:cmpl $9,-808(%ebp)jg L19movl $0,-812(%ebp)
L21:cmpl $19,-812(%ebp)jg L22movl -804(%ebp),%edxmovl %edx,-824(%ebp)sall $8,%edxmovl %edx,-828(%ebp)movl -824(%ebp),%esisubl %esi,-828(%ebp)movl -828(%ebp),%eaxaddl $48,%eaxmovl %eax,-824(%ebp)movl %eax,-828(%ebp)cmpl $0,-828(%ebp)jge L24addl $65535,-828(%ebp)
L24:movl -828(%ebp),%edxsarl $16,%edxmovl %edx,-804(%ebp)movl -804(%ebp),%esimovl %esi,-828(%ebp)movl %esi,%ecx
![Page 8: Compiladores I- 1 - COMPARACION PROGRAMA FUENTE Y ENSAMBLADOR GENERADO](https://reader035.vdocuments.net/reader035/viewer/2022071709/56649d835503460f94a68971/html5/thumbnails/8.jpg)
Compiladores I - 8 -
Programa Compilado (main I)
sall $16,%ecxmovl -824(%ebp),%eaxsubl %ecx,%eaxmovl %eax,-804(%ebp)movl -808(%ebp),%edxmovl %edx,-828(%ebp)sall $2,%edxmovl %edx,-824(%ebp)movl -828(%ebp),%esiaddl %esi,-824(%ebp)sall $4,-824(%ebp)movl -824(%ebp),%eaxaddl %ebp,%eaxmovl %eax,-828(%ebp)addl $-800,%eaxmovl %eax,-824(%ebp)movl -812(%ebp),%edxmovl %edx,-828(%ebp)fildl -804(%ebp)fstps (%eax,%edx,4)
L23: incl -812(%ebp)jmp L21.align 2,0x90
L22:L20: incl -808(%ebp)
jmp L18.align 2,0x90
L19:movl -804(%ebp),%esimovl %esi,-824(%ebp)movl -824(%ebp),%eaxmovl $10,%esicltd
idivl %esimovl %edx,%ecxmovl %eax,-828(%ebp)leal 0(,%ecx,4),%eaxmovl %eax,-824(%ebp)addl %ecx,-824(%ebp)sall $4,-824(%ebp)movl -824(%ebp),%edxaddl %ebp,%edxmovl %edx,-828(%ebp)addl $-800,%edxmovl %edx,-824(%ebp)movl -804(%ebp),%ebxmovl %ebx,%eaxmovl $20,%esicltdidivl %esimovl %edx,%ecxmovl %eax,-828(%ebp)movl -824(%ebp),%eaxflds (%eax,%ecx,4)subl $8,%espfstpl (%esp)pushl $LC3call _printfaddl $12,%esp
L17:leal -836(%ebp),%esppopl %ebxpopl %esileaveret