asum - william & marybren/cs304sp17/slides/asum.ys.pdf · asum.ys----changes to memory and...
TRANSCRIPT
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