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

Материал из Информационная безопасностя
Перейти к навигации Перейти к поиску
pw>Безуглов Сергей
м (Защитил страницу Deitel C - Задачи - Глава 7 ([Редактирование=Разрешено только администраторам] (бессрочно) [Переименование=Разрешено только администраторам] (бессрочно)))
 
(не показано 11 промежуточных версий 2 участников)
Строка 1: Строка 1:
 
{{TOCRight}}
 
{{TOCRight}}
 
[[Deitel C#Задачи|Deitel C - Задачи]]
 
[[Deitel C#Задачи|Deitel C - Задачи]]
 +
 +
{{Группы и результаты}}
  
 
== 07.27 ==
 
== 07.27 ==
 
Создайте программу, которая симулирует работу компьютера (Simpletron).
 
Создайте программу, которая симулирует работу компьютера (Simpletron).
  
Компьютер имеет оперативную память в 1000 целых беззнаковых чисел.
+
Компьютер имеет оперативную память в 100 целых беззнаковых чисел.
 
Каждое число представляет собой инструкцию машинного языка (SML - Simpletron Machine Language).
 
Каждое число представляет собой инструкцию машинного языка (SML - Simpletron Machine Language).
  
Последние 3 цифры числа в десятичной записи представляют собой адрес.
+
Последние 2 цифры числа в десятичной записи представляют собой адрес.
 
Цифры перед ними инструкцию.
 
Цифры перед ними инструкцию.
  
Программа выводит инструкцию для ввода данных в память
+
Инструкции вводятся либо путём инициализации массива, либо считываются из файла memory.txt
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 - регистр инструкций.
+
* InstructionRegister - регистр инструкций. Он содержит адрес следующей инструкции в памяти компьютера, которую он будет исполнять.
Он содержит адрес следующей инструкции в памяти компьютера, которую он будет исполнять.
+
* Accumulator - аккумулятор. Целочисленный регистр используемый компьютером для совершения арифметических операций.
Accumulator - аккумулятор.  
 
Целочисленный регистр используемый компьютером для совершения арифметических операций.
 
 
Пока наш компьютер будет оперировать только целыми числами.
 
Пока наш компьютер будет оперировать только целыми числами.
  
Базовый набор инструкций SML.
+
Базовый набор инструкций SML:
Определите макросы препроцессора для определения инструкций.
 
  
 
  Операции ввода/вывода:
 
  Операции ввода/вывода:
  #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 - остановка компьютера

Текущая версия на 19:40, 3 мая 2021

Deitel C - Задачи

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

8 А 8 Б 8 В 8 Г

07.27

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

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

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

Инструкции вводятся либо путём инициализации массива, либо считываются из файла memory.txt

У процессора есть два регистра:

  • InstructionRegister - регистр инструкций. Он содержит адрес следующей инструкции в памяти компьютера, которую он будет исполнять.
  • 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 - остановка компьютера