Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТКЗ№1.doc
Скачиваний:
1
Добавлен:
18.11.2019
Размер:
1.18 Mб
Скачать

1 Пояснювальна записка

1.1 Ділення цілих без знакових чисел

Сучасний процесор родини Intel х86 має власну систему інструкцій, яка складається з великого набору команд. Інструкції процесора родини Intel х86 зручно розділяти на шість груп:

  • Інструкції передачі даних;

  • Інструкції арифметичних операцій;

  • Інструкції логічних операцій;

  • Інструкції передачі управління;

  • Інструкції обробки ланцюжків;

  • Інструкції управління процесором;

Інструкції арифметичних операцій діляться на:

  • Інструкції додавання;

  • Інструкції віднімання;

  • Інструкції порівняння;

  • Інструкції множення;

  • Інструкції ділення;

Слід відмітити, що інструкції арифметичних операцій процесора і 8086 обробляють цілі знакові і без знакові числа 8-, 16-бітної розрядної сітки у відповідних діапазонах -128..+127, -32768..+32767, 0..255, 0..65535. Цілком природно, що при виконанні інструкцій арифметичних операцій особливості отриманого результату фіксуються у 6 бітах регістру прапорців. У склад інструкцій арифметичних операцій входять дві інструкції множення: для без знакових і знакових цілих двійкових чисел, а також дві інструкції ділення відповідно.

Загальне представлення інструкцій множення цілих чисел має наступний вигляд:

MUL/IMUL src; ext:ac=(ac)*src

; де множиться адресований операнд src і зміст акумулятора ac

Загальне представлення інструкцій ділення цілих чисел має наступний вигляд:

DIV/IDIV src; ac=quot((ext:ac)/(src))

; ext=rem((ext:ac)/(src))

; де ділиться зміст акумулятора ext:ac і адресований операнд src

У системі команд периферійного мікро контролера родини РІС 16С7ХХ відсутня команда ділення, тож програміст мусить програмно реалізовувати алгоритм ділення. Слід зазначити, що алгоритм ділення здійснюється по досить відомій схемі: обнуляється поточний залишок і старший біт числа, що ділиться сунеться у молодший біт поточного залишку у бік старших розрядів. Далі із значення поточного залишку віднімається дільник. Якщо поточний залишок негативний, то він відновлюється шляхом додавання до нього значення дільника. Значення добутку формується із поточного значення прапорця carry. Алгоритм ділення з відновлення негативних залишків закінчується після аналізу всіх розрядів числа, що ділиться.

Текст програми ділення цілих без знакових чисел має наступний вигляд:

;------------------------------------------------------------

w equ 0; приймач інформації регістр W

f equ 1; приймач інформації регістр R

;------------------------------------------------------------

r0 equ 0c; визначення

r1 equ 0d; адрес

r2 equ 0e; регістрового

r3 equ 0f; файлу

r4 equ 10; мікроконтролера PIC 16C71

;------------------------------------------------------------

status equ 03; визначення прапорців

carry equ 0; carry та

zero equ 2; zero у регістрі status

;------------------------------------------------------------

dividend equ 0b;

divider equ 03;

;------------------------------------------------------------

movlw 8; Організація лічильника

movwf r0; зсувів ділимого

movlw 0; Занулення

movwf r1; залишку

movlw 0; Занулення

movwf r2; приватного

movlw dividend; Завантаження ділимого

movwf r3; у регістр r3

movlw divider; Завантаження дільника

movwf r4; у регістр r4

cycle bcf status, carry; скидання прапорця carry

rlf r3; передача молодшого біту числа, ділиться

rlf r1; в обнулений залишок

movf r4,w; передача дільника у регістр w

subwf r1,w; із значення залишку віднімається значення дільника

btfss status, carry; аналіз прапорця carry

call recovery; передача управління на процедуру відновлення негативного ;залишку

movwf r1; передача значення залишку у регістр r1

rlf r2; формування із значення прапорця carry значення приватного

decfsz r0,f; декремент лічильника зсувів числа, що ділиться

goto cycle; передача управління на наступний програмний прохід

goto finish; передача управління на кінець програми

recovery addwf r4,w;

btfsc status, carry;

bcf status, carry;

return;

finish

end