Idiv делитель

Для этой команды справедливы все рассмотренные положения, касающиеся команд и чисел со знаком. Отметим лишь особенности возникновения исключения 0, “деление на ноль”, в случае чисел со знаком. Оно возникает при выполнении команды idiv по одной из следующих причин:

· делитель равен нулю;

· частное не входит в отведенную для него разрядную сетку.

Последнее в свою очередь может произойти:

· при делении делимого величиной в слово со знаком на делитель величиной в байт со знаком, причем значение делимого в более чем 128 раз больше значения делителя (таким образом, частное не должно находиться вне диапазона от –128 до +127);

· при делении делимого величиной в двойное слово со знаком на делитель величиной в слово со знаком, причем значение делимого в более чем 32 768 раз больше значения делителя (таким образом, частное не должно находиться вне диапазона от –32 768 до +32 768);

· при делении делимого величиной в учетверенное слово со знаком на делитель величиной в двойное слово со знаком, причем значение делимого в более чем 2 147 483 648 раз больше значения делителя (таким образом, частное не должно находиться вне диапазона от –2 147 483 648 до +2 147 483 647).

К примеру, вычислим значение y = (a + b)/c, где a, b, c — байтовые знаковые переменные

Пример 7. Вычисление простого выражения

<2> masm<3> model small<4> stack 256<5>.data<6> a db?<7> b db?<8> c db?<9> y dw 0<10>.code<11> main:;точка входа в программу<12>...<13> xor ax,ax<14> mov al,a<15> cbw<16> movsx bx,b<17> add ax,bx<18> idiv c;в al — частное, в ah — остаток<19> exit:<20> mov ax,4c00h;стандартный выход<21> int 21h<22> end main;конец программы

В этой программе делимое для команды idiv (строка 17) готовится заранее. Так как делитель имеет размер байта, то делимое должно быть словом. С учетом этого сложение осуществляется параллельно с преобразованием размера результата в слово (строки 13–16). Для примера расширение операндов со знаком производится двумя разными командами — cbw и movsx.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: