Не могу написать программу на ассемблере, которая сортировала бы массив так A={"Четные","Нечетные"}. Вот код… Там чето неправильно. Если кто шарит, помогите написать часть там где АСМ… С работает нормально…
#include <iostream>
#include <iomanip>
#include <stdio.h>
using namespace std;
long A[10]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
long G[10];
long G_a[10];
int main ()
{
register int gi = 0;
register int i;
////c++ code////////
for (i=0; i<10; i++)
{
if (!(A[i]%2))//chet if(A[i]/2==0) ? Четное : Нечетное
{
G[gi]=A[i];
gi++;
}
}
for (i=0; i<10; i++)
{
if (A[i]%2)
{
G[gi]=A[i];
gi++;
}
}
/////ASM CODE///////////
__asm
{
movesi, 0
FOR1:
cmpesi, 10;
jgeGO;
//part 1
movecx, gi;
movebx, G[ecx*4]
movedi, i;
moveax, A[esi*4];
movebx, 2;
cdq
idivebx;
cmpeax, 0;
je CHET
jg NCHET
jmp END
/////////////////
CHET:
//movebx, G[ecx*4]
movebx, eax;
incecx;
jmpFOR1
NCHET:
movebx, eax
incecx;
jmpFOR1
//end part 1
incesi;
jmpFOR1;
GO:
movesi, 0
FOR2:
cmpesi, 10;
jgeEND;
//part 2
mov eax, G[esi*4]
mov ecx, G_a[esi*4]
mov ecx, eax;
//end part 2
incesi;
jmpFOR2;
END:
}
///display result's/////
printf ("mass A is ");
for (i=0; i<10; i++)
{
printf ("|%d|", A[i]);
}
printf ("\nmass G is ");
for (i=0; i<10; i++)
{
printf ("|%d|", G[i]);
printf ("|%d|", G_a[i]);
}
}
18 декабря 2008 в 12:02
СПС
17 декабря 2008 в 10:05
mov ECX, 10
mov ESI, G
mov EDI, A
l1:
test ECX, ECX
jz el1
mov EAX, [EDI]
add EDI, 4
dec ECX
test EAX, 1
jnz l1
mov [ESI], EAX
add ESI, 4
jmp l1
el1:
mov ECX, 10
mov EDI, A
l2:
test ECX, ECX
jz el2
mov EAX, [EDI]
add EDI, 4
dec ECX
test EAX, 1
jz l2
mov [ESI], EAX
add ESI, 4
jmp l2
el2:
Регистры на забудь сохранить\восстановить
17 декабря 2008 в 1:04
по-моему просто младший бит нужно проверять и все.
без всяких там делений…
стоит бит – число нечетное, нет – четное