Как делить сразу два регистра? (Assembler)
Предположим у меня есть два регистра DX(18FB) и AX(78C2), мне нужно DX:AX тоесть число ( 18FB78C2) поделить на что-то, например на "А". Причем я могу использовать только 16 битный компилятор (без EAX и прочего) Как мне это сделать?
Вообще говоря так и делается при размере делителя в слово.
Единственная проблема тут - при маленьком делителе частное может не уместиться в 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
Программу модифицируйте под свои нужны.
> Как мне это сделать?
Проще всего, чтобы не заморачиваться, подглядеть как это делает любой 16-битный компилятор ЯВУ, например, в составе ТурбоПаскаля.
Рарисуй там операцию ц/ч деления, скомпилируй с опциями включения отлад. инф-ции и оттрассируй пошагово интересующий код под, например, отлажчиком td.exe. Сразу чтанет понятна последовательность требуемых действий в машкоде.