Re: Помогите понять, где ошибка
От: Алексей Владимирович Миронов Россия  
Дата: 10.05.03 13:35
Оценка:
Здравствуйте, Maxim_Solovjev, Вы писали:

MS>Если же раскомментировать указанные строки, то дебагер при делении div bx выдаёт "Terminated, error code 256", в случае запуска программы она выдаёт divide overflow


Инструкция DIV в Вашем случае ожидает частное в регистровой паре DX:AX:

DIV—Unsigned Divide

Divides (unsigned) the value in the AX register, DX:AX register pair, or EDX:EAX register pair (dividend) by the source operand (divisor) and stores the result in the AX (AH:AL), DX:AX, or EDX:EAX registers.

Operation

IF OperandSize = 16 (* doubleword/word operation *)
THEN
  temp <- DX:AX / SRC;
  IF temp > FFFFH
  THEN #DE; (* divide error *) ;
ELSE
  AX <- temp;
  DX <- DX:AX MOD SRC;
FI;

Real-Address Mode Exceptions

#DE If the source operand (divisor) is 0. If the quotient is too large for the designated register.


(Цит. по: Intel Architecture Software Developer’s Manual. Volume 2: Instruction Set Reference)

Неизвестно, что находится в момент деления в регистре DX. Получаемое частное может не помещаться в регистре AX, вот процессор и выдает Divide Error.
... << RSDN@Home 1.0 beta 6a >>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.