All pastes #114784 Raw Edit

Anonymous

public text v1 · immutable
·published 2006-08-04 05:28 UTC
rendered paste body
%include "asm_io.inc"

segment .data
print_limit	db	'Enter limit: ', 0

segment .bss
limit		resd	1
guess		resd	1
ecxstore	resq	1

segment .text
	global _asm_main
_asm_main:
	enter 0,0
	pusha

	mov 	eax, print_limit	; set parameter to "Enter Limit"
	call	print_string		; print
	call	read_int		; read integer into EAX
	mov	[limit], eax		; put read integer into limit variable
	mov	dword [guess], 5	; set guess to 5, first guess
	mov	ecx, [limit]		; set loop counter to limit
	sub	ecx, [guess]		; then subtract by guess to figure out how many cycles we need
for_guess:
	mov	dword ebx, 2		; set first factor to test... 2
for_factors:
	mov	eax, [guess]		; set EAX to guess for numerator
	mov	edx, 0			; set EDX to 0 to prepare to hold remainder
	div	ebx			; divide EAX by EBX, stores remainder in EDX
	cmp	edx, 0			; is EDX 0?
	je	next_guess		; Yes? Jump to next_guess, its not prime
	add	dword ebx, 1		; No? Add one to the factor
	cmp	ebx, [guess]		; Is the factor equal to the guess?
	je	no_factors		; Yes? PRIME!
	jmp	for_factors		; No? Not prime...
no_factors:
	mov	eax, [guess]		; Copy guess into EAX
	call	print_int		; Output, because its prime!
	call	print_nl		; Print new line

next_guess:
	add	dword [guess], 1	; Add one to guess
	loop	for_guess		; Loop on, brother

	popa
	mov	eax, 0
	leave
	ret