
assem / Ответы по пунктам / 027
.docx-
Команды деления:
DIV <ор> ; деление чисел без знака (divide)
IDIV <ор >; деление чисел со знаком (integer divide)
<ор> — делитель 8- или 16-битовый, находящийся в регистре общего назначения или в ячейке памяти. Делимое должно иметь двойной размер по отношению к делителю: регистры ah и al, т.е. ах (при 8-битовом делителе) или dx и ах (при 16-битовом делителе, обычно пишут dx:ax).
Результат: а) если операнд (ор) — байт, то частное от деления помещается в регистр al, а остаток в ah;
б) если операнд — слово, то частное отделения в ах, а остаток в dx. Пример: div bx ; разделить dx:ax на содержимое
bx без знака;
------; сегмент данных--------
mem_byte db 54
-------; кодовый сегмент-----
div mem_byte ; разделить ah:al на байт без знака;
idiv dl ; разделить ah:al на содержимое dl со знаком;
-----;сегмент данных----
mem_word dw 1500
----; кодовый сегмент------
idiv mem_word ; разделить dx:ax на слово со знаком. При делении на непосредственное значение необходимо поступить следующим образом:
mov bx, 20
div bx;
При выполнении команды содержимое регистров dx:ax делится на 20. Если делимое 1 200 000 (оно должно находиться в DX:AX) задано в сегменте данных в десятичной системе счисления, а делитель непосредственное значение 20, необходимо написать следующие команды: dseg segment ; начало сегмента данных
a dd 1200000 ; делимое
dseg ends ; конец сегмента данных
cseg segment ; начало кодового сегмента
assume cs:cseg,ds:dseg
start: mov ax,dseg ; занесение адреса dseg
mov ds,ax ; в регистр ds
mov bx,20 ; делитель 20 в bx
mov dx,word ptr a+2 ;старшая часть делимого в dx
mov ax,word ptr a ; младшая часть делимого в ах
div bx ; деление
mov ah,4ch ; выход в DOS
int 21h
cseg ends ; конец кодового сегмента
end start ; точка входа в программу