Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .section .data
- prime_number_str:
- .asciz "%d "
- .section .text
- .global _start
- _start:
- pushl $20
- call .first_prime_numbers
- addl $4, %esp
- pushl $0
- call exit
- .first_prime_numbers: #argument first n numbers
- movl 4(%esp), %ecx #get the first argument
- do_test:
- pushl %ecx #push function arguments
- call .prime
- addl $4, %esp #restore the stack
- #if not prime jump to the next number
- cmpl $0, %eax
- je no_not_prime
- #print the number
- pushl %eax #save eax
- pushl %ecx #first argument
- pushl $prime_number_str #text to print
- call printf
- addl $4, %esp
- popl %eax #restore eax
- no_not_prime:
- loop do_test
- ret
- .prime: #argument: number to check
- movl 4(%esp), %eax #get the first argument
- #divide the argument by 2
- xorl %edx, %edx
- movl $2, %ecx
- pushl %eax #save the value of eax
- divl %ecx
- movl %eax, %ecx #init the counter register
- popl %eax #restore the value of eax
- movl $1, %ebx #assume the argument is prime
- test_prime:
- # if ecx == 1 then return exit the function
- cmpl $1, %ecx
- jle return_value
- pushl %eax #save the old value of eax
- #divide the value by the value of counter
- xorl %edx, %edx
- divl %ecx
- #if the reminder is 0 then the number is not prime
- cmpl $0, %edx
- popl %eax #restore the value of eax
- je not_prime
- subl $1, %ecx #decrease counter
- jmp test_prime #try next division
- not_prime:
- movl $0, %ebx
- return_value:
- movl %ebx, %eax
- ret
- gdb youprogram
Add Comment
Please, Sign In to add comment