Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .section .data
- .global A
- .global B
- .global j
- .section .text
- .global swapBytes #Declared function
- ###################################
- #Prologue
- ###################################
- pushl %ebp #save previous stack frame pointer
- movl %esp, %ebp #the stack frame pointer for sum function
- ###################################
- #Save registers
- ###################################
- pushl %ebx
- pushl %esi
- pushl %edi
- ###################################
- # Body of the function
- # here we implement our function...
- ###################################
- #Cleans 32bit registers
- movl $0, %eax
- movl $0, %ebx
- movl $0, %ecx
- movl $0, %edx
- movl $0, %esi
- movl $0, %edi
- #Places variables values to registers
- movl A, %eax #Places A value to eax register
- movl B, %ebx #Places B value to ebp register
- #Defines limit
- movl j, %ecx #Places j in ecx register
- movl $1, %edx #Places 1 in edx register
- jmp loop #Jumps loop
- loop:
- imull %edx, %eax #multiplies edx value to eax value (A)
- idiv %ebx #divids eax by ebx (ebx is divisor)
- addl %eax, %esi #adds eax value to esi (empty in the beginning), palcing the result in esi
- movl A, %eax
- #Compare to limit
- cmpl %ecx, %ebx #Compares registers values (ebx - ecx)
- jge endLoop #Jumps loop if greater or equal
- #Iterating i++
- incl %edx #adds 1 to edx value
- jmp loop #Jumps loop
- endLoop:
- movl $0, %eax #Cleans eax register
- movl %esi, %eax #Moves esi content to eax
- ###################################
- #Restore registers
- ###################################
- popl %edi
- popl %esi
- popl %ebx
- ###################################
- #Epilogue
- ###################################
- movl %ebp, %esp #Restore the previous stack pointer ("clear" the stack)
- popl %ebp #Restore the previous stack frame pointer
- ret #Return from the function
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement