0% found this document useful (0 votes)
5 views

C programming Pointers

The document provides a detailed explanation of a C function 'swap' that exchanges the values of two integers using pointers. It includes multiple code snippets and their corresponding assembly language translations, illustrating the function's execution and memory management. The document emphasizes the importance of pointers in manipulating data directly in memory.

Uploaded by

lindsay.yareth
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
5 views

C programming Pointers

The document provides a detailed explanation of a C function 'swap' that exchanges the values of two integers using pointers. It includes multiple code snippets and their corresponding assembly language translations, illustrating the function's execution and memory management. The document emphasizes the importance of pointers in manipulating data directly in memory.

Uploaded by

lindsay.yareth
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 120

Pointers in Assembly

Adalbert Gerald Soosai Raj


swap() in C
void swap(int *px, int *py)
{
int x = *px;
int y = *py;

*px = y;
*py = x;
}

int main()
{
int x = 1;
int y = 2;
swap(&x, &y);
}
void swap(int *px, int *py)
{
int x = *px;
int y = *py;

*px = y;
*py = x;
}

int main()
{
int x = 1;
int y = 2;
swap(&x, &y);
}
void swap(int *px, int *py)
{
int x = *px;
int y = *py;

*px = y;
*py = x;
}

int main()
{
int x = 1;
int y = 2;
swap(&x, &y);
}
x: 1

0x108
void swap(int *px, int *py)
{
int x = *px;
int y = *py;

*px = y;
*py = x;
}

int main()
{
int x = 1;
int y = 2;
swap(&x, &y);
}
x: 1

0x108
void swap(int *px, int *py)
{
int x = *px;
int y = *py;

*px = y;
*py = x;
}

int main()
{
int x = 1;
int y = 2;
swap(&x, &y);
}
x: 1 y: 2

0x108 0x104
void swap(int *px, int *py)
{
int x = *px;
int y = *py;

*px = y;
*py = x;
}

int main()
{
int x = 1;
int y = 2;
swap(&x, &y);
}
x: 1 y: 2

0x108 0x104
void swap(int *px, int *py)
{
int x = *px;
int y = *py;

*px = y;
*py = x;
}

int main()
{
int x = 1;
int y = 2;
swap(&x, &y);
}
x: 1 y: 2

0x108 0x104
void swap(int *px, int *py)
{
int x = *px;
int y = *py;

*px = y;
*py = x; 0x200
} px:

int main()
{
int x = 1;
int y = 2;
swap(&x, &y);
}
x: 1 y: 2

0x108 0x104
void swap(int *px, int *py)
{
int x = *px;
int y = *py;

*px = y;
*py = x; 0x200
} px: 0x108

int main()
{
int x = 1;
int y = 2;
swap(&x, &y);
}
x: 1 y: 2

0x108 0x104
void swap(int *px, int *py)
{
int x = *px;
int y = *py;

*px = y;
*py = x; 0x200
} px: 0x108

int main()
{
int x = 1;
int y = 2;
swap(&x, &y);
}
x: 1 y: 2

0x108 0x104
void swap(int *px, int *py)
{
int x = *px;
int y = *py;

*px = y;
*py = x; 0x200 0x204
} px: 0x108 py:

int main()
{
int x = 1;
int y = 2;
swap(&x, &y);
}
x: 1 y: 2

0x108 0x104
void swap(int *px, int *py)
{
int x = *px;
int y = *py;

*px = y;
*py = x; 0x200 0x204
} px: 0x108 py: 0x104

int main()
{
int x = 1;
int y = 2;
swap(&x, &y);
}
x: 1 y: 2

0x108 0x104
void swap(int *px, int *py)
{
int x = *px;
int y = *py;

*px = y;
*py = x; 0x200 0x204
} px: 0x108 py: 0x104

int main()
{
int x = 1;
int y = 2;
swap(&x, &y);
}
x: 1 y: 2

0x108 0x104
void swap(int *px, int *py)
{
int x = *px;
int y = *py;

*px = y;
*py = x; 0x200 0x204
} px: 0x108 py: 0x104

int main()
{
int x = 1;
int y = 2;
swap(&x, &y);
}
x: 1 y: 2

0x108 0x104
void swap(int *px, int *py) x: 1
{
0x308
int x = *px;
int y = *py;

*px = y;
*py = x; 0x200 0x204
} px: 0x108 py: 0x104

int main()
{
int x = 1;
int y = 2;
swap(&x, &y);
}
x: 1 y: 2

0x108 0x104
void swap(int *px, int *py) x: 1
{
0x308
int x = *px;
int y = *py;

*px = y;
*py = x; 0x200 0x204
} px: 0x108 py: 0x104

int main()
{
int x = 1;
int y = 2;
swap(&x, &y);
}
x: 1 y: 2

0x108 0x104
void swap(int *px, int *py) x: 1 y: 2
{
0x308 0x304
int x = *px;
int y = *py;

*px = y;
*py = x; 0x200 0x204
} px: 0x108 py: 0x104

int main()
{
int x = 1;
int y = 2;
swap(&x, &y);
}
x: 1 y: 2

0x108 0x104
void swap(int *px, int *py) x: 1 y: 2
{
0x308 0x304
int x = *px;
int y = *py;

*px = y;
*py = x; 0x200 0x204
} px: 0x108 py: 0x104

int main()
{
int x = 1;
int y = 2;
swap(&x, &y);
}
x: 1 y: 2

0x108 0x104
void swap(int *px, int *py) x: 1 y: 2
{
0x308 0x304
int x = *px;
int y = *py;

*px = y;
*py = x; 0x200 0x204
} px: 0x108 py: 0x104

int main()
{
int x = 1;
int y = 2;
swap(&x, &y);
}
x: 2 y: 2

0x108 0x104
void swap(int *px, int *py) x: 1 y: 2
{
0x308 0x304
int x = *px;
int y = *py;

*px = y;
*py = x; 0x200 0x204
} px: 0x108 py: 0x104

int main()
{
int x = 1;
int y = 2;
swap(&x, &y);
}
x: 2 y: 2

0x108 0x104
void swap(int *px, int *py) x: 1 y: 2
{
0x308 0x304
int x = *px;
int y = *py;

*px = y;
*py = x; 0x200 0x204
} px: 0x108 py: 0x104

int main()
{
int x = 1;
int y = 2;
swap(&x, &y);
}
x: 2 y: 1

0x108 0x104
void swap(int *px, int *py) x: 1 y: 2
{
0x308 0x304
int x = *px;
int y = *py;

*px = y;
*py = x; 0x200 0x204
} px: 0x108 py: 0x104

int main()
{
int x = 1;
int y = 2;
swap(&x, &y);
}
x: 2 y: 1

0x108 0x104
void swap(int *px, int *py)
{
int x = *px;
int y = *py;

*px = y;
*py = x;
}

int main()
{
int x = 1;
int y = 2;
swap(&x, &y);
}
x: 2 y: 1

0x108 0x104
void swap(int *px, int *py)
{
int x = *px;
int y = *py;

*px = y; Control returns to main!


*py = x;
}

int main()
{
int x = 1;
int y = 2;
swap(&x, &y);
}
x: 2 y: 1

0x108 0x104
Assembly
main() function
main:
pushl %ebp caller’s frame
movl %esp, %ebp return address %esp
subl $16, %esp
movl $1, -4(%ebp)
movl $2, -8(%ebp)
leal -8(%ebp), %eax
pushl %eax
leal -4(%ebp), %eax
pushl %eax
call swap
addl $8, %esp
leave
ret
main:
pushl %ebp caller’s frame
movl %esp, %ebp return address %esp
subl $16, %esp
movl $1, -4(%ebp)
movl $2, -8(%ebp)
leal -8(%ebp), %eax
pushl %eax
leal -4(%ebp), %eax
pushl %eax
call swap
addl $8, %esp
leave
ret
main:
pushl %ebp caller’s frame
movl %esp, %ebp return address
subl $16, %esp
Saved %ebp %esp
movl $1, -4(%ebp)
movl $2, -8(%ebp)
leal -8(%ebp), %eax
pushl %eax
leal -4(%ebp), %eax
pushl %eax
call swap
addl $8, %esp
leave
ret
main:
pushl %ebp caller’s frame
movl %esp, %ebp return address
subl $16, %esp
Saved %ebp %esp
movl $1, -4(%ebp)
movl $2, -8(%ebp)
leal -8(%ebp), %eax
pushl %eax
leal -4(%ebp), %eax
pushl %eax
call swap
addl $8, %esp
leave
ret
main:
pushl %ebp caller’s frame
movl %esp, %ebp return address
subl $16, %esp
%ebp Saved %ebp %esp
movl $1, -4(%ebp)
movl $2, -8(%ebp)
leal -8(%ebp), %eax
pushl %eax
leal -4(%ebp), %eax
pushl %eax
call swap
addl $8, %esp
leave
ret
main:
pushl %ebp caller’s frame
movl %esp, %ebp return address
subl $16, %esp
%ebp Saved %ebp %esp
movl $1, -4(%ebp)
movl $2, -8(%ebp)
leal -8(%ebp), %eax
pushl %eax
leal -4(%ebp), %eax
pushl %eax
call swap
addl $8, %esp
leave
ret
main:
pushl %ebp caller’s frame
movl %esp, %ebp return address
subl $16, %esp
%ebp Saved %ebp
movl $1, -4(%ebp)
movl $2, -8(%ebp)
leal -8(%ebp), %eax
pushl %eax
leal -4(%ebp), %eax
pushl %eax %esp
call swap
addl $8, %esp
leave
ret
main:
pushl %ebp caller’s frame
movl %esp, %ebp return address
subl $16, %esp
%ebp Saved %ebp
movl $1, -4(%ebp)
movl $2, -8(%ebp)
leal -8(%ebp), %eax
pushl %eax
leal -4(%ebp), %eax
pushl %eax %esp
call swap
addl $8, %esp
leave
ret
main:
pushl %ebp caller’s frame
movl %esp, %ebp return address
subl $16, %esp
%ebp Saved %ebp
movl $1, -4(%ebp)
movl $2, -8(%ebp) 1
leal -8(%ebp), %eax
pushl %eax
leal -4(%ebp), %eax
pushl %eax %esp
call swap
addl $8, %esp
leave
ret
main:
pushl %ebp caller’s frame
movl %esp, %ebp return address
subl $16, %esp
%ebp Saved %ebp
movl $1, -4(%ebp)
movl $2, -8(%ebp) x: 1
leal -8(%ebp), %eax
pushl %eax
leal -4(%ebp), %eax
pushl %eax %esp
call swap
addl $8, %esp
leave
ret
main:
pushl %ebp caller’s frame
movl %esp, %ebp return address
subl $16, %esp
%ebp Saved %ebp
movl $1, -4(%ebp)
movl $2, -8(%ebp) x: 1 0x108
leal -8(%ebp), %eax
pushl %eax
leal -4(%ebp), %eax
pushl %eax %esp
call swap
addl $8, %esp
leave
ret
main:
pushl %ebp caller’s frame
movl %esp, %ebp return address
subl $16, %esp
%ebp Saved %ebp
movl $1, -4(%ebp)
movl $2, -8(%ebp) x: 1 0x108
leal -8(%ebp), %eax
pushl %eax
leal -4(%ebp), %eax
pushl %eax %esp
call swap
addl $8, %esp
leave
ret
main:
pushl %ebp caller’s frame
movl %esp, %ebp return address
subl $16, %esp
%ebp Saved %ebp
movl $1, -4(%ebp)
movl $2, -8(%ebp) x: 1 0x108
leal -8(%ebp), %eax 2
pushl %eax
leal -4(%ebp), %eax
pushl %eax %esp
call swap
addl $8, %esp
leave
ret
main:
pushl %ebp caller’s frame
movl %esp, %ebp return address
subl $16, %esp
%ebp Saved %ebp
movl $1, -4(%ebp)
movl $2, -8(%ebp) x: 1 0x108
leal -8(%ebp), %eax y: 2
pushl %eax
leal -4(%ebp), %eax
pushl %eax %esp
call swap
addl $8, %esp
leave
ret
main:
pushl %ebp caller’s frame
movl %esp, %ebp return address
subl $16, %esp
%ebp Saved %ebp
movl $1, -4(%ebp)
movl $2, -8(%ebp) x: 1 0x108
leal -8(%ebp), %eax y: 2 0x104
pushl %eax
leal -4(%ebp), %eax
pushl %eax %esp
call swap
addl $8, %esp
leave
ret
main:
pushl %ebp caller’s frame
movl %esp, %ebp return address
subl $16, %esp
%ebp Saved %ebp
movl $1, -4(%ebp)
movl $2, -8(%ebp) x: 1 0x108
leal -8(%ebp), %eax y: 2 0x104
pushl %eax
leal -4(%ebp), %eax
pushl %eax %esp
call swap
addl $8, %esp
leave
ret
main:
pushl %ebp caller’s frame
movl %esp, %ebp return address
subl $16, %esp
%ebp Saved %ebp
movl $1, -4(%ebp)
movl $2, -8(%ebp) x: 1 0x108
leal -8(%ebp), %eax y: 2 0x104
pushl %eax
leal -4(%ebp), %eax
pushl %eax %esp
call swap
addl $8, %esp
leave
ret

-8(%ebp) = -8 + R[%ebp] = 0x104


main:
pushl %ebp caller’s frame
movl %esp, %ebp return address
subl $16, %esp
%ebp Saved %ebp
movl $1, -4(%ebp)
movl $2, -8(%ebp) x: 1 0x108
leal -8(%ebp), %eax y: 2 0x104
pushl %eax
leal -4(%ebp), %eax
pushl %eax %esp
call swap
addl $8, %esp
leave
ret
main:
pushl %ebp caller’s frame
movl %esp, %ebp return address
subl $16, %esp
%ebp Saved %ebp
movl $1, -4(%ebp)
movl $2, -8(%ebp) x: 1 0x108
leal -8(%ebp), %eax y: 2 0x104
pushl %eax
leal -4(%ebp), %eax
pushl %eax %esp
call swap
addl $8, %esp
leave
ret
%eax
0x104
main:
pushl %ebp caller’s frame
movl %esp, %ebp return address
subl $16, %esp
%ebp Saved %ebp
movl $1, -4(%ebp)
movl $2, -8(%ebp) x: 1 0x108
leal -8(%ebp), %eax y: 2 0x104
pushl %eax
leal -4(%ebp), %eax
pushl %eax %esp
call swap
addl $8, %esp
leave
ret
%eax
0x104
&y
main:
pushl %ebp caller’s frame
movl %esp, %ebp return address
subl $16, %esp
%ebp Saved %ebp
movl $1, -4(%ebp)
movl $2, -8(%ebp) x: 1 0x108
leal -8(%ebp), %eax y: 2 0x104
pushl %eax
leal -4(%ebp), %eax
pushl %eax
call swap 0x104 %esp
addl $8, %esp
leave
ret
%eax
0x104
&y
main:
pushl %ebp caller’s frame
movl %esp, %ebp return address
subl $16, %esp
%ebp Saved %ebp
movl $1, -4(%ebp)
movl $2, -8(%ebp) x: 1 0x108
leal -8(%ebp), %eax y: 2 0x104
pushl %eax
leal -4(%ebp), %eax
pushl %eax
call swap py: 0x104
&y %esp
addl $8, %esp
leave
ret
%eax
0x104
&y
main:
pushl %ebp caller’s frame
movl %esp, %ebp return address
subl $16, %esp
%ebp Saved %ebp
movl $1, -4(%ebp)
movl $2, -8(%ebp) x: 1 0x108
leal -8(%ebp), %eax y: 2 0x104
pushl %eax
leal -4(%ebp), %eax
pushl %eax
call swap py: 0x104
&y %esp
addl $8, %esp
leave
ret
%eax
0x104
&y
main:
pushl %ebp caller’s frame
movl %esp, %ebp return address
subl $16, %esp
%ebp Saved %ebp
movl $1, -4(%ebp)
movl $2, -8(%ebp) x: 1 0x108
leal -8(%ebp), %eax y: 2 0x104
pushl %eax
leal -4(%ebp), %eax
pushl %eax
call swap py: 0x104
&y %esp
addl $8, %esp
leave
ret

-4(%ebp) = -8 +%eax
R[%ebp] = 0x108
0x104
&y
main:
pushl %ebp caller’s frame
movl %esp, %ebp return address
subl $16, %esp
%ebp Saved %ebp
movl $1, -4(%ebp)
movl $2, -8(%ebp) x: 1 0x108
leal -8(%ebp), %eax y: 2 0x104
pushl %eax
leal -4(%ebp), %eax
pushl %eax
call swap py: 0x104
&y %esp
addl $8, %esp
leave
ret
%eax
0x104
&y
main:
pushl %ebp caller’s frame
movl %esp, %ebp return address
subl $16, %esp
%ebp Saved %ebp
movl $1, -4(%ebp)
movl $2, -8(%ebp) x: 1 0x108
leal -8(%ebp), %eax y: 2 0x104
pushl %eax
leal -4(%ebp), %eax
pushl %eax
call swap py: 0x104
&y %esp
addl $8, %esp
leave
ret
%eax
0x108
main:
pushl %ebp caller’s frame
movl %esp, %ebp return address
subl $16, %esp
%ebp Saved %ebp
movl $1, -4(%ebp)
movl $2, -8(%ebp) x: 1 0x108
leal -8(%ebp), %eax y: 2 0x104
pushl %eax
leal -4(%ebp), %eax
pushl %eax
call swap py: 0x104
&y %esp
addl $8, %esp
leave
ret
%eax
0x108
&x
main:
pushl %ebp caller’s frame
movl %esp, %ebp return address
subl $16, %esp
%ebp Saved %ebp
movl $1, -4(%ebp)
movl $2, -8(%ebp) x: 1 0x108
leal -8(%ebp), %eax y: 2 0x104
pushl %eax
leal -4(%ebp), %eax
pushl %eax
call swap py: 0x104
&y
addl $8, %esp 0x108 %esp
leave
ret
%eax
0x108
&x
main:
pushl %ebp caller’s frame
movl %esp, %ebp return address
subl $16, %esp
%ebp Saved %ebp
movl $1, -4(%ebp)
movl $2, -8(%ebp) x: 1 0x108
leal -8(%ebp), %eax y: 2 0x104
pushl %eax
leal -4(%ebp), %eax
pushl %eax
call swap py: 0x104
&y
addl $8, %esp px: 0x108
&x %esp
leave
ret
%eax
0x108
&x
main:
pushl %ebp caller’s frame
movl %esp, %ebp return address
subl $16, %esp
%ebp Saved %ebp
movl $1, -4(%ebp)
movl $2, -8(%ebp) x: 1 0x108
leal -8(%ebp), %eax y: 2 0x104
pushl %eax
leal -4(%ebp), %eax
pushl %eax
call swap py: 0x104
&y
addl $8, %esp px: 0x108
&x %esp
leave
ret
%eax
0x108
&x
main:
pushl %ebp caller’s frame
movl %esp, %ebp return address
subl $16, %esp
%ebp Saved %ebp
movl $1, -4(%ebp)
movl $2, -8(%ebp) x: 1 0x108
leal -8(%ebp), %eax y: 2 0x104
pushl %eax
leal -4(%ebp), %eax
pushl %eax
call swap py: 0x104
&y
addl $8, %esp px: 0x108
&x
leave
return address %esp
ret
%eax
0x108
&x
swap() function
swap:
pushl %ebp x: 1 0x108
movl %esp, %ebp y: 2 0x104
subl $16, %esp
movl 8(%ebp), %eax
py: 0x104

movl (%eax), %eax px: 0x108


movl %eax, -4(%ebp) return address %esp
movl 12(%ebp), %eax
movl (%eax), %eax
movl %eax, -8(%ebp)
movl 8(%ebp), %eax
movl -8(%ebp), %edx
movl %edx, (%eax)
movl 12(%ebp), %eax
movl -4(%ebp), %edx
movl %edx, (%eax)
leave
ret
swap:
pushl %ebp x: 1 0x108
movl %esp, %ebp 8 wasted y:
bytes not
2 0x104
subl $16, %esp
movl 8(%ebp), %eax
shown here! py: 0x104

movl (%eax), %eax px: 0x108


movl %eax, -4(%ebp) return address %esp
movl 12(%ebp), %eax
movl (%eax), %eax
movl %eax, -8(%ebp)
movl 8(%ebp), %eax
movl -8(%ebp), %edx
movl %edx, (%eax)
movl 12(%ebp), %eax
movl -4(%ebp), %edx
movl %edx, (%eax)
leave
ret
swap:
pushl %ebp x: 1 0x108
movl %esp, %ebp y: 2 0x104
subl $16, %esp
movl 8(%ebp), %eax
py: 0x104

movl (%eax), %eax px: 0x108


movl %eax, -4(%ebp) return address %esp
movl 12(%ebp), %eax
movl (%eax), %eax
movl %eax, -8(%ebp)
movl 8(%ebp), %eax
movl -8(%ebp), %edx
movl %edx, (%eax)
movl 12(%ebp), %eax
movl -4(%ebp), %edx
movl %edx, (%eax)
leave
ret
swap:
pushl %ebp x: 1 0x108
movl %esp, %ebp y: 2 0x104
subl $16, %esp
movl 8(%ebp), %eax
py: 0x104

movl (%eax), %eax px: 0x108


movl %eax, -4(%ebp) return address
movl 12(%ebp), %eax
Saved %ebp %esp
movl (%eax), %eax
movl %eax, -8(%ebp)
movl 8(%ebp), %eax
movl -8(%ebp), %edx
movl %edx, (%eax)
movl 12(%ebp), %eax
movl -4(%ebp), %edx
movl %edx, (%eax)
leave
ret
swap:
pushl %ebp x: 1 0x108
movl %esp, %ebp y: 2 0x104
subl $16, %esp
movl 8(%ebp), %eax
py: 0x104

movl (%eax), %eax px: 0x108


movl %eax, -4(%ebp) return address
movl 12(%ebp), %eax
Saved %ebp %esp
movl (%eax), %eax
movl %eax, -8(%ebp)
movl 8(%ebp), %eax
movl -8(%ebp), %edx
movl %edx, (%eax)
movl 12(%ebp), %eax
movl -4(%ebp), %edx
movl %edx, (%eax)
leave
ret
swap:
pushl %ebp x: 1 0x108
movl %esp, %ebp y: 2 0x104
subl $16, %esp
movl 8(%ebp), %eax
py: 0x104

movl (%eax), %eax px: 0x108


movl %eax, -4(%ebp) return address
movl 12(%ebp), %eax
%ebp Saved %ebp %esp
movl (%eax), %eax
movl %eax, -8(%ebp)
movl 8(%ebp), %eax
movl -8(%ebp), %edx
movl %edx, (%eax)
movl 12(%ebp), %eax
movl -4(%ebp), %edx
movl %edx, (%eax)
leave
ret
swap:
pushl %ebp x: 1 0x108
movl %esp, %ebp y: 2 0x104
subl $16, %esp
movl 8(%ebp), %eax
py: 0x104

movl (%eax), %eax px: 0x108


movl %eax, -4(%ebp) return address
movl 12(%ebp), %eax
%ebp Saved %ebp %esp
movl (%eax), %eax
movl %eax, -8(%ebp)
movl 8(%ebp), %eax
movl -8(%ebp), %edx
movl %edx, (%eax)
movl 12(%ebp), %eax
movl -4(%ebp), %edx
movl %edx, (%eax)
leave
ret
swap:
pushl %ebp x: 1 0x108
movl %esp, %ebp y: 2 0x104
subl $16, %esp
movl 8(%ebp), %eax
py: 0x104

movl (%eax), %eax px: 0x108


movl %eax, -4(%ebp) return address
movl 12(%ebp), %eax
%ebp Saved %ebp
movl (%eax), %eax
movl %eax, -8(%ebp)
movl 8(%ebp), %eax
movl -8(%ebp), %edx
movl %edx, (%eax)
%esp
movl 12(%ebp), %eax
movl -4(%ebp), %edx
movl %edx, (%eax)
leave
ret
swap:
pushl %ebp x: 1 0x108
movl %esp, %ebp y: 2 0x104
subl $16, %esp
movl 8(%ebp), %eax
py: 0x104

movl (%eax), %eax px: 0x108


movl %eax, -4(%ebp) return address
movl 12(%ebp), %eax
%ebp Saved %ebp
movl (%eax), %eax
movl %eax, -8(%ebp)
movl 8(%ebp), %eax
movl -8(%ebp), %edx
movl %edx, (%eax)
%esp
movl 12(%ebp), %eax
movl -4(%ebp), %edx
movl %edx, (%eax)
leave
ret
swap:
pushl %ebp x: 1 0x108
movl %esp, %ebp y: 2 0x104
subl $16, %esp
movl 8(%ebp), %eax
py: 0x104

movl (%eax), %eax px: 0x108


movl %eax, -4(%ebp) return address
movl 12(%ebp), %eax
%ebp Saved %ebp
movl (%eax), %eax
movl %eax, -8(%ebp)
movl 8(%ebp), %eax
movl -8(%ebp), %edx
movl %edx, (%eax)
%esp
movl 12(%ebp), %eax
movl -4(%ebp), %edx %eax
movl %edx, (%eax)
0x108
leave
ret
swap:
pushl %ebp x: 1 0x108
movl %esp, %ebp y: 2 0x104
subl $16, %esp
movl 8(%ebp), %eax
py: 0x104

movl (%eax), %eax px: 0x108


movl %eax, -4(%ebp) return address
movl 12(%ebp), %eax
%ebp Saved %ebp
movl (%eax), %eax
movl %eax, -8(%ebp)
movl 8(%ebp), %eax
movl -8(%ebp), %edx
movl %edx, (%eax)
%esp
movl 12(%ebp), %eax
movl -4(%ebp), %edx %eax
movl %edx, (%eax)
0x108
leave
ret
swap:
pushl %ebp x: 1 0x108
movl %esp, %ebp y: 2 0x104
subl $16, %esp
movl 8(%ebp), %eax
py: 0x104

movl (%eax), %eax px: 0x108


movl %eax, -4(%ebp) return address
movl 12(%ebp), %eax
%ebp Saved %ebp
movl (%eax), %eax
movl %eax, -8(%ebp)
movl 8(%ebp), %eax
(%eax) = M[0x108] = 1
movl
movl
-8(%ebp), %edx
%edx, (%eax)
%esp
movl 12(%ebp), %eax
movl -4(%ebp), %edx %eax
movl %edx, (%eax)
0x108
leave
ret
swap:
pushl %ebp x: 1 0x108
movl %esp, %ebp y: 2 0x104
subl $16, %esp
movl 8(%ebp), %eax
py: 0x104

movl (%eax), %eax px: 0x108


movl %eax, -4(%ebp) return address
movl 12(%ebp), %eax
%ebp Saved %ebp
movl (%eax), %eax
movl %eax, -8(%ebp)
movl 8(%ebp), %eax
movl -8(%ebp), %edx
movl %edx, (%eax)
%esp
movl 12(%ebp), %eax
movl -4(%ebp), %edx %eax
movl %edx, (%eax)
1
leave
ret
swap:
pushl %ebp x: 1 0x108
movl %esp, %ebp y: 2 0x104
subl $16, %esp
movl 8(%ebp), %eax
py: 0x104

movl (%eax), %eax px: 0x108


movl %eax, -4(%ebp) return address
movl 12(%ebp), %eax
%ebp Saved %ebp
movl (%eax), %eax
movl %eax, -8(%ebp)
movl 8(%ebp), %eax
movl -8(%ebp), %edx
movl %edx, (%eax)
%esp
movl 12(%ebp), %eax
movl -4(%ebp), %edx %eax
movl %edx, (%eax)
1
leave
ret
swap:
pushl %ebp x: 1 0x108
movl %esp, %ebp y: 2 0x104
subl $16, %esp
movl 8(%ebp), %eax
py: 0x104

movl (%eax), %eax px: 0x108


movl %eax, -4(%ebp) return address
movl 12(%ebp), %eax
%ebp Saved %ebp
movl (%eax), %eax
movl %eax, -8(%ebp) 1

movl 8(%ebp), %eax


movl -8(%ebp), %edx
movl %edx, (%eax)
%esp
movl 12(%ebp), %eax
movl -4(%ebp), %edx %eax
movl %edx, (%eax)
1
leave
ret
swap:
pushl %ebp x: 1 0x108
movl %esp, %ebp y: 2 0x104
subl $16, %esp
movl 8(%ebp), %eax
py: 0x104

movl (%eax), %eax px: 0x108


movl %eax, -4(%ebp) return address
movl 12(%ebp), %eax
%ebp Saved %ebp
movl (%eax), %eax
movl %eax, -8(%ebp) x: 1 in swap()
movl 8(%ebp), %eax
movl -8(%ebp), %edx
movl %edx, (%eax)
%esp
movl 12(%ebp), %eax
movl -4(%ebp), %edx %eax
movl %edx, (%eax)
1
leave
ret
swap:
pushl %ebp x: 1 0x108
movl %esp, %ebp y: 2 0x104
subl $16, %esp
movl 8(%ebp), %eax
py: 0x104

movl (%eax), %eax px: 0x108


movl %eax, -4(%ebp) return address
movl 12(%ebp), %eax
%ebp Saved %ebp
movl (%eax), %eax
movl %eax, -8(%ebp) x: 1 in swap()
movl 8(%ebp), %eax
movl -8(%ebp), %edx
movl %edx, (%eax)
%esp
movl 12(%ebp), %eax
movl -4(%ebp), %edx %eax
movl %edx, (%eax)
1
leave
ret
swap:
pushl %ebp x: 1 0x108
movl %esp, %ebp y: 2 0x104
subl $16, %esp
movl 8(%ebp), %eax
py: 0x104

movl (%eax), %eax px: 0x108


movl %eax, -4(%ebp) return address
movl 12(%ebp), %eax
%ebp Saved %ebp
movl (%eax), %eax
movl %eax, -8(%ebp) x: 1 in swap()
movl 8(%ebp), %eax
movl -8(%ebp), %edx
movl %edx, (%eax)
%esp
movl 12(%ebp), %eax
movl -4(%ebp), %edx %eax
movl %edx, (%eax)
0x104
leave
ret
swap:
pushl %ebp x: 1 0x108
movl %esp, %ebp y: 2 0x104
subl $16, %esp
movl 8(%ebp), %eax
py: 0x104

movl (%eax), %eax px: 0x108


movl %eax, -4(%ebp) return address
movl 12(%ebp), %eax
%ebp Saved %ebp
movl (%eax), %eax
movl %eax, -8(%ebp) x: 1 in swap()
movl 8(%ebp), %eax
movl -8(%ebp), %edx
movl %edx, (%eax)
%esp
movl 12(%ebp), %eax
movl -4(%ebp), %edx %eax
movl %edx, (%eax)
0x104
leave
ret
swap:
pushl %ebp x: 1 0x108
movl %esp, %ebp y: 2 0x104
subl $16, %esp
movl 8(%ebp), %eax
py: 0x104

movl (%eax), %eax px: 0x108


movl %eax, -4(%ebp) return address
movl 12(%ebp), %eax
%ebp Saved %ebp
movl (%eax), %eax
movl %eax, -8(%ebp) x: 1 in swap()
movl 8(%ebp), %eax
movl -8(%ebp), %edx
(%eax) = M[0x104] = 2
movl %edx, (%eax)
%esp
movl 12(%ebp), %eax
movl -4(%ebp), %edx %eax
movl %edx, (%eax)
0x104
leave
ret
swap:
pushl %ebp x: 1 0x108
movl %esp, %ebp y: 2 0x104
subl $16, %esp
movl 8(%ebp), %eax
py: 0x104

movl (%eax), %eax px: 0x108


movl %eax, -4(%ebp) return address
movl 12(%ebp), %eax
%ebp Saved %ebp
movl (%eax), %eax
movl %eax, -8(%ebp) x: 1 in swap()
movl 8(%ebp), %eax
movl -8(%ebp), %edx
movl %edx, (%eax)
%esp
movl 12(%ebp), %eax
movl -4(%ebp), %edx %eax
movl %edx, (%eax)
0x104
leave
ret
swap:
pushl %ebp x: 1 0x108
movl %esp, %ebp y: 2 0x104
subl $16, %esp
movl 8(%ebp), %eax
py: 0x104

movl (%eax), %eax px: 0x108


movl %eax, -4(%ebp) return address
movl 12(%ebp), %eax
%ebp Saved %ebp
movl (%eax), %eax
movl %eax, -8(%ebp) x: 1 in swap()
movl 8(%ebp), %eax
movl -8(%ebp), %edx
movl %edx, (%eax)
%esp
movl 12(%ebp), %eax
movl -4(%ebp), %edx %eax
movl %edx, (%eax)
2
leave
ret
swap:
pushl %ebp x: 1 0x108
movl %esp, %ebp y: 2 0x104
subl $16, %esp
movl 8(%ebp), %eax
py: 0x104

movl (%eax), %eax px: 0x108


movl %eax, -4(%ebp) return address
movl 12(%ebp), %eax
%ebp Saved %ebp
movl (%eax), %eax
movl %eax, -8(%ebp) x: 1 in swap()
movl 8(%ebp), %eax
movl -8(%ebp), %edx
movl %edx, (%eax)
%esp
movl 12(%ebp), %eax
movl -4(%ebp), %edx %eax
movl %edx, (%eax)
2
leave
ret
swap:
pushl %ebp x: 1 0x108
movl %esp, %ebp y: 2 0x104
subl $16, %esp
movl 8(%ebp), %eax
py: 0x104

movl (%eax), %eax px: 0x108


movl %eax, -4(%ebp) return address
movl 12(%ebp), %eax
%ebp Saved %ebp
movl (%eax), %eax
movl %eax, -8(%ebp) x: 1 in swap()
movl 8(%ebp), %eax 2
movl -8(%ebp), %edx
movl %edx, (%eax)
%esp
movl 12(%ebp), %eax
movl -4(%ebp), %edx %eax
movl %edx, (%eax)
2
leave
ret
swap:
pushl %ebp x: 1 0x108
movl %esp, %ebp y: 2 0x104
subl $16, %esp
movl 8(%ebp), %eax
py: 0x104

movl (%eax), %eax px: 0x108


movl %eax, -4(%ebp) return address
movl 12(%ebp), %eax
%ebp Saved %ebp
movl (%eax), %eax
movl %eax, -8(%ebp) x: 1 in swap()
movl 8(%ebp), %eax y: 2 in swap()
movl -8(%ebp), %edx
movl %edx, (%eax)
%esp
movl 12(%ebp), %eax
movl -4(%ebp), %edx %eax
movl %edx, (%eax)
2
leave
ret
swap:
pushl %ebp x: 1 0x108
movl %esp, %ebp y: 2 0x104
subl $16, %esp
movl 8(%ebp), %eax
py: 0x104

movl (%eax), %eax px: 0x108


movl %eax, -4(%ebp) return address
movl 12(%ebp), %eax
%ebp Saved %ebp
movl (%eax), %eax
movl %eax, -8(%ebp) x: 1

movl 8(%ebp), %eax y: 2


movl -8(%ebp), %edx
movl %edx, (%eax)
%esp
movl 12(%ebp), %eax
movl -4(%ebp), %edx %eax
movl %edx, (%eax)
2
leave
ret
swap:
pushl %ebp x: 1 0x108
movl %esp, %ebp y: 2 0x104
subl $16, %esp
movl 8(%ebp), %eax py: 0x104
&y

movl (%eax), %eax px: 0x108


&x
movl %eax, -4(%ebp) return address
movl 12(%ebp), %eax
%ebp Saved %ebp
movl (%eax), %eax
movl %eax, -8(%ebp)
x: 1

movl 8(%ebp), %eax y: 2


movl -8(%ebp), %edx
movl %edx, (%eax)
%esp
movl 12(%ebp), %eax
movl -4(%ebp), %edx %eax
movl %edx, (%eax)
1
2
leave
ret
swap:
pushl %ebp x: 1 0x108
movl %esp, %ebp y: 2 0x104
subl $16, %esp
movl 8(%ebp), %eax py: 0x104
&y

movl (%eax), %eax px: 0x108


&x
movl %eax, -4(%ebp) return address
movl 12(%ebp), %eax
%ebp Saved %ebp
movl (%eax), %eax
movl %eax, -8(%ebp)
x: 1

movl 8(%ebp), %eax y: 2


movl -8(%ebp), %edx
movl %edx, (%eax)
%esp
movl 12(%ebp), %eax
movl -4(%ebp), %edx %eax
movl %edx, (%eax)
0x108
1
leave
ret
swap:
pushl %ebp x: 1 0x108
movl %esp, %ebp y: 2 0x104
subl $16, %esp
movl 8(%ebp), %eax py: 0x104
&y

movl (%eax), %eax px: 0x108


&x
movl %eax, -4(%ebp) return address
movl 12(%ebp), %eax
%ebp Saved %ebp
movl (%eax), %eax
movl %eax, -8(%ebp)
x: 1

movl 8(%ebp), %eax y: 2


movl -8(%ebp), %edx
movl %edx, (%eax)
%esp
movl 12(%ebp), %eax
movl -4(%ebp), %edx %eax
movl %edx, (%eax)
0x108
1
leave
ret
swap:
pushl %ebp x: 1 0x108
movl %esp, %ebp y: 2 0x104
subl $16, %esp
movl 8(%ebp), %eax py: 0x104
&y

movl (%eax), %eax px: 0x108


&x
movl %eax, -4(%ebp) return address
movl 12(%ebp), %eax
%ebp Saved %ebp
movl (%eax), %eax
movl %eax, -8(%ebp)
x: 1

movl 8(%ebp), %eax y: 2


movl -8(%ebp), %edx
movl %edx, (%eax)
%esp
movl 12(%ebp), %eax
movl -4(%ebp), %edx %eax %edx
movl %edx, (%eax)
0x108
&x
1 2
leave
ret
swap:
pushl %ebp x: 1 0x108
movl %esp, %ebp y: 2 0x104
subl $16, %esp
movl 8(%ebp), %eax py: 0x104
&y

movl (%eax), %eax px: 0x108


&x
movl %eax, -4(%ebp) return address
movl 12(%ebp), %eax
%ebp Saved %ebp
movl (%eax), %eax
movl %eax, -8(%ebp)
x: 1

movl 8(%ebp), %eax y: 2


movl -8(%ebp), %edx
movl %edx, (%eax)
%esp
movl 12(%ebp), %eax
movl -4(%ebp), %edx %eax %edx
movl %edx, (%eax)
0x108
&x
1 2
leave
ret
swap:
pushl %ebp x: 1 0x108
movl %esp, %ebp y: 2 0x104
subl $16, %esp
(%eax) = M[0x108]
movl 8(%ebp), %eax py: 0x104
&y

movl (%eax), %eax px: 0x108


&x
movl %eax, -4(%ebp) return address
movl 12(%ebp), %eax
%ebp Saved %ebp
movl (%eax), %eax
movl %eax, -8(%ebp)
x: 1

movl 8(%ebp), %eax y: 2


movl -8(%ebp), %edx
movl %edx, (%eax)
%esp
movl 12(%ebp), %eax
movl -4(%ebp), %edx %eax %edx
movl %edx, (%eax)
0x108
&x
1 2
leave
ret
swap:
pushl %ebp x: 1 0x108
movl %esp, %ebp y: 2 0x104
subl $16, %esp
movl 8(%ebp), %eax py: 0x104
&y

movl (%eax), %eax px: 0x108


&x
movl %eax, -4(%ebp) return address
movl 12(%ebp), %eax
%ebp Saved %ebp
movl (%eax), %eax
movl %eax, -8(%ebp)
x: 1

movl 8(%ebp), %eax y: 2


movl -8(%ebp), %edx
movl %edx, (%eax)
%esp
movl 12(%ebp), %eax
movl -4(%ebp), %edx %eax %edx
movl %edx, (%eax)
0x108
&x
1 2
leave
ret
swap:
pushl %ebp x: 2 0x108
movl %esp, %ebp y: 2 0x104
subl $16, %esp
movl 8(%ebp), %eax py: 0x104
&y

movl (%eax), %eax px: 0x108


&x
movl %eax, -4(%ebp) return address
movl 12(%ebp), %eax
%ebp Saved %ebp
movl (%eax), %eax
movl %eax, -8(%ebp)
x: 1

movl 8(%ebp), %eax y: 2


movl -8(%ebp), %edx
movl %edx, (%eax)
%esp
movl 12(%ebp), %eax
movl -4(%ebp), %edx %eax %edx
movl %edx, (%eax)
0x108
&x
1 2
leave
ret
swap:
pushl %ebp x: 2 0x108
movl %esp, %ebp y: 2 0x104
subl $16, %esp
movl 8(%ebp), %eax py: 0x104
&y

movl (%eax), %eax px: 0x108


&x
movl %eax, -4(%ebp) return address
movl 12(%ebp), %eax
%ebp Saved %ebp
movl (%eax), %eax
movl %eax, -8(%ebp)
x: 1

movl 8(%ebp), %eax y: 2


movl -8(%ebp), %edx
movl %edx, (%eax)
%esp
movl 12(%ebp), %eax
movl -4(%ebp), %edx %eax %edx
movl %edx, (%eax)
0x108
&x
1 2
leave
ret
swap:
pushl %ebp x: 2 0x108
movl %esp, %ebp y: 2 0x104
subl $16, %esp
movl 8(%ebp), %eax py: 0x104
&y

movl (%eax), %eax px: 0x108


&x
movl %eax, -4(%ebp) return address
movl 12(%ebp), %eax
%ebp Saved %ebp
movl (%eax), %eax
movl %eax, -8(%ebp)
x: 1

movl 8(%ebp), %eax y: 2


movl -8(%ebp), %edx
movl %edx, (%eax)
%esp
movl 12(%ebp), %eax
movl -4(%ebp), %edx %eax %edx
movl %edx, (%eax)
0x104
&x
1 2
leave
ret
swap:
pushl %ebp x: 2 0x108
movl %esp, %ebp y: 2 0x104
subl $16, %esp
movl 8(%ebp), %eax py: 0x104
&y

movl (%eax), %eax px: 0x108


&x
movl %eax, -4(%ebp) return address
movl 12(%ebp), %eax
%ebp Saved %ebp
movl (%eax), %eax
movl %eax, -8(%ebp)
x: 1

movl 8(%ebp), %eax y: 2


movl -8(%ebp), %edx
movl %edx, (%eax)
%esp
movl 12(%ebp), %eax
movl -4(%ebp), %edx %eax %edx
movl %edx, (%eax)
0x104
&x
1 2
leave
ret
swap:
pushl %ebp x: 2 0x108
movl %esp, %ebp y: 2 0x104
subl $16, %esp
movl 8(%ebp), %eax py: 0x104
&y

movl (%eax), %eax px: 0x108


&x
movl %eax, -4(%ebp) return address
movl 12(%ebp), %eax
%ebp Saved %ebp
movl (%eax), %eax
movl %eax, -8(%ebp)
x: 1

movl 8(%ebp), %eax y: 2


movl -8(%ebp), %edx
movl %edx, (%eax)
%esp
movl 12(%ebp), %eax
movl -4(%ebp), %edx %eax %edx
movl %edx, (%eax)
0x104
&x
1 1
leave
ret
swap:
pushl %ebp x: 2 0x108
movl %esp, %ebp y: 2 0x104
subl $16, %esp
movl 8(%ebp), %eax py: 0x104
&y

movl (%eax), %eax px: 0x108


&x
movl %eax, -4(%ebp) return address
movl 12(%ebp), %eax
%ebp Saved %ebp
movl (%eax), %eax
movl %eax, -8(%ebp)
x: 1

movl 8(%ebp), %eax y: 2


movl -8(%ebp), %edx
movl %edx, (%eax)
%esp
movl 12(%ebp), %eax
movl -4(%ebp), %edx %eax %edx
movl %edx, (%eax)
0x104
&x
1 1
leave
ret
swap:
pushl %ebp x: 2 0x108
movl %esp, %ebp y: 2 0x104
subl $16, %esp
(%eax) = M[0x104]
movl 8(%ebp), %eax py: 0x104
&y

movl (%eax), %eax px: 0x108


&x
movl %eax, -4(%ebp) return address
movl 12(%ebp), %eax
%ebp Saved %ebp
movl (%eax), %eax
movl %eax, -8(%ebp)
x: 1

movl 8(%ebp), %eax y: 2


movl -8(%ebp), %edx
movl %edx, (%eax)
%esp
movl 12(%ebp), %eax
movl -4(%ebp), %edx %eax %edx
movl %edx, (%eax)
0x104
&x
1 1
leave
ret
swap:
pushl %ebp x: 2 0x108
movl %esp, %ebp y: 2 0x104
subl $16, %esp
movl 8(%ebp), %eax py: 0x104
&y

movl (%eax), %eax px: 0x108


&x
movl %eax, -4(%ebp) return address
movl 12(%ebp), %eax
%ebp Saved %ebp
movl (%eax), %eax
movl %eax, -8(%ebp)
x: 1

movl 8(%ebp), %eax y: 2


movl -8(%ebp), %edx
movl %edx, (%eax)
%esp
movl 12(%ebp), %eax
movl -4(%ebp), %edx %eax %edx
movl %edx, (%eax)
0x104
&x
1 1
leave
ret
swap:
pushl %ebp x: 2 0x108
movl %esp, %ebp y: 1 0x104
subl $16, %esp
movl 8(%ebp), %eax py: 0x104
&y

movl (%eax), %eax px: 0x108


&x
movl %eax, -4(%ebp) return address
movl 12(%ebp), %eax
%ebp Saved %ebp
movl (%eax), %eax
movl %eax, -8(%ebp)
x: 1

movl 8(%ebp), %eax y: 2


movl -8(%ebp), %edx
movl %edx, (%eax)
%esp
movl 12(%ebp), %eax
movl -4(%ebp), %edx %eax %edx
movl %edx, (%eax)
0x104
&x
1 1
leave
ret
swap:
pushl %ebp x: 2 0x108
movl %esp, %ebp y: 1 0x104
subl $16, %esp
movl 8(%ebp), %eax py: 0x104
&y

movl (%eax), %eax px: 0x108


&x
movl %eax, -4(%ebp) return address
movl 12(%ebp), %eax
%ebp Saved %ebp
movl (%eax), %eax
movl %eax, -8(%ebp)
x: 1

movl 8(%ebp), %eax y: 2


movl -8(%ebp), %edx
movl %edx, (%eax)
%esp
movl 12(%ebp), %eax
movl -4(%ebp), %edx %eax %edx
movl %edx, (%eax)
0x104
&x
1 1
leave
ret
swap:
pushl %ebp x: 2 0x108
movl %esp, %ebp y: 1 0x104
subl $16, %esp
movl 8(%ebp), %eax py: 0x104
&y

movl (%eax), %eax px: 0x108


&x
movl %eax, -4(%ebp) return address
movl 12(%ebp), %eax
%ebp Saved %ebp %esp
movl (%eax), %eax
movl %eax, -8(%ebp)
movl 8(%ebp), %eax
movl -8(%ebp), %edx
movl %edx, (%eax)
movl 12(%ebp), %eax
movl -4(%ebp), %edx %eax %edx
movl %edx, (%eax)
0x104
&x
1 1
leave
ret
swap:
pushl %ebp x: 2 0x108
movl %esp, %ebp y: 1 0x104
subl $16, %esp
movl 8(%ebp), %eax py: 0x104
&y

movl (%eax), %eax px: 0x108


&x
movl %eax, -4(%ebp) return address %esp
movl 12(%ebp), %eax
movl (%eax), %eax
movl %eax, -8(%ebp)
movl 8(%ebp), %eax
movl -8(%ebp), %edx
movl %edx, (%eax)
movl 12(%ebp), %eax
movl -4(%ebp), %edx %eax %edx
movl %edx, (%eax)
0x104
&x
1 1
leave
ret
swap:
pushl %ebp x: 2 0x108
movl %esp, %ebp y: 1 0x104
subl $16, %esp
movl 8(%ebp), %eax py: 0x104
&y

movl (%eax), %eax px: 0x108


&x
movl %eax, -4(%ebp) return address %esp
movl 12(%ebp), %eax
movl (%eax), %eax
movl %eax, -8(%ebp)
movl 8(%ebp), %eax
movl -8(%ebp), %edx
movl %edx, (%eax)
movl 12(%ebp), %eax
movl -4(%ebp), %edx %eax %edx
movl %edx, (%eax)
0x104
&x
1 1
leave
ret
swap:
pushl %ebp x: 2 0x108
movl %esp, %ebp y: 1 0x104
subl $16, %esp
movl 8(%ebp), %eax py: 0x104
&y

movl (%eax), %eax px: 0x108


&x %esp
movl %eax, -4(%ebp)
movl 12(%ebp), %eax
movl (%eax), %eax
movl %eax, -8(%ebp)
movl 8(%ebp), %eax
movl -8(%ebp), %edx
movl %edx, (%eax)
movl 12(%ebp), %eax
movl -4(%ebp), %edx %eax %edx
movl %edx, (%eax)
0x104
&x
1 1
leave
ret
return to main()
main:
pushl %ebp caller’s frame
movl %esp, %ebp return address
subl $16, %esp
%ebp Saved %ebp
movl $1, -4(%ebp)
movl $2, -8(%ebp) x: 2
leal -8(%ebp), %eax y: 1
pushl %eax
leal -4(%ebp), %eax
pushl %eax
call swap py: &y
addl $8, %esp Remember? px: &x %esp
leave
ret
main:
pushl %ebp caller’s frame
movl %esp, %ebp return address
subl $16, %esp
%ebp Saved %ebp
movl $1, -4(%ebp)
movl $2, -8(%ebp) x: 1
2
leal -8(%ebp), %eax y: 2
1
pushl %eax
leal -4(%ebp), %eax
pushl %eax
call swap py: &y
addl $8, %esp px: &x %esp
leave
ret
main:
pushl %ebp caller’s frame
movl %esp, %ebp return address
subl $16, %esp
%ebp Saved %ebp
movl $1, -4(%ebp)
movl $2, -8(%ebp) x: 1
2
leal -8(%ebp), %eax y: 2
1
pushl %eax
leal -4(%ebp), %eax
pushl %eax
call swap py: &y
addl $8, %esp px: &x %esp
leave
ret
main:
pushl %ebp caller’s frame
movl %esp, %ebp return address
subl $16, %esp
%ebp Saved %ebp
movl $1, -4(%ebp)
movl $2, -8(%ebp) x: 1
2
leal -8(%ebp), %eax y: 2
1
pushl %eax
leal -4(%ebp), %eax
pushl %eax %esp
call swap
addl $8, %esp
leave
ret
main:
pushl %ebp caller’s frame
movl %esp, %ebp return address
subl $16, %esp
%ebp Saved %ebp
movl $1, -4(%ebp)
movl $2, -8(%ebp) x: 1
2
leal -8(%ebp), %eax y: 2
1
pushl %eax
leal -4(%ebp), %eax
pushl %eax %esp
call swap
addl $8, %esp
leave
ret
main:
pushl %ebp caller’s frame
movl %esp, %ebp return address
subl $16, %esp
%ebp Saved %ebp %esp
movl $1, -4(%ebp)
movl $2, -8(%ebp)
leal -8(%ebp), %eax
pushl %eax
leal -4(%ebp), %eax
pushl %eax
call swap
addl $8, %esp
leave
ret
main:
pushl %ebp caller’s frame
movl %esp, %ebp return address %esp
subl $16, %esp
movl $1, -4(%ebp)
movl $2, -8(%ebp)
leal -8(%ebp), %eax
pushl %eax
leal -4(%ebp), %eax
pushl %eax
call swap
addl $8, %esp
leave
ret
main:
pushl %ebp caller’s frame
movl %esp, %ebp return address %esp
subl $16, %esp
movl $1, -4(%ebp)
movl $2, -8(%ebp)
leal -8(%ebp), %eax
pushl %eax
leal -4(%ebp), %eax
pushl %eax
call swap
addl $8, %esp
leave
ret
main:
pushl %ebp caller’s frame %esp
movl %esp, %ebp
subl $16, %esp
movl $1, -4(%ebp)
movl $2, -8(%ebp)
leal -8(%ebp), %eax
pushl %eax
leal -4(%ebp), %eax
pushl %eax
call swap
addl $8, %esp
leave
ret
finish
ret
Questions?

You might also like