[x86 Assembly] Help with an algortyhm.

ok guys, I don't know who else to ask. I'm pretty much screwed if someone of you doesn't help me.

Let's get to the problem. I've had a problem to solve, I've made the algorythm, all cool. Problem is, there are some structures such as array and/or do/do..while cycles that weren't taught to us!

So this is the algorythm.
[code]START
N(int)=0
i(int)=0
V[N]
even=0
odd=0
input N
do
input V[i]
i=i+1
while i<N
i=0
do
if i%2=0
then V[i]=V[i]+1
else
V[i]=V[i]^2
i=i+1
while i<N
i=0
do
if V[i] is even
then even=even+1
else odd=odd+1
i=i+1
while i<N
output pair
output odd
END[/code]

Whoever can help me with this, I would appreciate it tons and even pay something for it. Please!

Thanks for reading.

Comments

• No need to assemble it.
• [color=Blue]Since you need to input values from console and output them back to console take a look here:

[link=http://www.codexxi.com/MyBlocks.html]http://www.codexxi.com/MyBlocks.html[/link]

The project you need called: "Sorting integer values (DOS, TASM)" - get it and take a look at the code. I wrote it even before I switched to FASM.

As for arrays and loops they are very easy. To declare an array use DUP directive:
[/color]
[code]
[color=Green];
; Reserve ten 16-bit values following each other
; in memory and set all ten values to zero
;[/color]
Array DW DUP (0)[/code]
[color=Blue]To address such an array in a loop use following code:[/color]
[code]
MOV CX, 10 [color=Green]; LOOP TEN TIMES[/color]
LEA SI, Array [color=Green]; LOAD ADDRESS OF FIRST ELEMENT INTO SI[/color]
XOR DX, DX [color=Green]; DX=0 IF YOU NEED INDEX FOR SOMETHING[/color]

NEXT_ELEMENT:
MOV AX, [SI] [color=Green]; LOAD Array[I] INTO REGISTER AX[/color]
[color=Green];
; ... do whatever you need with AX
;[/color]
ADD SI, 2 [color=Green]; SHIFT SI BY 2 BYTES, SO IT WILL ADDRESS NEXT ITEM[/color]
INC DX [color=Green]; DX WILL BE 0,1,2,3,...[/color]
LOOP NEXT_ELEMENT
[color=Green];
; At this point ALL TEN ARRAY ITEMS HAVE BEED PROCESSED
;[/color]
[/code]
[color=Blue]Inside the loop (between lines [color=Red]NEXT_ELEMENT:[/color]
and [color=Red]LOOP NEXT_ELEMENT[/color]) do not change CX register and if you need it for something - use PUSH/POP to preserve it.[/color]
Sign In or Register to comment.

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!