Рекурсия Ханойские башни на языке Assembler
Формулировка задачи:
Помогите пожалуйста разобрать ошибки в коде
.model tiny, pascal N_RINGS = 4 ; число колец (до 9, иначе нужно менять вывод сообщения) .data szInfo db 'Задача о "Ханойской башне" для ' db N_RINGS+'0',' колец.',13,10,'$' szMove db "0 -> 0",13,10,'$' szExit db "Press any key to exit...$" .code .startup .286 ; вывод информационного сообщения mov ah,9 ; AH=9 - вывод строки на экран mov dx,offset szInfo ; DS:DX = адрес выводимой строки int 21h mov al,N_RINGS ; начальное кол-во колец call hanoi_towers, 1, 3, 2 mov ah,9 ; AH=9 - вывод строки на экран mov dx,offset szExit ; DS:DX = адрес выводимой строки int 21h xor ax,ax ; ждем нажатия клавиши int 16h int 20h ; завершение программы (только .COM) ;--------------------------------------------------- ; AL = число колец ; from - начальное положение колец (1-3), ; to - конечное положение колец (1-3) ; temp - промежуточный колышек (1-3) ;--------------------------------------------------- hanoi_towers proc from: word, to: word, temp: word test al,al ; число колец = 0? jz @@ ret dec ax ; вызываем для числа колец на 1 меньше push ax ; сохраняем для второго вызова call hanoi_towers, from, temp, to ; формируем сообщение mov al,byte ptr [from] add al,'0' ; номер колышка - в символ mov [szMove],al mov al,byte ptr [to] add al,'0' ; номер колышка - в символ mov [szMove+5],al mov ah,9 ; вывод строки на экран mov dx,offset szMove ; DS:DX = адрес выводимой строки int 21h pop ax ; восстанавливаем число колец call hanoi_towers, temp, to, from @@ret: ret hanoi_towers endp end
Решение задачи: «Рекурсия Ханойские башни на языке Assembler»
textual
Листинг программы
sub_1011F proc near arg_0 = word ptr 4 arg_2 = word ptr 6 arg_4 = word ptr 8 enter 0, 0 test al, al jz locret_10159 dec ax push ax push [bp+arg_4] push [bp+arg_0] push [bp+arg_2] call sub_1011F mov al, byte ptr [bp+arg_4]