All of lore.kernel.org
 help / color / mirror / Atom feed
From: Paul Irofti <bulibuta@gmail.com>
To: linux-assembly@vger.kernel.org
Subject: prime numbers
Date: Thu, 14 Jul 2005 01:40:24 +0300	[thread overview]
Message-ID: <42D59858.8060404@gmail.com> (raw)

this is an exercies i set out to do in order to familiarise my self with 
linux and AT&T
assembly syntax.

i worked a lot and read a lot before figureing out how each operator 
gets its paramaters and such...

the code doesn't compile with the following errors:

# as -gstabs sieve.s -o sieve.o
# gcc sieve.o -o sieve
sieve.o(.text+0x1):sieve.s:20: relocation truncated to fit: R_386_8 .data
sieve.o(.text+0xc):sieve.s:24: relocation truncated to fit: R_386_16 .data
sieve.o(.text+0x19):sieve.s:32: relocation truncated to fit: R_386_8 .data
sieve.o(.text+0x1b):sieve.s:33: relocation truncated to fit: R_386_8 .data
sieve.o(.text+0x2d):sieve.s:43: relocation truncated to fit: R_386_8 .data
sieve.o(.text+0x39):sieve.s:50: relocation truncated to fit: R_386_8 .data
collect2: ld returned 1 exit status

the source code is:

# assembly code for the calculation of the primes numbers in the range of [2-100]
# the code brute forces the numbers out, no formulas are taken in consideration

*.include* "defines.h"		#system call numbers are stored here (i.e. __NR_<oper> = number)

*.global* main

*.data*

sieve:	
	*.byte* 4
test:
	*.byte* 1

*.text*

main:
	
loop:	
	movb $test, %dl
	incb %dl		#increase test
	movb %dl, (test)
	
	movw $sieve, %ax	#prepare for divb: move sieve in ax
	divb %dl		#div ax by dl
	
	xor %cx, %cx		#clear cx
	movb %ah, %cl		#move rest in cx
	
	jcxz next		#test if rest is 0 and increase if so
	
	movb $sieve, %al
	movb $test, %bl
	cmpb %al, %bl		#else test if "test" has reached sieve
	
	jnz loop		#if not go back and div by new test value
	
				
print:	movl $__NR_write, %eax  #else print the prime
	movl $1, %ebx		#STDOUT is $1
	xor %ecx, %ecx
	
	movb $sieve, %cl
	addb $30, %cl		#make ascii out of int
	
	movl $16,%edx		#buffer size
	int $0x80
	
next:	
	movb $sieve, %cl
	incb %cl		#increase sieve
	movb %cl, (sieve)
	
	movb $100, %al
	cmpb %al, %cl		#test if limit is reached
	jz exit
			
	movb $1, %al		#if not start again with a new sieve and test = 1
	movb %al, (test)
	
	jmp loop
	
exit:	movl $0, %eax
	ret
	

please send me any critique and advices you can, i really want to make 
the complete switch from MASM to GAS as soon as possible....

cheers!

             reply	other threads:[~2005-07-13 22:40 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-07-13 22:40 Paul Irofti [this message]
2005-07-14  0:14 ` prime numbers Frank Kotler
2005-07-14  2:21   ` Paul Irofti
2005-07-14  2:51     ` Frank Kotler
2005-07-14  3:02       ` Paul Irofti

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=42D59858.8060404@gmail.com \
    --to=bulibuta@gmail.com \
    --cc=linux-assembly@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.