Сборка 8086 - DIV идет вразрез, IP бесконечно прыгает в странное место - PullRequest
2 голосов
/ 23 ноября 2011

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

в моем коде есть одна часть, которая принимает число (например, 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 переходит в дх). Следующее деление, IP переходит в обезьяну и просто переходит к команде "db FE" и снова и снова в бесконечном цикле.?д:

1 Ответ

6 голосов
/ 23 ноября 2011

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

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

...