Deitel C - Задачи - Глава 7: различия между версиями
pw>Безуглов Сергей |
pw>Безуглов Сергей (Oops... ошибочка) |
||
Строка 38: | Строка 38: | ||
#define WRITE 11 - вывести число из определённого адреса памяти на экран | #define WRITE 11 - вывести число из определённого адреса памяти на экран | ||
− | Операции | + | Операции загрузки и выгрузки: |
#define LOAD 20 - загрузить число из определённого адреса памяти в аккумулятор | #define LOAD 20 - загрузить число из определённого адреса памяти в аккумулятор | ||
#define STORE 21 - выгрузить число из аккумулятора в определённый адрес памяти | #define STORE 21 - выгрузить число из аккумулятора в определённый адрес памяти | ||
Арифметические операции: | Арифметические операции: | ||
− | #define ADD 30 - добавить число из определённого адреса памяти | + | #define ADD 30 - добавить к числу из аккумулятору число из определённого адреса в памяти (результат остаётся в аккумуляторе) |
− | #define SUBTRACT 31 - отнять число из определённого адреса памяти | + | #define SUBTRACT 31 - отнять от числа из аккумулятора число из определённого адреса в памяти (результат остаётся в аккумуляторе) |
− | #define DIVIDE 32 - разделить число из определённого адреса памяти | + | #define DIVIDE 32 - разделить число из аккумулятора на число из определённого адреса в памяти (результат остаётся в аккумуляторе) |
− | #define MULTIPLY 33 - умножить число из определённого адреса памяти | + | #define MULTIPLY 33 - умножить число из аккумулятора на число из определённого адреса в памяти (результат остаётся в аккумуляторе) |
Операции передачи контроля: | Операции передачи контроля: |
Версия 09:50, 10 мая 2020
Группы и результаты
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 - остановка компьютера