У меня есть код assembly32 для Hanoi, но я не могу его скомпилировать, я получаю ошибку: hanoi.asm (9): ошибка A2070: неправильные операнды команд Я использую MASM32.Ошибка MASM32 A2070: неверные операнды команд
Полный код:
.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
Можете ли вы помочь мне, как я могу сделать эту работу?
Непонятно, каков размер данных. Используйте 'cmp dword ptr [ebp + 8], 1'. – Jester
Вы уверены, что это все код? Ханойские башни требуют начальной точки для трех дисков, этот код начинается настолько внезапно, без каких-либо инициализации данных. Алгоритм для меня не работает, я имею в виду, он не решает проблему ханоя. –
Как вы можете видеть в моем ответе, код использует 16-битные регистры, и он отлично работает. Вы можете изменить все 16-битные регистры для 32-разрядного (AX-> EAX) и протестировать его, чтобы убедиться, что он работает. –