Оглавление
1 Цель работы.. 3
2 Порядок выполнения работы.. 3
3 Постановка задачи. 3
4 Алгоритм. 3
5 Таблица внешних спецификаций. 4
6 Таблица памяти. 4
7 Таблица тестов. 4
8 Листинг программы на TOYCOMPe. 5
9 Протокол работы программы.. 6
10 Заключение. 9
Цель работы
1. Знакомство с архитектурой учебной машины. Знакомство с системой команд ToyComp.
2. Получение навыков программирования в машинных кодах.
Порядок выполнения работы
1. Ознакомиться с теоретическими материалами по теме.
2. Ознакомиться с заданием согласно варианту.
3. Составить таблицу внешних спецификаций
4. Подобрать тестовые примеры к задаче. Предусмотреть тесты, которые вызовут переполнение, деление на ноль.
5. Закодировать алгоритм на языке ToyComp.
6. Выполнить трансляцию, получив исполняемый файл (.tcp), изучить файл листинга. Выполнить программу по шагам, изучая изменение регистров и переменных в памяти.
7. Отладить и протестировать программу.
Постановка задачи
Выполнить вычисления Y по формуле y=5a- b/ (7+ v). Значения аргументов вводятся с клавиатуры.
Алгоритм
1. Ввод a
2. Ввод b
3. Ввод v
4. Загрузка 7 в аккумулятор
5. Сложение v со значением в аккумуляторе
6. Сохранение суммы в рабочей ячейке
7. Загрузка в аккумулятор b
8. Деление на значение, сохраненное в рабочей ячейке
9. Сохранение в рабочей ячейке
10. Загрузка в аккумулятор 5
11. Умножение значения аккумулятора на a
12. Вычитание рабочей ячейки из произведения
13. Сохранение в рабочей ячейке Y
14. Вывод Y
15. Стоп
Таблица внешних спецификаций
№ | Имя | Назначение | Тип | ОДЗ |
a | Переменная | целый | -9999..9999 | |
b | Переменная | целый | -9999..9999 | |
v | Переменная | целый | -9999..9999 | |
x | Переменная | целый | -9999..9999 | |
y | Искомая переменная | целый | -9999..9999 |
Таблица памяти
|
Переменные | |
Имя переменной | Номер ячейки памяти |
a | |
b | |
v | |
y | |
R (рабочая ячейка) | |
Постоянные | |
Таблица тестов
№ | Тест 1 | Тест 2 | Тест 3 | Тест 4 | Тест 5 | Тест 6 | Тест 7 | Тест 8 |
a | -100 | |||||||
b | -9000 | |||||||
v | -7 | -6 | -6 | |||||
y | ошибка! | ошибка! | -1 | |||||
К | выпол | /0 | перепол | выпол | дробь | выпол | выпол | выпол |
Листинг программы на TOYCOMPe
№ ячейки | Команда | Комментарий |
Ввод a | ||
Ввод b | ||
Ввод v | ||
Загрузка 7 в аккумулятор | ||
Сложение v c аккумулятором | ||
Сохранение в РЯ | ||
Загрузка b в аккумулятор | ||
Деление на РЯ | ||
Сохранение в РЯ | ||
Загрузка 5 в аккумулятор | ||
Умножение аккумулятора на a | ||
Вычитание РЯ из произведения | ||
Сохранение в РЯ Y | ||
Вывод Y | ||
Стоп | ||
… | ||
Рабочая ячейка R | ||
Ячейка хранения Y | ||
Ячейка хранения 7 | ||
Ячейка хранения 5 | ||
Ячейка хранения v | ||
Ячейка хранения b | ||
Ячейка хранения a |
Протокол работы программы
Занесем код программы в TOYCOMP
Рисунок 1 – Введённый код в программе TOYCOMP.
Для проверки работоспособности программы и правильности написанного кода, проведем несколько прогонов программы с данными взятыми из составленной таблицы тестов:
|
Тест 1
a | b | v | y |
11 Выполнена команда СТОП |
Рисунок 2 – Первый прогон программы.
Из рисунка 2 видно, что y=11, как и было задано в таблице тестов. Программа выполнила поставленную задачу верно.
Из рисунка 3 видно сообщение об ошибки, что говорит о правильности выполнения программы, так как делить на ноль нельзя. Проведем второй прогон следуя данным из таблицы тестов:
Тест 2
a | b | v | y |
-7 | Ошибка! Деление на 0 |
Рисунок 3 – Второй прогон программы.
Так как память нашего игрушечного компьютера сильно ограничена, легко можно переполнить память, что должно привести к ошибке и остановке программы. Проведем последний прогон следуя данным из таблицы тестов:
Тест 3
a | b | v | y |
Ошибка! Переполнение |
Рисунок 4 –Третий прогон программы.
Заключение
Программа отлажена, тестирование показало, что программа правильно решает поставленную задачу, но мы видим, что писать программу сложно из-за не читаемости машинного кода, более того нужно создавать очень громоздкий текст самой программы из-за одноадресности команд и минимума выполняемых команд.