EMU8086 деление 32-битного числа на 16-битное число дает неожиданный остаток 0

avatar
Mujtahid Akon
6 ноября 2020 в 15:47
451
1
3

Я пытался разделить (без знака) 8A32F4D5 на C9A5 с помощью инструмента emu8086. Я ожидал, что частное будет AF73H, а остаток будет 94B6H. После написания следующего кода я получил правильное частное, но остаток стал 0000h. Я что-то упустил?

.MODEL SMALL
.STACK 100H
.DATA 
.CODE 

MAIN PROC 
; initialize DS
MOV AX,@DATA 
MOV DS,AX 
; enter your code here
MOV DX, 8A32H
MOV AX, 0F4D5H 
MOV BX, 0C9A5H

DIV BX

;exit to DOS 
               
MOV AX,4C00H
INT 21H 

MAIN ENDP
    END MAIN 

Вывод в EMU8086:

enter image description here

Источник
Michael Petch
17 декабря 2020 в 04:17
0

Вы нашли ответ какой-либо ценности для вас?

Ответы (1)

avatar
Michael Petch
6 ноября 2020 в 22:20
4

Это похоже на ошибку в EMU8086. В этом беззнаковом делении нет ни деления на ноль, ни переполнения (DIV). Вы правы, что 0x8A32F4D5, разделенный на 0xC9A5, имеет остаток 0x94B6. Чтобы убедиться в этом, я запустил этот код с помощью Turbo Debugger в DOSBOX и получил ожидаемые результаты:

enter image description here

Если бы это деление было подписано с использованием инструкции IDIV, это привело бы к исключению деления на ноль из-за переполнения деления.