При входе в ассемблерную процедуру в стеке будут сохранены регистры SI и DI и размещены локальные переменные х и у. Доступ кэтим данным организуется с помощью адресации по базе с использованием регистра ВР. При этом нет необходимости вычислять смещения вручную, поскольку ассемблер автоматически генерирует макроподстановки типа
a EQU <WORD PTR [bp+6]>
...
Поэтому в тексте программы в качестве операндов можно использоватьимена локальных переменных и передаваемых параметров. По команде RET автоматически генерируются команды восстановления регистров SI, DI, ВР, SP, и затем только выполняется возврат в вызывающую программу.
В ассемблерной процедуре можно свободно использовать регистры AX, BX, CX, DX. Остальные регистры должны быть сохранены и затеи восстановлены.
3. Методические указания
В лабораторной работе требуется написать ассемблерную процедуру, вызываемую из СИ-программы и выполняющую обработку массива байтов (строки). Ввод исходных данных и вывод результата выполняются в СИ-программе.
При написании процедуры обратите внимание на выбор методов адресации и правильное использование команд условной передачи управления. Для организации циклов рекомендуется использовать команду LOOP.
Для возможности совместной пошаговой отладки оба программных модуля должны быть включены в один файл проекта - это можно сделать с помощью последовательности команд:
Make - Set program list - Add
После того, как нужные файлы включены в проект, следует проверить и при необходимости установить режимы работы компилятора и компоновщика:
Options - Make - Compiler flags - Memory model - Small
Options - Make - Linker flags - Stack Size - 4096
4. Порядок выполнения работы
1. Написать головную программу на СИ для вызова функции обработки строк, содержащую:
- прототип ассемблерной функции
- ввод исходных данных с подсказками
- вызов ассемблерной функции
- вывод результата работы функции
2. Написать ассемблерную функцию, выполняющую обработку строк в соответствии с вариантами, приведенными ниже.
3. Выполнить компиляцию и компоновку программы и произвести ее пошаговую отладку.
Задания к лабораторной работе. Исходные данные:
Ассемблерная функция имеет прототип
int func(char *strl, char *str2, int n);
Здесь strl и str2 - две строки символов произвольной длины, содержащие алфавитно-цифровые символы. Значение, возвращаемое функцией в параметр n, зависят от варианта задания.
Вариант 1.
1. Определить длины строк.
2. В конец первой строки дописать вторую строку.
3. В результирующей строке пять символов, начиная с символа n, заменить на пробелы.
4. Вернуть в вызывающую программу сумму длин строк
Вариант 2.
1. Определить длины строк
2. Переставить элементы первой строки в обратном порядке.
3. Во второй строке первые n символов Заменить на пробелы.
4. Вернуть в вызывающую программу разность длин строк
Вариант 3.
1. Определить длины строк
2. В конец первой строки дописать первые n символов из второй строки
3. Поменять местами второй и четвертый байты второй строки
4. Вернуть в вызывающую программу длину второй строки.
Вариант 4.
1. Определить длины строк
2. Поменять местами соответствующие элементы первой и второй строк, до n-го включительно
3. Поменять местами второй и третий элементы второй строки
4. Вернуть в вызывающую программу длину первой строки
Вариант 5.
1. Определить длины строк
2. Первые n символов первой строки заменить на пробелы
3. Во второй строке поменять местами первую и четвертую пары символов
4. Вернуть в вызывающую программу разность длин строк
Вариант 6.
1. Определить длины строк
2. Каждый n-й элемент первой строки заменить на первый элемент второй строки
3. Во второй строке поменять местами первый и последний элементы.
4. Вернуть в вызывающую программу первый элемент второй строки
5. Контрольные вопросы
1. Сравнить режимы адресации: прямой с индексированием и по базе
2. Команды условной передачи управления
3. Команды вызова подпрограммы и возврата
4. Соглашения о связях "Си-Ассемблер"
Лабораторная работа N 3
ПРЕРЫВАНИЯ. ИНТЕРФЕЙС С БАЗОВОЙ СИСТЕМОЙ ВВОДА - ВЫВОДА
1. Цель работы
Ознакомиться с основными функциями базовой системы ввода-вывода (BIOS).
2. Краткие теоретические сведения
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.