Автор: Пользователь скрыл имя, 29 Декабря 2010 в 01:44, курсовая работа
Мета роботи: навчитися складати програму на мові асемблеру, яка використовує арифметичні та логічні операції.
Завдання:
Скласти програму моделювання операції додавання, віднімання і множення чисел з фіксованою крапкою з заданою кількістю розрядів.
Введення операндів виконувати з клавіатури.
Результати виводити на екран.
Вступ 3
1.ЗАГАЛЬНІ ВІДОМОСТІ 4
1.1.Формати числових даних 4
1.2. Виконання арифметичних операцій 5
2. Блок-схема програми 9
2.1.Головна програма 9
2.2. Блок-схеми підпрограм 10
3. Опис роботи програми 14
3.1. Опис роботи головної програм 14
3.2. Опис виконання арифметичних операцій 14
4. Лістинг програми 16
5. Результати виконання програми 26
Висновки 28
Використані джерела 29
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
ЧЕРКАСЬКИЙ
ДЕРЖАВНИЙ ТЕХНОЛОГІЧНИЙ
Кафедра
системного проектування
Курсова робота
з дисципліни
«Системне програмування та операційні
системи»
Перевірив Виконав
ст. викладач студент групи ІТПС-908
Бабенко В.Г. Шевчук І.М.
_______________ ________
Черкаси,
2010 р.
Зміст
3.1. Опис роботи головної програм 14
3.2. Опис виконання арифметичних операцій 14
4. Лістинг програми 16
5. Результати виконання програми 26
Висновки 28
Використані джерела 29
Тема: модель арифметико-логічного пристрою.
Мета роботи: навчитися складати програму на мові асемблеру, яка використовує арифметичні та логічні операції.
Завдання:
Скласти програму моделювання операції додавання, віднімання і множення чисел з фіксованою крапкою з заданою кількістю розрядів.
Введення операндів виконувати з клавіатури.
Результати виводити на екран.
Програма повинна задовольняти таким умовам:
1 рівень - програма виконує операції підсумовування і віднімання цілих чисел.
2 рівень - програма виконує операції підсумовування і віднімання чисел з фіксованою крапкою і виконує перевірку правильності вводу чисел.
3
рівень - програма виконує операції підсумовування,
віднімання і множення чисел з фіксованою
крапкою, виконує перевірку правильності
вводу чисел і має "дружній" інтерфейс.
Рівень виконання програми вибирається
студентом.
Варіант - 8
Кількість байтів в цілій та дробовій частині – 3
Спосіб зберігання числа в пам’яті - не упакований
Числа, які вводяться з клавіатури, надходять в процесор в ASCII-кодах. ASCII-код кожної десяткової цифри числа дорівнює значенню цієї цифри, збільшеному на 30h.
В свою чергу, процесор дозволяє виконувати арифметичні операції додавання, віднімання, множення і ділення над цілими числами, які можуть зберігатись в пам'яті в одному із трьох форматів : двійковий формат, двійково-десятковий упакований формат і двійково-десятковий неупакований формат.
а)
Число в двійковому форматі зберігається
в пам'яті у вигляді одно- чи
двохбайтового числа в
б)
Число в двійково-десятковому
упакованому форматі
В кожному байті зберігаються дві двійково-кодовані десяткові цифри в коді BCD(Binary-Coded Decimal)
Цифра | Двійковий код | Цифра | Двійковий код |
0
1 2 3 4 |
0000
0001 0010 0011 0100 |
5
6 7 8 9 |
0101
0110 0111 1000 1001 |
Приклад
запису 6-розрядного десяткового числа
653201 в пам'яті в коді BCD:
1 байт | 2 байт | 3 байт | |
6 5 | 3 2 | 0 1 | десяткове представлення |
0110 0101 | 0011 0010 | 0000 0001 | двійкове представлення |
в) Число в двійково-десятковому неупакованому форматі зберігається у вигляді послідовності байтів. В кожному байті зберігається одна двійково-кодована десяткова цифра. ±ї значення міститься в чотирьох молодших бітах байта.
Перед виконанням операції множення таких чисел в старших чотирьох бітах повинні бути записані нулі. Для операції додавання і віднімання зміст цих біт не є суттєвим.
Приклад
запису 3-розрядного десяткового числа
653 в пам`яті в двійково-
1 байт | 2 байт | 3 байт | |
0 6 | 0 5 | 0 3 | десяткове представлення |
0000 0110 | 0000 0101 | 0000 0011 | двійкове представлення |
Процесори IBM PC мають в системі команд такі команди, які дозволяють виконувати арифметичні операції додавання, віднімання, множення і ділення над цілими числами в двійковому форматі, а також в двійково-десятковому упакованому і неупакованому форматах.
ADD
a,b - Додавання без урахування
перенесення. Команда додає
ADC
a,b - Додавання з перенесенням. Команда
додає значення двох операндів,
INC a - Збільшення на 1. Команда додає 1 до значення операнда а.
Операнд може находитися в пам'яті або в
регістрі. Установлюються прапори AF,OF,PF,SF,ZF.
SUB a,b - Віднімання. Команда віднімає із значення першого операнда а значення другого операнда b і розміщує результат замість першого операнда. Операнд може находитися в пам'яті, в регістрі, або бути безпосереднім параметром в команді. Не допускається віднімання, коли обидва операнда находяться в пам'яті. Першим операндом не може бути безпосередній параметр. Установлюються прапори AF,CF,OF,PF,SF,ZF.
SBB a,b - Віднімання з позикою. Команда віднімає із значення першого операнда а значення другого операнда b, зменшує результат на значення прапора CF (a-b-CF) і розміщує результат замість першого операнда. Обмеження операндів такі ж, як і в команді SUB. Установлюються прапори AF,CF,OF,PF,SF,ZF.
DEC a - Зменшування на 1. Команда зменшує значення операнда а на 1. Операнд може находитися в пам'яті
або в регістрі. Установлюються прапори AF,OF,PF,SF,ZF.
MUL a - Множення. Команда виконує множення вмісту акумулятора (AL або AX) на значення операнда а.
Результат розміщується, відповідно, в акумуляторі AX, або в парі регістрів DX:AX. Множники розглядаються як числа без знаків. Установлюються прапори CF і OF. Прапори AF,PF,SF і ZF не визначені.
IMUL a - Множення із знаком. Команда виконує множення вмісту акумулятора (AL або AX) на значення операнда а. Результат розміщується, відповідно, в акумуляторі AX, або в парі регістрів DX:AX. Множники розглядаються як числа із знаками.
Прапори CF і OF скидаються в 0, коли старша частина добутку (регістр AH або DX) є поширенням знака, який находиться в молодшій частині добутку (AL або AX), інакше ці прапори установлюються в 1.
DIV
a - Ділення. Команда виконує
IDIV
a - Ділення із знаком. Команда
виконує ділення операндів
Арифметичні операції над двійково-десятковими неупакованими числами виконуються порозрядно, починаючи з молодших розрядів операндів.
Слід нагадати, що для зберігання однієї цифри такого числа треба один байт.
Виконання операції над черговими розрядами операндів, тобто над черговими байтами, починається з того, що над цими байтами виконується відповідна двійкова команда додавання (ADD, ADC), віднімання (SUB, SBB), множення (MUL) або ділення (DIV).
Після того виконується корекція отриманого результату, щоб отримати правильне значення неупакованої десяткової цифри результату:
ААА - Корекція результату додавання. Команда коригує результат операції ADD. В чотирьох молодших бітах регістра AL записується значення десяткової цифри, а в чотирьох старших бітах записуються нулі. Коли в AL результат попередньої операції перевищує 9, тоді CF=1 і AH=AH+1.
AAS - Корекція результату віднімання. Команда коригує результат операції SUB. В чотирьох молодших бітах регістра AL записується значення десяткової цифри, а в чотирьох старших бітах записуються нулі. Коли потрібно мати позику із старшого розряду, тоді CF=1 і AH=AH+1.
AAM - Корекція в AX результату множення. Команда коригує результат операції MUL. В регістрі AH записується старша цифра добутку, а в AL - молодша цифра.
AAD - Корекція ділення. Команда коригує ділене в регістрі AL перед виконанням ділення, так що наступне ділення DIV дає неупаковану десяткову частку: в AL - результат, в AH - нуль.