Deitel C - Задачи - Глава 7: различия между версиями

Материал из Информационная безопасностя
Перейти к навигации Перейти к поиску
м (7 версий импортировано)
Строка 22: Строка 22:
 
который начинает их исполнять.
 
который начинает их исполнять.
 
Ввод инструкций от результатов работы компьютера необходимо отделить выводом строки.
 
Ввод инструкций от результатов работы компьютера необходимо отделить выводом строки.
printf("Program loaded. Starting execution ...\n");
+
Program loaded. Starting execution ...
  
 
У процессора есть два регистра:
 
У процессора есть два регистра:
Строка 35: Строка 35:
  
 
  Операции ввода/вывода:
 
  Операции ввода/вывода:
  #define READ 10 - ввести число с клавиатуры в определённый адрес памяти
+
  READ 10 - ввести число с клавиатуры в определённый адрес памяти
  #define WRITE 11 - вывести число из определённого адреса памяти на экран
+
  WRITE 11 - вывести число из определённого адреса памяти на экран
  
 
  Операции загрузки и выгрузки:
 
  Операции загрузки и выгрузки:
  #define LOAD 20 - загрузить число из определённого адреса памяти в аккумулятор
+
  LOAD 20 - загрузить число из определённого адреса памяти в аккумулятор
  #define STORE 21 - выгрузить число из аккумулятора в определённый адрес памяти
+
  STORE 21 - выгрузить число из аккумулятора в определённый адрес памяти
  
 
  Арифметические операции:
 
  Арифметические операции:
  #define ADD 30 - добавить к числу из аккумулятора число из определённого адреса в памяти (результат остаётся в аккумуляторе)
+
  ADD 30 - добавить к числу из аккумулятора число из определённого адреса в памяти (результат остаётся в аккумуляторе)
  #define SUBTRACT 31 - отнять от числа из аккумулятора число из определённого адреса в памяти (результат остаётся в аккумуляторе)
+
  SUBTRACT 31 - отнять от числа из аккумулятора число из определённого адреса в памяти (результат остаётся в аккумуляторе)
  #define DIVIDE 32 - разделить число из аккумулятора на число из определённого адреса в памяти (результат остаётся в аккумуляторе)
+
  DIVIDE 32 - разделить число из аккумулятора на число из определённого адреса в памяти (результат остаётся в аккумуляторе)
  #define MULTIPLY 33 - умножить число из аккумулятора на число из определённого адреса в памяти (результат остаётся в аккумуляторе)
+
  MULTIPLY 33 - умножить число из аккумулятора на число из определённого адреса в памяти (результат остаётся в аккумуляторе)
  
 
  Операции передачи контроля:
 
  Операции передачи контроля:
  #define BRANCH 40 - Безусловный переход к исполнению инструкции по указанному адресу
+
  BRANCH 40 - Безусловный переход к исполнению инструкции по указанному адресу
  #define BRANCHNEG 41 - Переход к исполнению инструкции по указанному адресу в случае если аккумулятор содержит отрицательное число
+
  BRANCHNEG 41 - Переход к исполнению инструкции по указанному адресу в случае если аккумулятор содержит отрицательное число
  #define BRANCHZERO 42 - Переход к исполнению инструкции по указанному адресу в случае если аккумулятор содержит ноль
+
  BRANCHZERO 42 - Переход к исполнению инструкции по указанному адресу в случае если аккумулятор содержит ноль
  #define HALT 43 - остановка компьютера
+
  HALT 43 - остановка компьютера

Версия 09:07, 20 марта 2021

Deitel C - Задачи

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

8 А 8 Б 8 В 8 Г

07.27

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

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

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

Программа выводит инструкцию для ввода данных в память 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) и затем включает компьютер, который начинает их исполнять. Ввод инструкций от результатов работы компьютера необходимо отделить выводом строки. Program loaded. Starting execution ...

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

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

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