Имя пользователя:
Пароль:
 

Название темы: Деление
Показать сообщение отдельно

Аватара для ManHack

Старожил


Сообщения: 361
Благодарности: 6

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
var
   a, b, c, ans : integer;
begin
   readln(a, b, c);
   asm
      mov bx, b
      mov ax, c
      imul bx
      neg ax
      mov cx, a
      add ax, cx
      mov cx, c
      sub bx, cx
      idiv bx
      mov ans, ax
   end;
   writeln('Value = ', ans);
   readln;
end.
dx на момент выполнения команды idiv содержит ноль.

Среда Turbo Assembler (ассемблер для Intel-совместимых, втроенный в Turbo Pascal 7.0)

Т.е. всегда делится содержимое пары DX:AX на BX?
Или в каких-то случаях делится только содержимое AX на BX? (в каких?)
А каким образом вообще производится деление пары?
Допустим, в AX у меня записано 12, а в DX записано 7, что тогда будет в BX?
А что будет в BX, если в DX записано 65535, а в AX, допустим, 3?
Мне просто интересно как формируется одно число из этой пары DX:AX.

А ещё я видел, что некоторые пишут три регистра после idiv. Например, так:
idiv eax, eax, ah
У меня среда ругается, если я записываю больше одного слова.
Как объясняется этот феномен?

Отправлено: 23:56, 11-04-2010 | #3

Название темы: Деление