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
ü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