Addition:C-Programm und Assembler-Darstellungen

Wir betrachten das untenstehende kleine C-Programm und geben Assemblerdarstellungen für Motorola 68000, Intel i386, Sun Sparc, HP Precision Architecture und DEC Alpha-Prozessoren an. Auf allen Architekturen waren UNIX-Derivate als Betriebssystem im Einsatz. Das Programm wurde jeweils mit

cc -S add.c

übersetzt. Auf Intel und Sun wurde der GNU-C-Compiler verwendet.


main() {
       int a, b, c;

       a = 5;
       b = 6;

       c = a + b;
}

Motorola 68000

.text
       .align 1
.globl _main
_main:
       link a6,#-12
       moveq #5,d0
       movel d0,a6@(-4)
       moveq #6,d0
       movel d0,a6@(-8)
       movel a6@(-4),d0
       addl a6@(-8),d0
       movel d0,a6@(-12)
L1:
       unlk a6
       rts

Intel i386

       .file   "test.c"
       .version        "01.01"
gcc2_compiled.:
.text
       .align 16
.globl main
       .type    main,@function
main:
       pushl %ebp
       movl %esp,%ebp
       subl $12,%esp
       movl $5,-4(%ebp)
       movl $6,-8(%ebp)
       movl -4(%ebp),%eax
       addl -8(%ebp),%eax
       movl %eax,-12(%ebp)
.L1:
       movl %ebp,%esp
       popl %ebp
       ret
.Lfe1:
       .size    main,.Lfe1-main
       .ident  "GCC: (GNU) 2.7.0"

Sun Sparc

       .file   "test.c"
gcc2_compiled.:
.section        ".text"
       .align 4
       .global main
       .type    main,#function
       .proc   04
main:
       !#PROLOGUE# 0
       save %sp,-128,%sp
       !#PROLOGUE# 1
       mov 5,%o0
       st %o0,[%fp-20]
       mov 6,%o0
       st %o0,[%fp-24]
       ld [%fp-20],%o0
       ld [%fp-24],%o1
       add %o0,%o1,%o0
       st %o0,[%fp-28]
.LL1:
       ret
       restore
.LLfe1:
       .size    main,.LLfe1-main
       .ident  "GCC: (GNU) 2.8.0"

HP Precision Architecture (HP-PA)

.text
       .align 2
.globl _main
_main:
       copy %r4,%r1
       copy %r30,%r4
       stwm %r1,64(0,%r30)
       ldi 5,%r19
       stw %r19,8(0,%r4)
       ldi 6,%r19
       stw %r19,12(0,%r4)
       ldw 8(0,%r4),%r19
       ldw 12(0,%r4),%r20
       add %r19,%r20,%r19
       stw %r19,16(0,%r4)
L1:
       ldo 64(%r4),%r30
       ldwm -64(0,%r30),%r4
       bv,n 0(%r2)

DEC Alpha

     .ugen
       .verstamp       3 11
       .text
       .align  4
       .file   2 "test.c"
       .globl  main
       .loc    2 2
#    1
#    2 main() {
       .ent    main 2
main:
       .option O1
       ldgp    $gp, 0($27)
       lda     $sp, -32($sp)
       .frame  $sp, 32, $26, 0
       .prologue       1
       .loc    2 2

       .loc    2 5
#    3         int a, b, c;
#    4
#    5         a = 5;
       ldil    $1, 5
       stl     $1, 24($sp)
       .loc    2 6
#    6         b = 6;
       ldil    $2, 6
       stl     $2, 16($sp)
       .loc    2 8
#    7
#    8         c = a + b;
       ldil    $3, 11
       stl     $3, 8($sp)
       .loc    2 9
#    9 }
       bis     $31, $31, $0
       .livereg        0xFC7F0002,0x3FC00000
       lda     $sp, 32($sp)
       ret     $31, ($26), 1
       .end    main