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, чтобы избежать повторного использования остатков в качестве части дивиденда.
Кроме того, начните использовать отладчик. Это помогает.