Deitel C - Задачи - Глава 7

Материал из Информационная безопасностя
Версия от 15:30, 20 января 2020; pw>Безуглов Сергей
Перейти к навигации Перейти к поиску

Deitel C - Задачи

Группы и результаты

8 А 8 Б 8 В 8 Г

07.27

Создайте программу, которая симулирует работу компьютера (Simpletron).

Компьютер имеет оперативную память в 1000 целых беззнаковых чисел. Каждое число представляет собой инструкцию машинного языка (SML - Simpletron Machine Language).

Последние 3 цифры числа в десятичной записи представляют собой адрес. Цифры перед ними инструкцию.

Программа выводит инструкцию для ввода данных в память Please enter SML instruction one by one with 0 as a terminating sequence. Memory location for each instruction will be part of the prompt.

Затем вводит инструкции с клавиатуры в память показывая в строке запроса адрес куда будет помещена вводимая инструкция (до ввода контрольного значения 0) и затем включает компьютер, который начинает их исполнять. Ввод инструкций от результатов работы компьютера необходимо отделить выводом строки. printf("Program loaded. Starting execution ...\n");

У процессора есть два регистра: Instruction register - регистр инструкций. Он содержит адрес следующей инструкции в памяти компьютера, которую он будет исполнять. Accumulator - аккумулятор. Целочисленный регистр используемый компьютером для совершения арифметических операций. Пока наш компьютер будет оперировать только целыми числами.

Базовый набор инструкций SML. Определите макросы препроцессора для определения инструкций.

Операции ввода/вывода:
#define READ 10 - ввести число с клавиатуры в определённый адрес памяти
#define WRITE 11 - вывести число из определённого адреса памяти на экран
Операции загзузки и выгрузки:
#define LOAD 20 - загрузить число из определённого адреса памяти в аккумулятор
#define STORE 21 - выгрузить число из аккумулятора в определённый адрес памяти
Арифметические операции:
#define ADD 30 - добавить число из определённого адреса памяти в аккумулятор (результат остаётся в аккумуляторе)
#define SUBTRACT 31 - отнять число из определённого адреса памяти из аккумулятора (результат остаётся в аккумуляторе)
#define DIVIDE 32 - разделить число из определённого адреса памяти на значение аккумулятора (результат остаётся в аккумуляторе)
#define MULTIPLY 33 - умножить число из определённого адреса памяти на значение аккумулятора (результат остаётся в аккумуляторе)
Операции передачи контроля:
#define BRANCH 40 - Безусловный переход к исполнению инструкции по указанному адресу
#define BRANCHNEG 41 - Переход к исполнению инструкции по указанному адресу в случае если аккумулятор содержит отрицательное число
#define BRANCHZERO 42 - Переход к исполнению инструкции по указанному адресу в случае если аккумулятор содержит ноль
#define HALT 43 - остановка компьютера