J'ai un code assembly32 pour Hanoi, mais je ne peux pas le compiler, j'obtiens l'erreur: hanoi.asm (9): erreur A2070: opérandes d'instructions invalides J'utilise MASM32.Erreur MASM32 A2070: opérandes d'instructions invalides
Le code complet:
.586
.MODEL FLAT
PUBLIC _towers
EXTERN _printf:NEAR
.CODE
_towers:PUSH EBP
MOV EBP, ESP
SUB ESP, 4
CMP [EBP+8], 1 ;ERROR
JNE L1
MOV EAX, [EBP+16]
PUSH EAX
MOV EAX, [EBP+12]
PUSH EAX
PUSH OFFSET FLAT:format;
CALL _printf
ADD ESP, 12
JMP Done
L1: MOV EAX, 6
SUB EAX, [EBP+12]
SUB EAX, [EBP+16]
MOV [EBP-4], EAX
PUSH EAX
MOV EAX, [EBP+12]
PUSH EAX
MOV EAX, [EBP+8]
DEC EAX
PUSH EAX
CALL _towers
ADD ESP, 12
MOV EAX, [EBP+16]
PUSH EAX
MOV EAX, [EBP+12]
PUSH EAX
PUSH 1
CALL _towers
ADD ESP,12
MOV EAX, [EBP+16]
PUSH EAX
MOV EAX, [EBP-4]
PUSH EAX
MOV EAX, [EBP+8]
DEC EAX
PUSH EAX
CALL _towers
ADD ESP, 12
Done: MOV ESP,EBP
POP EBP
RET 0
.DATA
format DB "Move from %d to %d\n"
END
Pouvez-vous s'il vous plaît aidez-moi, comment puis-je faire ce travail?
La taille des données n'est pas claire. Utilisez 'cmp dword ptr [ebp + 8], 1'. – Jester
Etes-vous sûr que c'est tout le code? Les tours de Hanoi nécessitent un point de départ pour les trois disques, ce code commence si soudainement, sans qu'aucune donnée n'ait été initialisée. L'algorithme ne fonctionne pas pour moi, je veux dire, il ne résout pas le problème de Hanoi. –
Comme vous pouvez le voir dans ma réponse, le code utilise des registres 16 bits, et cela fonctionne très bien. Vous pouvez changer tous les registres de 16 bits pour 32 bits (AX -> EAX), et le tester pour voir s'il fonctionne encore. –