Deitel C - Задачи - Глава 7: различия между версиями
Перейти к навигации
Перейти к поиску
pw>Безуглов Сергей (→07.27) |
(→07.27) |
||
(не показано 6 промежуточных версий этого же участника) | |||
Строка 13: | Строка 13: | ||
Цифры перед ними инструкцию. | Цифры перед ними инструкцию. | ||
− | + | Инструкции вводятся либо путём инициализации массива, либо считываются из файла memory.txt | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
У процессора есть два регистра: | У процессора есть два регистра: | ||
− | + | * InstructionRegister - регистр инструкций. Он содержит адрес следующей инструкции в памяти компьютера, которую он будет исполнять. | |
− | Он содержит адрес следующей инструкции в памяти компьютера, которую он будет исполнять. | + | * Accumulator - аккумулятор. Целочисленный регистр используемый компьютером для совершения арифметических операций. |
− | Accumulator - аккумулятор. | ||
− | Целочисленный регистр используемый компьютером для совершения арифметических операций. | ||
Пока наш компьютер будет оперировать только целыми числами. | Пока наш компьютер будет оперировать только целыми числами. | ||
− | Базовый набор инструкций SML | + | Базовый набор инструкций 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 - остановка компьютера |
Текущая версия на 19:40, 3 мая 2021
Группы и результаты
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 - остановка компьютера