Для подпрограмм, предназначенных для вызова из Си-программ, необходимо выполнять соглашения о характеристиках сегментов, модели памяти, правилах передачи параметров и использовании регистров.
Оформленная таким образом ассемблерная подпрограмма имеет вид
.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);
В тексте программы в качестве операндов можно использовать имена локальных переменных и передаваемых параметров. По команде RET автоматически генерируются команды восстановления регистров SI, DI, ВР, SP и затем выполняется возврат содержимого регистра AX в вызывающую программу.
В ассемблерной процедуре можно свободно использовать регистры AX, BX, CX, DX. Остальные регистры должны быть сохранены и восстановлены.
Для обработки строковых данных ассемблер имеет пять команд обработки строк: MOVS – переслать один байт или одно слово из одной области памяти в другую; LODS – загрузить из памяти один байт в регистр AL или одно слово в регистр AX; STOS – записать содержимое регистра AL или AX в память; CMPS – сравнить содержимое двух областей памяти, размером в один байт или одно слово; SCAS – сравнить содержимое регистра AL или AX с содержимым памяти. Префикс REP позволяет этим командам обрабатывать строки любой длины.
Флаг направления DF = 0 (устанавливается командой CLD) задает направление слева направо, а DF = 1 (устанавливается командой STD) – справа налево.
В следующем примере выполняется пересылка 20 байт из STRING1 в STRING2:
STRING1 DB 20 DUP('*')
STRING2 DB 20 DUP(")
CLD ;Сброс флага DF
MOV СХ, 20 ;Счетчик на 20 байт
LEA DL, STRING2 ; Адрес области "куда"
LEA SI, STRING1 ;Адрес области "откуда"
REP MOVSB ;Переслать данные
Таблица 1
№
Передача строк в функцию
Передача целых
значений
Действия над
строками
Формирование целого результата
Возврат целого
результата
Окончание табл. 1
№
Передача строк в функцию
Передача целых
значений
Действия над
строками
Формирование целого результата
Возврат целого результата
Таблица 2
№
Передача строк в функцию
Передача целых
значений
Действия над
строками
Формирова-ние целого результата
Возврат целого
результата
Окончание табл. 2
№
Передача строк в функцию
Передача целых
значений
Действия над
строками
Формирование целого
результата
Возврат целого
результата
Таблица 3
№
Передача строк в функцию
Передача
целых
значений
Действия
над
строками
Формирование целого
результата
Возврат целого
результата
Окончание табл. 3
№
Передача строк в функцию
Передача целых
значений
Действия над строками
Формирование целого результата
Возврат целого
результата
Таблица 4
№
Передача строк в функцию
Передача целых
значений
Действия над
строками
Формирование целого
результата
Возврат целого
результата
Окончание табл. 4
№
Передача строк в функцию
Передача целых значений
Действия над строками
Формирование целого
результата
Возврат целого результата
Таблица 5
№
Передача строк в функцию
Передача
целых
значений
Действия над
строками
Формирование целого
результата
Возврат
целого
результата
Окончание табл. 5
№
Передача строк в функцию
Передача
целых
значений
Действия над
строками
Формирование целого
результата
Возврат
целого
результата
Таблица 6
№
Передача строк в функцию
Передача целых
значений
Действия над
строками
Формирование целого
результата
Возврат
целого
результата
Окончание табл. 6
№
Передача строк в функцию
Передача
целых
значений
Действия
над
строками
Формирование целого
результата
Возврат
целого
результата
Таблица 7
№
Передача строк в функцию
Передача целых значений
Действия над
строками
Формирование целого
результата
Возврат
целого
результата
Окончание табл. 7
№
Передача строк в функцию
Передача
целых
значений
Действия над
строками
Формирование целого
результата
Возврат
целого
результата
Таблица 8
№
Передача строк в функцию
Передача целых значений
Действия над
строками
Формирование
целого
результата
Возврат
целого
результата
Окончание табл. 8
№
Передача строк в функцию
Передача целых значений
Действия над
строками
Формирование
целого
результата
Возврат
целого
результата
ЛИТЕРАТУРА
1. Керниган В., Ритчи Д. Язык программирования Си. – М.: Мир, 1988.
2. Романовская и др. Программирование в среде Си для ПЭВМ ЕС. – М.: Финансы и статистика, 1992.
3. Подбельский В.В., Фомин С.С. Программирование на языке Си. – М: Финансы и статистика, 2000.
4. Абель П. Язык Ассемблера для IBM PC и программирования. – М: Высш. шк., 1992.