Файл: Контрольная работа 2018.docx

ВУЗ: Не указан

Категория: Методичка

Дисциплина: Системное программирование

Добавлен: 20.10.2018

Просмотров: 787

Скачиваний: 6

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Ре­зультат деления этим микропроцессором двух целых чисел также не может быть дробным и будет представлен как целое частное и целый остаток. Например, результатом деления 5/2 будет частное, равное 02, и остаток, равный 01, а результатом деления 0Bh/3 (т. е. 11(10)/3) будет частное 03 и остаток 02.

В операциях над однобайтными числами деление осуществляется в регистре-аккумуляторе AX, т. е. содержимое этого регистра делится на любое другое 8-битовое число, которое может храниться в других РОНах или в ячейках памяти.

Результат деления будет возвращаться в этот же регистр АХ, причем частное будет помещено в младшую его половину AL, а оста­ток – в старшую половину AH.

В операциях над двухбайтными числами деление осуществляется в регистрах AX и DX, т. е. содержимое этих регистров делится на любое другое
16-битовое число, которое может храниться в других регист­рах общего назначения или в ячейках памяти.

Результат деления будет возвращаться в эти же регистры АХ и DX, причем частное будет помещено в регистр AX, а остаток – в ре­гистр DX.

Для рассмотренных ранее примеров:

а) 5/2 – в AX запишется результат 0102, где содержимое AL = 02 является частным, а содержимое AH = 01 является остатком;

б) Bh/3 – в AX запишется результат 0203, т. е. частное 03 запи­шется в AL, а остаток 02 будет помещен в AH.

При делении 16-битовых чисел, например, числа 0501h на число 0100h
(т. е. 1281
(10) / 256(10)) результат деления будет помещен: частное 05 – в регистр AX (AX = 0005), а остаток 01 – в регистр DX (DX = 0001).

Во избежание возникновения ошибок деления и срабатывания при этом, как правило, системы прерывания процессора, нужно заботить­ся о том, чтобы регистры AX и DX перед началом выполнения опера­ции деления были очищены от других, хранившихся там ранее данных (т. е. обнулены). Особенно это касается регистра DX.

Сформулируем теперь рекомендуемую последовательность действий, которую нужно соблюдать при использовании операции деления:

а) при делении однобайтных чисел:

обнулить регистр AX;

делимое заслать в AX или в AL;

делитель заслать в младшую или старшую половину любого РОНа, например, в CL (если же делитель находится в ячейке памяти, адре­суемой, например, через BX, то в этой операции нет необходимос­ти);

выполнить операцию деления div СL (или операцию div byte ptr [BX], если делитель находился в ячейке, адресуемой через BX);

результат деления прочитать в AX, причем частное в – AL, а ос­таток в –АH.

б) при делении двухбайтных чисел:

обнулить регистры AX и DX;

заслать делимое в AX;

заслать делитель в любой (кроме DX) РОН, например в СX (если же, как и в предыдущем примере, делитель находится в ячейке памя­ти, адресуемой, например, через BX, то в этой операции также нет необходимости);

выполнить операцию деления div СX (или операцию div word ptr [BX], если делитель находился в ячейке, адресуемой через BX);

результат деления прочитать в AX и в DX, причем частное – в регистре AX, а остаток – в регистре DX.


Примечания:

1. В случаях, если делимое меньше делителя (например 2/3), получаемое дробное частное округляется до целого путем отбрасывания дробной части результа­та. Например, результатом деления числа 2 на число 3 будет частное 0 и остаток 2 , т. е. в регистр AX будет записано 0200. (В случаях, если требуется получить (возвратить) первоначальное значение делимого 2, следует обратную делению операцию умножения выполнять по алгоритму: 03 + 2 = 2).

2. Если частное превышает разрядность аккумулятора (боль­ше FF или FFFF) или делитель является нулем, генериру­ется прерывание типа 0, а частное и остаток не определены.

3. При возникновении прерывания выполняются следующие действия:

содержимое регистра флагов помещается в стек;

флаги IF и TF сбрасываются в 0;

содержимое сегментного регистра CS помещается в стек;

в регистр CS загружается слово из памяти по адресу 00002;

в регистр IP загружается слово из памяти по ад­ресу 00000.

В результате этих действий МП переходит к подпрограмме обработки прерывания типа 0, полный адрес CS:IP кото­рой берется из ячеек 00002 и 00000.