singlepost

Ассемблер – это жесть! << На главную или назад  

Не могу написать программу на ассемблере, которая сортировала бы массив так 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]);
}

}

31 ответов в теме “Ассемблер – это жесть!”

  1. 3
    Yarik Blame ответил:

    СПС

  2. 2
    Vitaly Martynovich ответил:

    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:

    Регистры на забудь сохранить\восстановить

  3. 1
    Лев Свиридов ответил:

    по-моему просто младший бит нужно проверять и все.
    без всяких там делений…

    стоит бит – число нечетное, нет – четное :)

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.