954,479 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?
Have something to say? Contribute New Article Reply to this Article

[NASM] Sum Odd Number Lower Than X

Hi folks! :)

I'm here with a problem of Assembly 8086 (x86) (NASM). I´m trying calculate the sum of all numbers, which are odd, lowers than X (X = number defined by user)

Already solved the problem in C # and C + +, but i need the Assembly Code.

In C#:

int num = 0;
int res = 0;
int all = 0;
int soma = 0;

num = Convert.ToInt32(Console.ReadLine());

while (all < num)
{
    all++;
    res = all % 2;
    if (res == 1)
    {
        soma += all;
    }
    else
    {
        continue;
    }
}
Console.WriteLine(soma);


In C++:

int num = 0;
int all = 0;
int res = 0;
int soma = 0;

puts("Introduza o valor: ");
scanf_s("%d", &num);

while (all < num) 
{
	all++;
	res = all % 2;
	if (res ==1)
	{
		soma += all;
	}
	else
	{
		continue;
	}
}
printf("Soma valores impares: %d",soma);


In Assembly:

%include "arq2010.asm"

LEA CX, [MSG1]	;Show MSG1
CALL WriteLine	

LEA CX, [input]	;Read Input
CALL ReadString

;Most create the condition here!


.DATA
MSG1 DB "Input: ", 0
MSG2 DB "Output: ", 0


Appreciate help. Thanks! :)

Harvarde
Newbie Poster
1 post since Dec 2010
Reputation Points: 10
Solved Threads: 0
 

Good news: you can make this much simpler !
I found a mathematical way to find it:

The sum of ALL numbers until n is given by: n*(n+1)/2
Since we want only odd numbers, we can modify it like this:

1 2 3 4 5 ...
0 1 2 3 4 ...
+______________
1 3 5 7 9 ...

So the formula is then: n*(n+1)/2 + (n-1)*n/2 = n²!
We're almost there, but when we give a n, it will give us all the numbers smaller than 2N.
We can use bitshift right, which halve the number AND round it down.
So the code is, assuming the input is in ax:

;assume the unsigned integer limit X is already in ax:
shr ax,1
mul ax
; done !


Thus this will calculate te sum of odd numbers strictly lower than X, so:
X = 15;
bitshift right: 00001111 --> 00000111 = 7;
square: 49 = 1 + 3 + 5 + 7 + 9 + 11 + 13;

davio1
Newbie Poster
7 posts since Feb 2011
Reputation Points: 10
Solved Threads: 0
 

This article has been dead for over three months

Post: Markdown Syntax: Formatting Help
You
View similar articles that have also been tagged: