Как записать программу в машинных кодах в память модели эвм

Обновлено: 08.07.2024

1 Цель работы: знакомство с интерфейсом ЭВМ, методами ввода и отладки программы, действиями основных команд и способов адресации. В настоящей лабораторной работе будем программировать ЭВМ в машинных кодах.

2 Основные теоретические положения:

Понятие программы

Программа на языке ЭВМ представляет собой последовательность команд. Код каждой команды определяет выполняемую операцию, тип адресации и адрес. Выполнение программы, записанной в памяти ЭВМ, осуществляется последовательно по командам в порядке возрастания адресовкоманд или в порядке, определяемом командами передачи управления.

Для того чтобы получить результат выполнения программы, пользователь должен:

P ввести программу в память ЭВМ;

P определить, если это необходимо, содержимое ячеек ОЗУ и РОН, содержащих исходные данные, а также регистров IR и BR;

P установить в PC стартовый адрес программы;

P перевести модель в режим Работа.

Ввод программы может осуществляться как в машинных кодах непосредственно в память модели, так и в мнемокодах в окно программыс последующим ассемблированием.

Команды в память учебной ЭВМ вводятся в виде шестиразрядных десятичных чисел, изменяющиеся в диапазоне "-99 999. +99 999", содержащие знак и 5 десятичных цифр. Старший разряд слова данных используется для кодирования знака: плюс (изображается как 0, минус (-) — как 1). Если результат арифметической оп рации выходит за пределы указанного диапазона, то говорят, что произойдет переполнение разрядной сетки. АЛУ этом случае вырабатывает сигнал переполнения OV = 1. Деление на ноль вызывает переполнение. Результатом операции деления является целая часть частного.

Типы адресации

P Прямая, например, add 23 – указание в команде непосредственно исполнительного адреса

P Косвенная, например, add @33 – при которой в команде указывается адрес регистра или ячейки памяти, в которых хранится адрес операнда или его составляющие

Система команд

При рассмотрении системы команд ЭВМ обычно анализируют три аспекта: форматы, способы адресации и систему операций.

В форматах команд выделяется три поля: два старших разряда (0, 1) определяют код операции COP, разряд 2 может определять тип адресации, разряды [3:5] могут определять прямой или косвенный адрес памяти, но­мер регистра (в команде movномера двух регистров), адрес перехода или короткий непосредственный операнд. В двухсловных командах непо­средственный операнд занимает поле [6:11].

Таблица 1Система команд учебной ЭВМ

I — непосредственный операнд;

2.4 Программно-доступные регистры и флаги:

Асс — аккумулятор;

PC — счетчик адреса команды, содержащий адрес текущей команд;

SP — указатель стека, содержащий адрес верхушки стека;

RB — регистр базового адреса, содержащий базовый адрес;

RA — регистр адреса, содержащий исполнительный адрес при кос ной адресации;

Многие любители не испытывают серьезных трудностей в овладении БЕЙСИКом. Для этого достаточно немного практики. Но рано или поздно они приходят к барьеру «машинного кода». Как это ни печально, но некоторые так перед ним и останавливаются. Это ни в коей мере не связано с отсутствием желания или способностей, просто многие не знают, с чего начать. Если в БЕЙСИКе можно начинать с чего угодно (при ошибке компьютер сам Вас поправит), то здесь Вы оказываетесь с процессором один на один, и такой метод проб и ошибок не срабатывает.

Одним словом, есть некий психологический барьер, который бывает трудно преодолеть в одиночку. Известно, что для того, чтобы научиться программировать, надо взять и начать программировать. «ИНФОРКОМ» предлагает Вам следующий компромиссный подход - сначала в рамках этой главы мы, беря «быка за рога», просто начнем программировать, а затем посвятим оставшуюся часть книги систематическому изложению материала.

Итак, давайте напишем первую программу в машинном коде. Прежде всего, выделим для нее область памяти. Если Вы читали нашу книгу "Большие возможности Вашего «ZX-Spectrum`а», то знаете, что для БЕЙСИКа в оперативной памяти компьютера отведена область памяти, начинающаяся с адреса, на который указывает системная переменная PROG и заканчивается адресом, на который указывает системная переменная RAMTOP. Предположим, что Вы хотите записать программу в машинных кодах, начиная с адреса 30000. Дайте команду CLEAR 29999. Эта команда установит RAMTOP в 29999 и Ваша программа будет защищена от возможной порчи из БЕЙСИКа. Даже если Вы дадите команду NEW, области памяти, находящиеся выше RAMTOP, не будут поражены.

Теперь дайте две прямые команды одну за другой:

Мы сейчас записали два числа в нужные нам адреса. Они образуют простейшую программу. Выполнить ее можно командой RANDOMIZE USR 30000. Попробуйте сами. Вам покажется, что ничего не произошло, но это не так. Сначала процессор обратился по адресу 30000 и нашел там число 0, которое обозначает машинный код операции NOP. Операция NOP ( no operation - нет операции) дает команду процессору, что ничего делать не надо. В течение 0,0000014 сек. он действительно ничего не делает, а затем переходит к следующему адресу, где находит число 201.

Если все, что Вы здесь прочитали, Вам понятно, то Вы уже поняли, как составляются программы в машинных кодах. Можно, конечно, возразить, что пользы от такой программы не очень много, но сейчас не в этом суть. Важно, чтобы Вы поняли, что некая последовательность чисел может быть последовательностью команд для процессора Z-80.

К сожалению, для нас мало, что говорит простая последовательность чисел вроде таких, как 0 и 201. Держать в памяти коды всех команд процессора (а их около семисот) непросто, но дело упрощается тем, что есть промежуточный язык между процессором и человеком - язык Ассемблера. У каждого кода есть своя мнемоника Ассемблера. Мнемоника - это набор букв, являющихся сокращением английских слов. Для нашего примера программа на Ассемблере выглядит так:

Перевод этих мнемоник в машинные коды тоже можно поручить компьютеру. Для этого существуют специальные программы, которые тоже называют Ассемблерами. Есть и противоположные программы - Дизассемблеры. Они наоборот переводят машинные коды в мнемоники Ассемблера.

И тех программ и других достаточно много. Часто они объединяются в пакеты. Широко распространены пакеты GENS3/MONS3 фирмы HISOFT и EDITAS / MONITOR 16/48 фирмы PICTURESQUE . Здесь GENS 3 и EDITAS - Ассемблеры, а MONS 3, MONITOR 16 и MONITOR 48 - Дизассемблеры.

Теперь давайте вернемся к нашей первой программе и попробуем ее несколько развить, чтобы она все же что-то делала. Процессор Z-80 имеет несколько регистров, у которых есть имена – «А», «В», «С» и т.д. Каждый из них может содержать одно какое-либо целое число от 0 до 255 (т.е. один байт).

Существуют десятки команд процессора, которые позволяют копировать содержимое регистров из одного в другой, а также выполнять связь с внешним миром, в т.ч. и с оперативной памятью.

Так, например, команда Ассемблера LD B,A (машинный код - 71) означает «загрузить содержимое регистра А в регистр В». LD - это сокращение от LOAD (загрузка).

Точно так же LD C,B (машинный код 72) означает «загрузить в регистр С содержимое регистра В». Можно загружать в регистры и целые числа. Например, LD A, n - означает «загрузить в регистр А целое число n », где n может быть числом от 0 до 255. До этого все команды были однобайтными. Эта же команда - двухбайтная. Сначала идет машинный код - 62, а за ним само число - n . Так, например, LD A, 77 (загрузить в регистр А число 77) будет выглядеть так: 62,77. Здесь 62 - код операции, - он сообщает процессору, что надо сделать, а 77 - это операнд. Заметим здесь же, что бывают операции и трехбайтные и четырехбайтные. Первый байт, как правило, - код операции, а следующие за ним - операнды. Мы говорим «как правило» потому, что есть некоторые операции, код которых записывается двумя байтами [прим.1].

Итак, мы уже готовы к тому, чтобы написать программу, которая будет перебрасывать какое-либо число из одного регистра процессора в другой.

Для решения с помощью ЭВМ некоторой задачи должна быть разработана программа. Программа на языке ЭВМ представляет собой последовательность команд. Код каждой команды определяет выполняемую операцию, тип адресации и адрес. Выполнение программы, записанной в памяти ЭВМ, осу­ществляется последовательно по командам в порядке возрастания адресов команд или в порядке, определяемом командами передачи управления.

Для того чтобы получить результат выполнения программы, пользователь должен:

· ввести программу в память ЭВМ;

· определить, если это необходимо, содержимое ячеек ОЗУ и РОН, содер­жащих исходные данные, а также регистров IR и ВR;

· установить в РС стартовый адрес программы;

· перевести модель в режим Работа.

Каждое из этих действий выполняется посредством интерфейса модели, опи­санного в приложении Ввод программы может осуществляться как в машинных кодах непосредственно в память модели, так и в мнемокодах в окно Текст программыс последующим ассемблированием.

Цель настоящей лабораторной работы — знакомство с интерфейсом модели ЭВМ, методами ввода и отладки программы, действиями основных классов команд и способов адресации. Для этого необходимо ввести в память ЭВМ и выполнить в режиме Шагнекоторую последовательность команд (опреде­ленную вариантом задания) и зафиксировать все изменения на уровне про­граммно-доступных объектов ЭВМ, происходящие при выполнении этих команд.

Команды в память учебной ЭВМ вводятся в виде шестиразрядных десятич­ных чисел

В настоящей лабораторной работе будем программировать ЭВМ в машинных кодах.

Пример 1

Дана последовательность мнемокодов, которую необходимо преобразовать в машинные коды, занести в ОЗУ ЭВМ, выполнить в режиме Шаг и зафикси­ровать изменение состояний программно-доступных объектов ЭВМ (табл. 1).

Таблица 1.Команды и коды

Введем полученные коды последовательно в ячейки ОЗУ, начиная с адреса 000. Выполняя команды в режиме Шаг, будем фиксировать изменения про­граммно-доступных объектов (в данном случае это Асc, РС и ячейки ОЗУ 020 и 030) в табл.2.

Таблица 2.Содержимое регистров

РС Асе М(30) М(20) РС Асе М(30) М(20)

Выполнение работы

1.Ознакомиться с архитектурой ЭВМ

2. Записать в ОЗУ "программу", состоящую из пяти команд — варианты задания выбрать из табл. 3. Команды разместить в последовательных ячейках памяти.

3. При необходимости установить начальное значение в устройство ввода IR.

4. Определить те программно-доступные объекты ЭВМ, которые будут изменяться при выполнении этих команд.

5. Выполнить в режиме Шагвведенную последовательность команд, фиксируя изменения значений объектов, определенных в таблице (см.
форму табл.2).

6. Если в программе образуется цикл, необходимо просмотреть не более двух повторений каждой команды, входящей в тело цикла.

Задание 2

Цель работы

Программирование разветвляющегося процесса

Выполнение лабораторной работы

Для реализации алгоритмов, пути в которых зависят от исходных данных, используют команды условной передачи управления.

Пример 1

В качестве примера рассмотрим программу вычисления функции

причем х вводится с устройства ввода IR, результат у выводится на OR. Граф-схема алгоритма решения задачи показана на рис. 1.



Рис. 1.Граф-схема алгоритма

данной лабораторной работе используются двухсловные команды с непо­средственной адресацией, позволяющие оперировать отрицательными чис­лами и числами по модулю, превышающие 999, в качестве непосредственно­го операнда.

Оценив размер программы примерно в 20—25 команд, отведем для области данных ячейки ОЗУ, начиная с адреса 030. Составленная программа с ком­ментариями представлена в виде табл. 1.

Таблица 1.Пример программы

Задание 1

1. Разработать программу вычисления и вывода значения функции:

для вводимого из IR значения аргумента х. Функции и допустимые пре­делы изменения аргумента приведены в табл. 2, варианты заданий — в табл. 3.

2. Исходя из допустимых пределов изменения аргумента функций (табл. 2) и значения параметра а для своего варианта задания (табл. 3) выделить на числовой оси Ох области, в которых функция у вычисляется по представленной в п. 1 формуле, и недопустимые значения аргумента. На
недопустимых значениях аргумента программа должна выдавать на OR максимальное отрицательное число: 199 999.

3. Ввести текст программы в окно Текст программы,при этом возможен набор и редактирование текста непосредственно в окне Текст программыили загрузка текста из файла, подготовленного в другом редакторе.

5. Отладить программу. Для этого:

а) записать в IR значение аргумента х > а (в области допустимых значений);

б) записать в РС стартовый адрес программы;

в) проверить правильность выполнения программы (т. е. правильность ре­зультата и адреса останова) в автоматическом режиме. В случае нали­чия ошибки выполнить пп. 5, г и 5, д; иначе перейти к п. 5, е;

г) записать в РС стартовый адрес программы;

е) записать в IR значение аргумента х < а (в области допустимых значений); выполнить пп. 5, б и 5, в;

ж) записать в IR недопустимое значение аргумента х и выполнить пп. 5, б и 5, в.

6. Для выбранного допустимого значения аргумента х наблюдать выполне­ние отлаженной программы в режиме Шаг и записать в форме табл. 2 содержимое регистров ЭВМ перед выполнением каждой команды.

Таблица 2.Содержимое регистров

РС Асс М(30) М(20) РС Асе М(30) М(20)

Таблица 3.Функции

Таблица 4.Варианты задания 1

Номер варианта i j а Номер варианта i j а
-20

Содержание отчета

Отчет о лабораторной работе должен содержать следующие разделы:

1.Формулировка варианта задания.

2. Граф-схема алгоритма решения задачи.

3. Размещение данных в ОЗУ.

4. Программа в форме табл. 1

5. Последовательность состояний регистров ЭВМ при выполнении программы в режиме Шаг для одного значения аргумента.

6. Результаты выполнения программы для нескольких значений аргумента, выбранных самостоятельно.

Контрольные вопросы

1. Что такое система команд ЭВМ?

2. Какие способы адресации использованы в модели ЭВМ? В чем отличие между ними?

3. Как просмотреть и, при необходимости, отредактировать содержимое ячейки памяти?

4. Какие способы адресации операндов применяются в командах ЭВМ?

5. Как работает механизм косвенной адресации?

6. Какая ячейка будет адресована в команде с косвенной адресацией через ячейку 043, если содержимое этой ячейки равно 102 347?

2339 Лабораторная работа №1 на тему Архитектура ЭВМ и система команд

Лабораторная работа №1 на тему Архитектура ЭВМ и система команд

Цель: знакомство с интерфейсом модели ЭВМ, методами ввода и отладки программы, действиями основных классов команд и способов адресации.

Теоретические сведения

Для решения с помощью ЭВМ некоторой задачи должна быть разработана программа. Программа на языке ЭВМ представляет собой последовательность команд. Код каждой команды определяет выполняемую операцию, тип адресации и адрес. Выполнение программы, записанной в памяти ЭВМ, осуществляется последовательно по командам в порядке возрастания адресов команд или в порядке, определяемом командами передачи управления.

Для того чтобы получить результат выполнения программы, пользователь должен:

ввести программу в память ЭВМ;

определить, если это необходимо, содержимое ячеек ОЗУ и РОН, содержащих исходные данные, а также регистров IR и BR;

установить в PC стартовый адрес программы;

перевести модель в режим Работа.

Каждое из этих действий выполняется посредством интерфейса модели, описанного в главе 8. Ввод программы может осуществляться как в машинных кодах непосредственно в память модели, так и в мнемокодах в окно Текст программы с последующим ассемблированием.

При выполнении лабораторной работы необходимо ввести в память ЭВМ и выполнить в режиме Шаг некоторую последовательность команд (определенную вариантом задания) и зафиксировать все изменения на уровне программно-доступных объектов ЭВМ, происходящие при выполнении этих команд.

Команды в память учебной ЭВМ вводятся в виде шестиразрядных десятичных чисел (смотри форматы команд на рисунке 8.3, коды команд и способы адресации в таблице 8.4-8.5).

В настоящей лабораторной работе необходимо выполнить программирование ЭВМ в машинных кодах.

Пример 1

Дана последовательность мнемокодов, которую необходимо преобразовать в машинные коды, занести в ОЗУ ЭВМ, выполнить в режиме Шаг и зафиксировать изменение состояний программно-доступных объектов ЭВМ (таблица 1.1).

Читайте также: