Краткие теоретические сведения
Ассемблер позволяет использовать различные режимы адресации для операндов. Ниже показано их использование на примере команды пересылки в регистр АХ: table dw 10 dup (0) ;таблица слов mov ax, bx ;регистровый операнд в Bх mov ах, 100 ;непосредственный, операнд - константа mov ax, table ;прямой, table = адрес операнда mov ax, [bx] ;косвенно-регистровый; bx - адрес операнда mov ax, [Ьх+2] ;по базе. Ьх+2 = адрес операнда mov ax, table[di] ;прямой с индексированием, ;table+di = адрес операнда mov ax, table[bx][di] ;по базе с индексированием, ;table+bx+di = адрес операнда Ассемблер имеет средства для упрощения программирования процедур, предназначенных для вызова из Си-программ. Они позволяют выполнить соглашения о характеристиках сегментов, модели памяти, правилах передачи параметров и использовании регистров. Оформленная таким образом ассемблерная процедураимеет вид .MODEL SMALL,С func PROC NEAR USES SI DI, a:WORD, b:WORD LOCAL X:WORD, y:WORD … … RET func ENDP Функции func соответствует следующий прототип в Си-программе: int func(int a, int b); При входе в ассемблерную процедуру в стеке будут сохранены регистры 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. Выполнить компиляцию и компоновку программы и произвести ее пошаговую отладку. ©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.
|