8086 Assembly - DIV собирается обезьяна, IP прыгает в странное место бесконечно

Я застрял в этой проблеме как день, не найдя никакой соответствующей информации.

есть эта одна часть моего кода, которая принимает число (например, 259) и разделяет его на слоты массива.

SEPERATE_DIGITS:
    mov ax,RESULT               ; result is the number im working on. RESULT dw 259h
    mov si,0
    SEPERATE_DIGITS_LOOP:
        div TEN                 ; TEN dw 10h
        add dl,30h              ; fix-up to print later on
        mov SEPERATED[si],dl    ; store separated digit in my array.
        inc si
        cmp ax,0
    jne SEPERATE_DIGITS_LOOP

Я отлаживал его на отладчике turbo.. первое подразделение отлично работает. (25 идет к тону, 9 переходит в dx). следующее подразделение, IP переходит в обезьяну и просто переходит к команде "db FE" и снова и снова в бесконечном цикле.

Какого черта я делаю неправильно? д:

Ответы

Ответ 1

Здесь дивиденд DIV - это 32-битные значения, взятые из DX (верхние 16 бит) и AX (низкие 16 бит).
Вам нужно обнулить DX перед каждым DIV, чтобы избежать повторного использования остатков в качестве части дивиденда.

Кроме того, начните использовать отладчик. Это помогает.