Asum - William & Marybren/cs304sp17/slides/asum.ys.pdf · Asum.ys----Changes to memory and...

Preview:

Citation preview

Asum.ys----Changes to memory and registers

Ruiqin Tian

5.init: irmovl Stack, %esp # Set up stack pointer 6. irmovl Stack, %ebp # Set up base pointer

address stack

0X100 %esp, %ebp

0Xfc

0Xf8

0xf4

0xf0

0xec

register

%eax

%ecx

%edx

%ebx

%esi

%edi

%esp 0X100

%ebp 0X100

PC

0xc

ZF SF CF

1 0 0

2

7. call main

address stack

0X100 %ebp

0Xfc %esp 0X11

0Xf8

0xf4

0xf0

0xec

register

%eax

%ecx

%edx

%ebx

%esi

%edi

%esp 0xfc

%ebp 0X100

PC

0x24

ZF SF CF

1 0 0

3

17. Main: pushl %ebp

address stack

0X100 %ebp

0Xfc 0X11

0Xf8 %esp 0X100

0xf4

0xf0

0xec

register

%eax

%ecx

%edx

%ebx

%esi

%edi

%esp 0Xf8

%ebp 0X100

PC

0x26

ZF SF CF

1 0 0

4

18. rrmovl %esp,%ebp

address stack

0X100

0Xfc 0X11

0Xf8 %esp, %ebp 0X100

0xf4

0xf0

0xec

register

%eax

%ecx

%edx

%ebx

%esi

%edi

%esp 0Xf8

%ebp 0Xf8

PC

0x28

ZF SF CF

1 0 0

5

address stack

0X100

0Xfc 0X11

0Xf8 %ebp 0X100

0xf4 %esp 4

0xf0

0xec

19. irmovl $4,%eax 20. pushl %eax # Push 4

register

%eax 4

%ecx

%edx

%ebx

%esi

%edi

%esp 0Xf4

%ebp 0Xf8

PC

0x30

ZF SF CF

1 0 0

6

address stack

0X100

0Xfc 0X11

0Xf8 %ebp 0X100

0xf4 4

0xf0 %esp 0X14

0xec

21. irmovl array,%edx22. pushl %edx

register

%eax 4

%ecx

%edx 0X14

%ebx

%esi

%edi

%esp 0Xf0

%ebp 0Xf8

PC

0x38

ZF SF CF

1 0 0

7

address stack

0X100

0Xfc 0X11

0Xf8 %ebp 0X100

0xf4 4

0xf0 0X14

0xec %esp 0X3d

23. call Sum

register

%eax 4

%ecx

%edx 0X14

%ebx

%esi

%edi

%esp 0Xec

%ebp 0Xf8

PC

0x42

ZF SF CF

1 0 0

8

address stack

0X100

0Xfc 0X11

0Xf8 0X100

0xf4 4

0xf0 0X14

0xec 0X3d

0Xe8 %esp, %ebp 0Xf8

30.Sum: pushl %ebp31. rrmovl %esp,%ebp

register

%eax 4

%ecx

%edx 0X14

%ebx

%esi

%edi

%esp 0Xe8

%ebp 0Xe8

PC

0x46

ZF SF CF

1 0 0

9

address stack

0X100

0Xfc 0X11

0Xf8 0X100

0xf4 4

0xf0 0X14

0xec 0X3d

0Xe8 %esp, %ebp 0Xf8

32. mrmovl 8(%ebp),%ecx # ecx = Start

33. mrmovl 12(%ebp),%edx # edx = Count

register

%eax 4

%ecx 0X14

%edx 4

%ebx

%esi

%edi

%esp 0Xe8

%ebp 0Xe8

PC

0x52

ZF SF CF

1 0 0

10

address stack

0X100

0Xfc 0X11

0Xf8 0X100

0xf4 4

0xf0 0X14

0xec 0X3d

0Xe8 %esp, %ebp 0Xf8

34. xorl %eax,%eax # sum = 0

register

%eax 0

%ecx 0X14

%edx 4

%ebx

%esi

%edi

%esp 0Xe8

%ebp 0Xe8

ZF SF CF

0 0 0

PC

0x54

11

address stack

0X100

0Xfc 0X11

0Xf8 0X100

0xf4 4

0xf0 0X14

0xec 0X3d

0Xe8 %esp, %ebp 0Xf8

35. andl %edx,%edx # Set condition codes

register

%eax 0

%ecx 0X14

%edx 4

%ebx

%esi

%edi

%esp 0Xe8

%ebp 0Xe8

ZF SF CF

1 0 0

PC

0x56

12

address stack

0X100

0Xfc 0X11

0Xf8 0X100

0xf4 4

0xf0 0X14

0xec 0X3d

0Xe8 %esp, %ebp 0Xf8

36. je End

register

%eax 0

%ecx 0X14

%edx 4

%ebx

%esi

%edi

%esp 0Xe8

%ebp 0Xe8

ZF SF CF

1 0 0

PC

0x5b

13

address stack

0X100

0Xfc 0X11

0Xf8 0X100

0xf4 4

0xf0 0X14

0xec 0X3d

0Xe8 %esp, %ebp 0Xf8

37.Loop: mrmovl (%ecx),%esi # get *Start

register

%eax 0

%ecx 0X14

%edx 4

%ebx

%esi 0Xd

%edi

%esp 0Xe8

%ebp 0Xe8

ZF SF CF

1 0 0

PC

0x61

14

address stack

0X100

0Xfc 0X11

0Xf8 0X100

0xf4 4

0xf0 0X14

0xec 0X3d

0Xe8 %esp, %ebp 0Xf8

38. addl %esi,%eax # add to sum

39. irmovl $4,%ebx #

register

%eax 0Xd

%ecx 0X14

%edx 4

%ebx 4

%esi 0Xd

%edi

%esp 0Xe8

%ebp 0Xe8

ZF SF CF

1 0 0

PC

0x69

15

address stack

0X100

0Xfc 0X11

0Xf8 0X100

0xf4 4

0xf0 0X14

0xec 0X3d

0Xe8 %esp, %ebp 0Xf8

40. addl %ebx,%ecx # Start++

41. irmovl $-1,%ebx #

register

%eax 0Xd

%ecx 0X18

%edx 4

%ebx -1

%esi 0Xd

%edi

%esp 0Xe8

%ebp 0Xe8

ZF SF CF

1 0 0

PC

0x71

16

address stack

0X100

0Xfc 0X11

0Xf8 0X100

0xf4 4

0xf0 0X14

0xec 0X3d

0Xe8 %esp, %ebp 0Xf8

42. addl %ebx,%edx # Count--

43. jne Loop # Stop when 0

register

%eax 0Xd

%ecx 0X18

%edx 3

%ebx -1

%esi 0Xd

%edi

%esp 0Xe8

%ebp 0Xe8

ZF SF CF

1 0 0

PC

0x5b

17

address stack

0X100

0Xfc 0X11

0Xf8 0X100

0xf4 4

0xf0 0X14

0xec 0X3d

0Xe8 %esp, %ebp 0Xf8

37. Loop: mrmovl (%ecx),%esi # get *Start

38. addl %esi,%eax # add to sum

register

%eax 0Xcd

%ecx 0X18

%edx 3

%ebx -1

%esi 0Xc0

%edi

%esp 0Xe8

%ebp 0Xe8

ZF SF CF

1 0 0

PC

0x63

18

address stack

0X100

0Xfc 0X11

0Xf8 0X100

0xf4 4

0xf0 0X14

0xec 0X3d

0Xe8 %esp, %ebp 0Xf8

39. irmovl $4,%ebx #

40. addl %ebx,%ecx # Start++

register

%eax 0Xcd

%ecx 0X1c

%edx 3

%ebx 4

%esi 0Xc0

%edi

%esp 0Xe8

%ebp 0Xe8

ZF SF CF

1 0 0

PC

0x6b

19

address stack

0X100

0Xfc 0X11

0Xf8 0X100

0xf4 4

0xf0 0X14

0xec 0X3d

0Xe8 %esp, %ebp 0Xf8

41. irmovl $-1,%ebx #

42. addl %ebx,%edx # Count--

register

%eax 0Xcd

%ecx 0X1c

%edx 2

%ebx -1

%esi 0Xc0

%edi

%esp 0Xe8

%ebp 0Xe8

ZF SF CF

1 0 0

PC

0x73

20

address stack

0X100

0Xfc 0X11

0Xf8 0X100

0xf4 4

0xf0 0X14

0xec 0X3d

0Xe8 %esp, %ebp 0Xf8

43. jne Loop # Stop when 0

register

%eax 0Xcd

%ecx 0X1c

%edx 2

%ebx -1

%esi 0Xc0

%edi

%esp 0Xe8

%ebp 0Xe8

ZF SF CF

1 0 0

PC

0x5b

21

address stack

0X100

0Xfc 0X11

0Xf8 0X100

0xf4 4

0xf0 0X14

0xec 0X3d

0Xe8 %esp, %ebp 0Xf8

37. Loop: mrmovl (%ecx),%esi # get *Start

38. addl %esi,%eax # add to sum

register

%eax 0Xbcd

%ecx 0X1c

%edx 2

%ebx -1

%esi 0Xb00

%edi

%esp 0Xe8

%ebp 0Xe8

ZF SF CF

1 0 0

PC

0x63

22

address stack

0X100

0Xfc 0X11

0Xf8 0X100

0xf4 4

0xf0 0X14

0xec 0X3d

0Xe8 %esp, %ebp 0Xf8

39. irmovl $4,%ebx #

40. addl %ebx,%ecx # Start++

register

%eax 0Xbcd

%ecx 0X20

%edx 2

%ebx 4

%esi 0Xb00

%edi

%esp 0Xe8

%ebp 0Xe8

ZF SF CF

1 0 0

PC

0x6b

23

address stack

0X100

0Xfc 0X11

0Xf8 0X100

0xf4 4

0xf0 0X14

0xec 0X3d

0Xe8 %esp, %ebp 0Xf8

41. irmovl $-1,%ebx #

42. addl %ebx,%edx # Count--

register

%eax 0Xbcd

%ecx 0X20

%edx 1

%ebx -1

%esi 0Xb00

%edi

%esp 0Xe8

%ebp 0Xe8

ZF SF CF

1 0 0

PC

0x73

24

address stack

0X100

0Xfc 0X11

0Xf8 0X100

0xf4 4

0xf0 0X14

0xec 0X3d

0Xe8 %esp, %ebp 0Xf8

43. jne Loop # Stop when 0

register

%eax 0Xbcd

%ecx 0X20

%edx 1

%ebx -1

%esi 0Xb00

%edi

%esp 0Xe8

%ebp 0Xe8

ZF SF CF

1 0 0

PC

0x5b

25

address stack

0X100

0Xfc 0X11

0Xf8 0X100

0xf4 4

0xf0 0X14

0xec 0X3d

0Xe8 %esp, %ebp 0Xf8

37. Loop: mrmovl (%ecx),%esi # get *Start

38. addl %esi,%eax # add to sum

register

%eax 0Xabcd

%ecx 0X20

%edx 1

%ebx -1

%esi 0Xa000

%edi

%esp 0Xe8

%ebp 0Xe8

ZF SF CF

1 0 0

PC

0x63

26

address stack

0X100

0Xfc 0X11

0Xf8 0X100

0xf4 4

0xf0 0X14

0xec 0X3d

0Xe8 %esp, %ebp 0Xf8

39. irmovl $4,%ebx #

40. addl %ebx,%ecx # Start++

register

%eax 0Xabcd

%ecx 0X24

%edx 1

%ebx 4

%esi 0Xa000

%edi

%esp 0Xe8

%ebp 0Xe8

ZF SF CF

1 0 0

PC

0x6b

27

address stack

0X100

0Xfc 0X11

0Xf8 0X100

0xf4 4

0xf0 0X14

0xec 0X3d

0Xe8 %esp, %ebp 0Xf8

41. irmovl $-1,%ebx #

42. addl %ebx,%edx # Count--

register

%eax 0Xabcd

%ecx 0X24

%edx 0

%ebx -1

%esi 0Xa000

%edi

%esp 0Xe8

%ebp 0Xe8

ZF SF CF

0 0 0

PC

0x73

28

address stack

0X100

0Xfc 0X11

0Xf8 0X100

0xf4 4

0xf0 0X14

0xec 0X3d

0Xe8 %esp, %ebp 0Xf8

43. jne Loop # Stop when 0

register

%eax 0Xabcd

%ecx 0X24

%edx 0

%ebx -1

%esi 0Xa000

%edi

%esp 0Xe8

%ebp 0Xe8

ZF SF CF

0 0 0

PC

0x78

29

address stack

0X100

0Xfc 0X11

0Xf8 0X100

0xf4 4

0xf0 0X14

0xec 0X3d

0Xe8 %esp, %ebp 0Xf8

44. End: rrmovl %ebp,%esp

register

%eax 0Xabcd

%ecx 0X24

%edx 0

%ebx -1

%esi 0Xa000

%edi

%esp 0Xe8

%ebp 0Xe8

ZF SF CF

0 0 0

PC

0x7a

30

address stack

0X100

0Xfc 0X11

0Xf8 %ebp 0X100

0xf4 4

0xf0 0X14

0xec %esp 0X3d

0Xe8 0Xf8

45. popl %ebp

register

%eax 0Xabcd

%ecx 0X24

%edx 0

%ebx -1

%esi 0Xa000

%edi

%esp 0Xec

%ebp 0Xf8

ZF SF CF

0 0 0

PC

0x7c

31

address stack

0X100

0Xfc 0X11

0Xf8 %ebp 0X100

0xf4 4

0xf0 %esp 0X14

0xec 0X3d

0Xe8 0Xf8

46. ret

register

%eax 0Xabcd

%ecx 0X24

%edx 0

%ebx -1

%esi 0Xa000

%edi

%esp 0Xec

%ebp 0Xf8

ZF SF CF

0 0 0

PC

0X3d

32

address stack

0X100

0Xfc 0X11

0Xf8 %esp, %ebp 0X100

0xf4 4

0xf0 0X14

0xec 0X3d

0Xe8 0Xf8

24. rrmovl %ebp,%esp

register

%eax 0Xabcd

%ecx 0X24

%edx 0

%ebx -1

%esi 0Xa000

%edi

%esp 0Xf8

%ebp 0Xf8

ZF SF CF

0 0 0

PC

0x3f

33

address stack

0X100 %ebp

0Xfc %esp 0X11

0Xf8 0X100

0xf4 4

0xf0 0X14

0xec 0X3d

0Xe8 0Xf8

25. popl %ebp

register

%eax 0Xabcd

%ecx 0X24

%edx 0

%ebx -1

%esi 0Xa000

%edi

%esp 0Xfc

%ebp 0X100

ZF SF CF

0 0 0

PC

0X100

34

address stack

0X100 %esp, %ebp

0Xfc 0X11

0Xf8 0X100

0xf4 4

0xf0 0X14

0xec 0X3d

0Xe8 0Xf8

26. ret

register

%eax 0Xabcd

%ecx 0X24

%edx 0

%ebx -1

%esi 0Xa000

%edi

%esp 0X100

%ebp 0X100

ZF SF CF

0 0 0

PC

0X11

35

address stack

0X100 %esp, %ebp

0Xfc 0X11

0Xf8 0X100

0xf4 4

0xf0 0X14

0xec 0X3d

0Xe8 0Xf8

8. halt

register

%eax 0Xabcd

%ecx 0X24

%edx 0

%ebx -1

%esi 0Xa000

%edi

%esp 0X100

%ebp 0X100

ZF SF CF

0 0 0

PC

36

Recommended