Приобретение навыков работы с регистрами процессора. и памятью.
ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ
- Прочитать методические указания 1, 2
- Разобрать приведенные примеры 1, 2
- Выполнить задания к работе 1 и 2
- Ответить на контрольные вопросы 1, 2
Оформите отчет, который должен содержать:
— титульный лист (см. приложение);
-формулировка варианта задания.
-размещение данных в ОЗУ.
-программа в форме таблицы
-последовательность состояний регистров ЭВМ при выполнении программы в режиме Шаг для одного значения аргумента.
-результаты выполнения программы для нескольких значений аргумента, выбранных самостоятельно.
МЕТОДИЧЕСКИЕ УКАЗАНИЯ 1.
Программирование цикла с переадресацией
При решении задач, связанных с обработкой массивов, возникает необходимость изменения исполнительного адреса при повторном выполнении некоторых команд. Эта задача может быть решена путем использования косвенной адресации.
FASM. add, sub, mul, div, neg. Арифметика ассемблер. #3
ПримерЗ
Разработать программу вычисления суммы элементов массива чисел С], С2. С„. Исходными данными в этой задаче являются: п — количество суммируемых чисел и Сх, С2. С„ — массив суммируемых чисел. Заметим, что должно выполняться условие п > 1, т. к. алгоритм предусматривает, по крайней мере, одно суммирование.
Кроме того, предполагается, что суммируемые числа записаны в ОЗУ подряд, т. е. в ячейки памяти с последовательными адресами. Результатом является сумма S.
![]() |
Составим программу для вычисления суммы со следующими конкретными параметрами: число элементов массива— 10, элементы массива расположены в ячейках ОЗУ по адресам 040, 041, 042. 049. Используемые для решения задачи промежуточные переменные имеют следующий смысл: At — адрес числа С,, i е ; ОЗУ(At) — число по адресу At, S — текущая сумма; к — счетчик цикла, определяющий число повторений тела цикла.
Распределение памяти таково. Программу разместим в ячейках ОЗУ, начиная с адреса 000, примерная оценка объема программы — 20 команд; промежуточные переменные: Аг — в ячейке ОЗУ с адресом 030, к — по адресу 031, S — по адресу 032. ГСА программы показана на рис. 9.2, текст программы с комментариями приведен в табл. 9.7.
Задание 3
1. Написать программу определения заданной характеристики последовательности чисел С1, С2. Сп. Варианты заданий приведены в табл. 9.8.
2. Записать программу в мнемокодах, введя ее в поле окна Текст программы.
3. Сохранить набранную программу в виде текстового файла и произвести ассемблирование мнемокодов.
4. Загрузить в ОЗУ необходимые константы и исходные данные.
Номер варианта | Характеристика последовательности чисел С,, С2. С„ |
Количество четных чисел | |
Номер минимального числа | |
Произведение всех чисел | |
Номер первого отрицательного числа | |
Количество чисел, равных С> | |
Количество отрицательных чисел | |
Максимальное отрицательное число | |
Номер первого положительного числа | |
Минимальное положительное число | |
Номер максимального числа | |
Количество нечетных чисел | |
Количество чисел, меньших С | |
Разность сумм четных и нечетных элементов массивов | |
Отношение сумм четных и нечетных элементов массивов |
Assembler #7 / Ассемблер / ЛамПанель / Решение задач № 1
Примечание. Под четными (нечетными) элементами массивов понимаются элементы массиWow, имеющие четные (нечетные) индексы. Четные числа — элементы массивов, делящиеся без остатка на 2.
Содержание отчета
1. Формулировка варианта задания.
2. Граф-схема алгоритма решения задачи.
3. Распределение памяти (размещение в ОЗУ переменных, программы и не
обходимых констант).
5. Значения исходных данных и результата выполнения программы.
9.3.4. Контрольные вопросы
1. Как организовать цикл в программе?
2. Что такое параметр цикла?
3. Как поведет себя программа, приведенная в табл. 9.7, если в ней будет отсутствовать команда wr 31 по адресу 014?
4. Как поведет себя программа, приведенная в табл. 9.7, если метка mi будет поставлена по адресу 005? 007?
Практическая работа №9-10 Работа со стековой памятью. (Ассемблер)
ЦЕЛЬ РАБОТЫ
Приобретение навыков работы со стековой памятью. (Ассемблер)
ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ
1. Прочитать задания к работе
4. Оформите отчет, который должен содержать:
-титульный лист (см. приложение);
— описание пошагового исполнения;
— отчет о полученном результате
МЕТОДИЧЕСКИЕ УКАЗАНИЯ
ПОДПРОГРАММЫ И СТЕК
В программировании часто встречаются ситуации, когда одинаковые действия необходимо выполнять многократно в разных частях программы (например, вычисление функции sin*). При этом с целью экономии памяти не следует многократно повторять одну и ту же последовательность команд — достаточно один раз написать так называемую подпрограмму (в терминах языков высокого уровня — процедуру) и обеспечить правильный вызов этой подпрограммы и возврат в точку вызова по завершению подпрограммы.
Для вызова подпрограммы необходимо указать ее начальный адрес в памяти и передать (если необходимо) параметры — те исходные данные, с которыми будут выполняться предусмотренные в подпрограмме действия. Адрес подпрограммы указывается в команде вызова call, а параметры могут передаваться через определенные ячейки памяти, регистры или стек.
Возврат в точку вызова обеспечивается сохранением адреса текущей команды (содержимого регистра PC) при вызове и использованием в конце подпрограммы команды возврата ret, которая возвращает сохраненное значение адреса возврата в PC.
Для реализации механизма вложенных подпрограмм (возможность вызова подпрограммы из другой подпрограммы и т. д.) адреса возврата целесообразно сохранять в стеке. Стек («магазин») — особым образом организованная безадресная память, доступ к которой осуществляется через единственную ячейку, называемую верхушкой стека. При записи слово помещается в верхушку стека, предварительно все находящиеся в нем слова смещаются вниз на одну позицию; при чтении извлекается содержимое верхушки стека (оно при этом из стека исчезает), а все оставшиеся слова смещаются вверх на одну позицию. Такой механизм напоминает действие магазина стрелкового оружия (отсюда и второе название). В программировании называют такую дисциплину обслуживания LIFO (Last In First Out, последним пришел — первым вышел) в отличие от дисциплины типа очередь — FIFO (First In First Out, первым пришел — первым вышел).
В обычных ОЗУ нет возможности перемещать слова между ячейками, поэтому при организации стека перемещается не массив слов относительно неподвижной верхушки, а верхушка относительно неподвижного массива. Под стек отводится некоторая область ОЗУ, причем адрес верхушки хранится в специальном регистре процессора — указателе стека SP.
В стек можно поместить содержимое регистра общего назначения по команде push или извлечь содержимое верхушки в регистр общего назначения по команде pop. Кроме того, по команде вызова подпрограммы call значение программного счетчика PC (адрес следующей команды) помещается в верхушку стека, а по команде ret содержимое верхушки стека извлекается в PC. При каждом обращении в стек указатель SP автоматически модифицируется.
В большинстве ЭВМ стек «растет» в сторону меньших адресов, поэтому перед каждой записью содержимое SP уменьшается на 1, а после каждого извлечения содержимое SP увеличивается на 1. Таким образом, SP всегда указывает на верхушку стека.
Цель настоящей лабораторной работы — изучение организации программ с использованием подпрограмм. Кроме того, в процессе организации циклов мы будем использовать новые возможности системы команд модели ЭВМ, которые позволяют работать с новым классом памяти — сверхоперативной (регистры общего назначения — РОН). В реальных ЭВМ доступ в РОН занимает значительно меньшее время, чем в ОЗУ; кроме того, команды обращения с регистрами короче команд обращения к памяти. Поэтому в РОН размещаются наиболее часто используемые в программе данные, промежуточные результаты, счетчики циклов, косвенные адреса и т. п.
В системе команд учебной ЭВМ для работы с РОН используются специальные команды, мнемоники которых совпадают с мнемониками соответствующих команд для работы с ОЗУ, но в адресной части содержат символы регистров RO—R9.
Кроме обычных способов адресации (прямой и косвенной) в регистровых командах используются два новых — постинкрементная и преддекрементная (см. табл. 8.5). Кроме того, к регистровым относится команда организации цикла JRNZ R,M. По этой команде содержимое указанного в команде регистра уменьшается на 1, и если в результате вычитания содержимого регистра не равно 0, то управление передается на метку м. Эту команду следует ставить в конце тела цикла, метку м — в первой команде тела цикла, а в регистр R помещать число повторений цикла.
Пример
Даны три массива чисел. Требуется вычислить среднее арифметическое их максимальных элементов. Каждый массив задается двумя параметрами: адресом первого элемента и длиной. Очевидно, в программе трижды необходимо выполнить поиск максимального элемента массива, поэтому следует написать соответствующую подпрограмму.
Параметры в подпрограмму будем передавать через регистры: R1 — начальный адрес массива, R2 — длина массива.
Рассмотрим конкретную реализацию этой задачи. Пусть первый массив начинается с адреса 085 и имеет длину 14 элементов, второй— 100 и 4, третий— 110 и 9. Программа будет состоять из основной части и подпрограммы. Основная программа задает параметры подпрограмме, вызывает ее и сохраняет результаты работы подпрограммы в рабочих ячейках.
Затем осуществляет вычисление среднего арифметического и выводит результат на устройство вывода. В качестве рабочих ячеек используются регистры общего назначения R6 и R7 — для хранения максимальных элементов массивов. Подпрограмма получает параметры через регистры R1 (начальный адрес массива) и R2 (длина массива).
Эти регистры используются подпрограммой в качестве регистра текущего адреса и счетчика цикла соответственно. Кроме того, R3 используется для хранения текущего максимума, a R4 — для временного хранения текущего элемента. Подпрограмма возвращает результат через аккумулятор. В табл. 9.9 приведен текст основной программы и подпрограммы.
Обратите внимание, цикл в подпрограмме организован с помощью команды jrnz, а модификация текущего адреса— средствами постинкрементной адресации.
Задание
Составить и отладить программу учебной ЭВМ для решения следующей задачи. Три массива в памяти заданы начальными адресами и длинами. Вычислить и вывести на устройство вывода среднее арифметическое параметров этих массивов. Параметры определяются заданием к предыдущей лабораторной работе (см. табл.
9.8), причем соответствие между номерами вариантов заданий 3 и 4 устанавливается по табл. 9.10.
Номер варианта задания 4 |
Номер строки в табл. 9.9 |
Содержание отчета
Формулировка варианта задания.
Граф-схема алгоритма основной программы.
Граф-схема алгоритма подпрограммы.
Распределение памяти (размещение в ОЗУ переменных, программы и необходимых констант).
Тексты программы и подпрограммы.
Значения исходных данных и результата выполнения программы.
Контрольные вопросы
Как работает команда mov R3, R7?
Какие действия выполняет процессор при реализации команды call?
Как поведет себя программа примера 4, если в ней вместо команд call m использовать команды jmp m?
После начальной установки процессора (сигнал Сброс) указатель стека SP устанавливается в 000. По какому адресу будет производиться запись в стек первый раз, если не загружать SP командой wrsp?
Как, используя механизмы постинкрементной и преддекрементной адресации, организовать дополнительный стек в произвольной области памяти, не связанный с SP?
Источник: infopedia.su
Практическая работа 11 Логические операции и сдвиги Знакомство с программой ЛамПанель
Единственный в мире Музей Смайликов
Самая яркая достопримечательность Крыма
Скачать 102 Kb.
И
17.11.2021
нформатика, 10 класс К.Ю. Поляков, Е.А. Еремин
Практическая работа №11
Логические операции и сдвиги
Знакомство с программой «ЛамПанель»
В программе «ЛамПанель» можно использовать логические операции «НЕ» (уже знакомая нам команда NOT), «И» (команда AND), «ИЛИ» (команда OR) и «исключающее ИЛИ» (команда XOR). В последних трех командах после названия команды сначала указывается маска, а затем через запятую – регистр, к которому применяется логическая операция. Например, команда
AND FF,R0
обнуляет старшие 8 бит (старший байт) регистра R0. Маска может находиться в регистре, например, последовательность команд
MOV FF,R1
OR R1,R0
устанавливает в единицу 8 младших бит регистра R0, а остальные оставляет без изменений.
SHL 1,R0 ; логический сдвиг влево на 1 бит
SHR 2,R0 ; логический сдвиг вправо на 2 бита
SAR 1,R0 ; арифметический сдвиг вправо на 1 бит
ROL 2,R0 ; циклический сдвиг влево на 2 бита
ROR 3,R0 ; циклический сдвиг вправо на 3 бита
Конечно, сдвиг может применяться к любому регистру общего назначения, а не только к R0.
- Запустите тренажер «ЛамПанель». Напишите программу, которая решает следующую задачу, используя логические операции:
- Используя программу «ЛамПанель», определите и запишите в таблицу значения регистра R0 после выполнения каждой из следующих команд:
Когда последовательное выполнение этих двух команд не изменяет данные?
- Напишите программу, которая решает следующую задачу, используя логические операции и сдвиги:
- Напишите программу, которая умножает число в регистре R0 на 10, не применяя команду умножения. Используйте арифметические операции и сдвиги.
Источник: topuch.com
Глава 4. Компьютерная арифметика
Для выполнения этих работ используется учебный компьютер «ЛамПанель», который можно загрузить со страницы http://kpolyakov. spb .ru/prog/lamp.htm.
Практическая работа № 9.
Представление целых чисел
Знакомство с программой «ЛамПанель»
Программа «ЛамПанель» – это модель процессора, который управляет ламповой панелью, то есть, может с помощью специальных команд зажигать и гасить определенные лампочки.
Процессор обрабатывает данные, используя специальные сверхбыстродействующие ячейки собственной памяти – регистры. В этой работе мы будем использовать только четыре 16-битных регистра общего назначения, которые называются R0 , R1 , R2 и R3 . В области 1 на рисунке вы видите двоичные значения этих регистров (показаны черным цветом), шестнадцатеричные (синий цвет) и десятичные, без учета знака (зеленый цвет) и со знаком (коричневый цвет).
Область 2 – это текстовый редактор, в котором набирается программа для процессора на специальном языке, который называется языком ассемблера. Для того, чтобы программа выполнилась, нужно нажать клавишу F9 (выполнение без остановки) или F8 (выполнение по шагам). Чтобы программа остановилась, процессор должен выполнить команду STOP . Таким образом, простейшая программа состоит из одной команды STOP .
Для того, чтобы записать число в регистр, используют команду MOV (от англ. move – переместить). Числа записываются в шестнадцатеричной системе счисления. Например, команда
запишет число 1216 = 18 в регистр R0 . Каждая команда записывается в отдельной строке. Поэтому полная программа будет выглядеть так:
Для того, чтобы добавить число к регистру, применяют команду ADD (от англ. add – сложить). Например, команда
добавляет число 1516 = 23 к регистру R0 . Есть и аналогичная команда вычитания – SUB (от англ. subtract – вычесть). Нам будет нужна еще одна команда:
которая выполняет инверсию всех битов регистра, то есть меняет все нули на единицы, а единицы – на нули.
Задание на практическую работу
1. Запустите тренажер «Лампанель».
2. Используя команду MOV , напишите программу, которая заполнит регистры так, как на рисунке:
Не забудьте закончить программу командой STOP . Выполните программу.
3. Запишите, какие десятичные числа были только что записаны в регистры:
Источник: znanio.ru