/* addbetr.c 31.12.2000 kw
* Kleines Beispiel
*/
int betrag( int wert )
{
if( wert<0 )
{
return -wert;
}
else
{
return wert;
}
}
int addierebetraege( int summand1, int summand2 )
{
int summe;
summe = betrag( summand1 ) + betrag( summand2 );
return summe;
}
int main( int nargs, char **args )
{
int i, j, erg;
i = 12;
j = 13;
erg = addierebetraege( i, j );
return 0;
}
.text
; 1:addbetr.c **** /* addbetr.c 31.12.2000 kw
; 2:addbetr.c **** * Kleines Beispiel
; 3:addbetr.c **** */
; 4:addbetr.c ****
; 5:addbetr.c **** int betrag( int wert )
.globl betrag
.type betrag,@function
; 6:addbetr.c **** {
betrag:
0000 55 pushl %ebp
0001 89E5 movl %esp,%ebp
; 7:addbetr.c **** if( wert<0 )
0003 837D0800 cmpl $0,8(%ebp)
0007 7D0B jge .L3
; 8:addbetr.c **** {
; 9:addbetr.c **** return -wert;
0009 8B5508 movl 8(%ebp),%edx
000c F7DA negl %edx
000e 89D0 movl %edx,%eax
0010 EB0E jmp .L2
; 10:addbetr.c **** }
0012 EB0C jmp .L4
.L3:
; 11:addbetr.c **** else
; 12:addbetr.c **** {
; 13:addbetr.c **** return wert;
0014 8B5508 movl 8(%ebp),%edx
0017 89D0 movl %edx,%eax
0019 EB05 jmp .L2
001b 908D7426 .p2align 4,,7
00
.L4:
; 14:addbetr.c **** }
; 15:addbetr.c **** }
.L2:
0020 89EC movl %ebp,%esp
0022 5D popl %ebp
0023 C3 ret
0024 8DB60000 .align 16
00008DBF
00000000
; 16:addbetr.c ****
; 17:addbetr.c **** int addierebetraege( int summand1, int summand2 )
; 18:addbetr.c **** {
.globl addierebetraege
.type addierebetraege,@function
addierebetraege:
0030 55 pushl %ebp
0031 89E5 movl %esp,%ebp
0033 83EC14 subl $20,%esp
0036 53 pushl %ebx
; 19:addbetr.c **** int summe;
; 20:addbetr.c ****
; 21:addbetr.c **** summe = betrag( summand1 ) + betrag( summand2 );
0037 83C4F4 addl $-12,%esp
003a 8B4508 movl 8(%ebp),%eax
003d 50 pushl %eax
003e E8FCFFFF call betrag
0043 83C410 addl $16,%esp
0046 89C3 movl %eax,%ebx
0048 83C4F4 addl $-12,%esp
004b 8B450C movl 12(%ebp),%eax
004e 50 pushl %eax
004f E8FCFFFF call betrag
FF
0054 83C410 addl $16,%esp
0057 89C0 movl %eax,%eax
0059 8D1418 leal (%eax,%ebx),%edx
005c 8955FC movl %edx,-4(%ebp)
; 22:addbetr.c ****
; 23:addbetr.c **** return summe;
005f 8B55FC movl -4(%ebp),%edx
0062 89D0 movl %edx,%eax
0064 EB00 jmp .L5
; 24:addbetr.c **** }
.L5:
0066 8B5DE8 movl -24(%ebp),%ebx
0069 89EC movl %ebp,%esp
006b 5D popl %ebp
006c C3 ret
006d 8D7600 .align 16
; 25:addbetr.c ****
; 26:addbetr.c **** int main( int nargs, char **args )
; 27:addbetr.c **** {
.globl main
.type main,@function
main:
0070 55 pushl %ebp
0071 89E5 movl %esp,%ebp
0073 83EC18 subl $24,%esp
; 28:addbetr.c **** int i, j, erg;
; 29:addbetr.c ****
; 30:addbetr.c **** i = 12;
0076 C745FC0C movl $12,-4(%ebp)
000000
; 31:addbetr.c **** j = 13;
007d C745F80D movl $13,-8(%ebp)
000000
; 32:addbetr.c ****
; 33:addbetr.c **** erg = addierebetraege( i, j );
0084 83C4F8 addl $-8,%esp
0087 8B45F8 movl -8(%ebp),%eax
008a 50 pushl %eax
008b 8B45FC movl -4(%ebp),%eax
008e 50 pushl %eax
008f E8FCFFFF call addierebetraege
FF
0094 83C410 addl $16,%esp
0097 89C0 movl %eax,%eax
0099 8945F4 movl %eax,-12(%ebp)
; 34:addbetr.c ****
; 35:addbetr.c **** return 0;
009c 31C0 xorl %eax,%eax
009e EB00 jmp .L6
; 36:addbetr.c **** }
.p2align 4,,7
.L6:
00a0 89EC movl %ebp,%esp
00a2 5D popl %ebp
00a3 C3 ret
Ein Intel-Prozessor führt beim Befehl call folgendes aus: