Top.Mail.Ru
Ответы

Как делить сразу два регистра? (Assembler)

Предположим у меня есть два регистра DX(18FB) и AX(78C2), мне нужно DX:AX тоесть число ( 18FB78C2) поделить на что-то, например на "А". Причем я могу использовать только 16 битный компилятор (без EAX и прочего) Как мне это сделать?

По дате
По рейтингу
Аватар пользователя
Мыслитель
15лет

Вообще говоря так и делается при размере делителя в слово.
Единственная проблема тут - при маленьком делителе частное может не уместиться в AX, при этом произойдет исключение (деление на 0, кажется) .
Можно сделать, например, так:

.model tiny
.data
res dd ?
.code
org 100h
start:
mov dx, 18FBh
mov ax, 78C2h
mov cx, 3h
mov bx, ax
mov ax, dx
xor dx, dx
div cx
mov word ptr res+2, ax
mov ax, bx
div cx
mov word ptr res, ax
mov ax,4C00h
int 21h
end start

Программу модифицируйте под свои нужны.

Аватар пользователя
Просветленный
15лет

> Как мне это сделать?

Проще всего, чтобы не заморачиваться, подглядеть как это делает любой 16-битный компилятор ЯВУ, например, в составе ТурбоПаскаля.
Рарисуй там операцию ц/ч деления, скомпилируй с опциями включения отлад. инф-ции и оттрассируй пошагово интересующий код под, например, отлажчиком td.exe. Сразу чтанет понятна последовательность требуемых действий в машкоде.