ИРКУТСКИЙ НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
Заочно-вечерний
наименование института
Кафедра вычислительной техники
наименование кафедры
Отчет по лабораторной работе №2
Вариант 5
Программирование на TOYCODE.
наименование темы
По дисциплине «Машинно-ориентированные языки»
Разработал студент ЭВМбз-12-1 ____________ А.И.Помазков
шифр группы подпись И.О. Фамилия
Руководитель ___________ Н.Н.Егорова
подпись И.О. Фамилия
Иркутск 2016 г.
Содержание
1.Цель работы: 3
2.Порядок выполнения работы: 3
3.Задание 1. 3
3.1. Постановка задачи: 3
3.2 Система команд TOYCODE: 3
3.3 Таблица внешних спецификаций. 4
3.4 Таблица тестов. 4
3.5 Таблица памяти. 4
3.6. Листинг программы.. 4
3.7 Протокол работы программы.. 5
3.8 Заключение о первом задание: 7
4.Задание 2. 7
4.1 Постановка задачи: 7
4.2 Таблица внешних спецификаций. 7
4.3 Таблица тестов. 7
4.4 Таблица памяти: 8
4.5 Алгоритм на языке PASCAL: 8
4.6 Блок схема: 8
4.7 Листинг программы в TOYCODE. 9
4.8 Протокол работы программы.. 10
4.9 Заключение о втором задание: 13
1.Цель работы:
Программирование на ToyCode и закрепление знаний по отладке программы. Использование знаний из курса «Программирование на ЯВУ».
2.Порядок выполнения работы:
1. Ознакомиться с теоретическими материалами по теме.
2. Разобрать лекционные примеры.
3. Ознакомиться с заданием согласно варианту.
4. Составить таблицу внешних спецификаций
5. Выполнить проектирование тестов к задачам.
6. Разработать и описать алгоритмы решения в виде блок-схемы или псевдокода.
4. Закодировать алгоритмы на языке ассемблера с необходимыми комментариями.
5. Получить исполняемый файл (.tcp)
7. Отладить и протестировать программу.
Задание 1
3.1. Постановка задачи:
Выполнить вычисления Y по формуле . Значения аргументов вводятся с клавиатуры.
3.2 Система команд TOYCODE:
КОП в числовой форме | КОП в форме символического имени | Название |
STOP | Останов | |
LD | Загрузка в аккумулятор | |
STO | Запись в память | |
ADD | Сложение | |
SUB | Вычитание | |
MPY | Умножение | |
DIV | Деление нацело | |
IN | Ввод | |
OUT | Вывод | |
B | Переход безусловный | |
BGTR | Переход, если больше нуля | |
BZ | Переход, если равно нулю |
Таблица внешних спецификаций
№ | Имя | Назначение | Тип | ОДЗ |
a | Переменная | целый | -999..999 | |
b | Переменная | целый | -999..999 | |
c | Переменная | целый | -9999..9999 | |
x | Константа | целый | ||
y | Искомая переменная | целый | -9999..9999 |
Таблица тестов
№ теста | a | b | c | y | Комментарии |
-2 | - | Ошибка | |||
-1 |
Таблица памяти
Переменные | |
Имя переменной | Номер ячейки памяти |
a | |
с | |
b | |
y | |
R (рабочая ячейка) | |
Постоянные | |
Листинг программы
REM Исходные данные
REM Переменные
a: DC 1
c: DC 1
b: DC 3
y: DC 0
REM Задаем рабочую ячейку
r: DC 0
REM Записываем константу 5 в память
x: DC 5
REM Загружаем значение переменной "а" в аккумулятор
LD a
REM Вычисляем числитель (а+с)
ADD c
REM сохраняем результат в рабочую ячейку «r"
STO r
REM Записываем 5 в аккумулятор
LD x
REM Вычисляем произведение 5a
MPY a
REM Вычисляем разность 5а-b
SUB b
REM Делим числитель на содержимое рабочей ячейки
DIV r
REM Записываем в y результат
STO y
REM Выводим результат
OUT y
REM Стоп
STOP
Протокол работы программы
Заносим наш код в поле исходного кода в трансляторе языка TOYCODE, и нажимаем кнопку «Трансляция».
Рисунок 1 –Трансляция TOYCODE
Далле сохраняем обьектный код, и получаем фаил с расширением.tcp.
Рисунок 2 – Сохранение объектного кода
Файл с кодом запускаем на TOYCOMP и проверяем результат выполнения программы. Исходя из таблицы тестов при заданных a=1, b=3, c=1 Y должен получиться равным 1.
Рисунок 3 – Результат выполнения транслированного TOYCODE
Из рисунка 3 видно, что на устройство вывода пришла 1, что говорить о правильности транслированного TOYCODа. Проведем еще два прогона программы следуя таблице тестов:
№ теста | a | b | c | y | Комментарии |
-2 | - | Ошибка |
Рисунок 4 – Прогон 2 с выдачей ошибки
Из рисунка 4 видно сообщение об ошибке, как и предполагалось в таблице тестов. Проведем последний 3 прогон:
№ теста | a | b | c | y | Комментарии |
-1 |
Рисунок 5 – Прогон 3, получение отрицательного числа
Из рисунка 5 видно, что в результате выполнения программы получилось отрицательное число, а именно -1, как и предполагалось нами.
3.8 Заключение о первом задание:
Программа отлажена, тестирование показало, что программа правильно решает поставленную задачу.
Задание 2
4.1 Постановка задачи:
Найти количество цифр в числе N>0;
Таблица внешних спецификаций
№ | Имя | Назначение | Тип | ОДЗ |
n | Переменная | целый | -999..999 | |
k | Искомая переменная | целый | -999..999 | |
p1 | Константа | целый | ||
p2 | Константа | целый |
Таблица тестов
№ теста | n | k | Комментарии |
-4 | Завершение программы так, как n<0 | ||
Завершение программы так, как n=0 |
4.4 Таблица памяти:
Переменные | |
Имя переменной | Номер ячейки памяти |
n | |
k | |
R (рабочая ячейка) | |
Постоянные | |
4.5 Алгоритм на языке PASCAL:
Var
N,k: integer;
begin
Readln(n);
K:=0;
While n>0 do
begin
N:= N div 10;
K:=k+1;
End;
Writeln(k);
End.
4.6 Блок схема:
Листинг программы в TOYCODE
REM Вводим исходные данные
n: DC 25
k: DC 0
REM Вводим необходимые постоянные
p1: DC 10
p2: DC 1
REM Резервируем рабочую ячейку
r: DC 0
REM Загружаем в аккумулятор величину n
LD n
REM Заносим в память величину n
STO r
REM Записываем в аккумулятор значение рабочей ячейки
LD r
REM Делаем переход для проверки введеного числа, оно должно быть строго больше 0
BGTR M1
REM Выводим на устройство вывода ответ
OUT k
REM Остановка программы
STOP
REM Делаем метку М1, для организации цикла
REM И делим содержимое аккумулятора на 10
M1: DIV p1
REM Записываем содержимое аккумулятора в рабочую ячейку
STO r
REM Записываем значение "к" в аккумулятор
LD k
REM Прибавляем 1
ADD p2
REM Записываем в память новое значение "k"
STO k
REM Снова записываем содержимое рабочей ячейки в аккумулятор
LD r
REM Делаем переход на метку М1 если содержимое аккумулятора >0
BGTR M1
REM Выводим на устройство вывода ответ
OUT k
REM Остановка программы
STOP