2010-11-30 3 views
0

Je dois écrire une procédure dans l'assemblage qui trie un tableau de jusqu'à 20 noms, max 11 caractères. Mes programmes acceptent 3 enregistrements, mais continuent de se briser à tout le reste et je ne peux pas le faire pour trier. J'utilise le tri à bulles.
BTW, je ne peux rien changer en C++ puisqu'il s'agit d'une affectation.Tri d'un tableau de noms dans l'assemblage

Ces 3 premières lignes proviennent du code C++.

extern "C" void Sort (char [] [11], char [], double [], long); 

char Names [20] [11]; 

Sort (Names, LetterGrades, Averages, NumStudents - 1); 

_Sort proc 

     mov ecx, [esp +16] 
     dec ecx 

L1: push ecx 
    mov esi, [esp + 4] 

L2: mov eax, [esi] 
     cmp [esi + 11], eax 
    jg L3 
     xchg eax,[esi + 11] 
     mov [esi],eax 

L3: add esi,11 
     loop L2 

     pop ecx 
     loop L1 

L4: ret 

_Sort endp 
+1

La déclaration C est pour un tableau à deux dimensions de char, votre code d'assemblage est pour un tableau à 1 dimension de char *. –

+0

Y a-t-il des commentaires dans votre code d'affectation? J'aurais été battu pour tourner dans un projet d'assemblage sans commentaires. Pour comprendre votre code sans commentaires, je dois comprendre comment votre système pousse les arguments sur la pile. En outre, vos noms d'étiquettes ne sont pas particulièrement descriptifs de ce que vous essayez d'accomplir. Ces problèmes de «style», bien qu'ils ne règlent pas directement votre problème, pourraient vous aider à comprendre votre propre code et ses failles. –

+0

Mon professeur n'est pas difficile avec eux, mais je comprends qu'ils aident quand ils sont utilisés. Merci – justbrianr

Répondre

0

Je pense que vous devriez comparer tous les caractères (A) de chaque nom contre le caractère correspondant (B) de tous les autres noms, puis, éventuellement, échanger les deux noms si B et tous les caractères qui le précède sont plus petit que A et caractères avant. En ce moment c'est ma seule idée mais je ne peux pas la traduire en code, je devrais y penser encore un peu de temps ...

J'ai essayé de l'expliquer du mieux que j'ai pu, de toute façon je suis désolé si c'est un mess .. =)

+0

Ce que vous dites a un sens descriptif, mais je ne peux pas comprendre comment le faire fonctionner dans mon programme. J'ai essayé beaucoup de choses différentes mais d'une manière ou d'une autre cela ne fonctionne pas. – justbrianr

+0

J'ai essayé aussi, mais c'est un vrai bordel, même dans les langues de haut niveau. – BlackBear