Здавалка
Главная | Обратная связь

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



Ассемблер позволяет использовать различные режимы адресации для операндов. Ниже показано их использование на примере команды пересылки в регистр АХ:

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 Все права принадлежат авторам размещенных материалов.