Рекурсия Ханойские башни на языке 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]

Оцени полезность:

15   голосов , оценка 3.8 из 5