Микропроцессорная техника: практический курс : учебное пособие для студентов Физико-технологического института, обучающихся по направлениям подготовки "Ядерная физика и технологии", "Биомедицинская инженерия"


 Интерфейс между C51 и ассемблером


Download 0.63 Mb.
Pdf ko'rish
bet56/74
Sana29.03.2023
Hajmi0.63 Mb.
#1306393
1   ...   52   53   54   55   56   57   58   59   ...   74
Bog'liq
978-5-321-02171-21 2012 (1)

4.4. Интерфейс между C51 и ассемблером
Технология передачи параметров в библиотеках Keil µVision опти-
мизирована для работы с компилятором C51. В этой связи взаимодей-
ствие библиотечных функций и программ, написанных на ассемблере,
осуществляется по тем же правилам, что и интерфейс между C51 и
ассемблером.
97


4. Стандартные библиотеки Keil µVision
Макроассемблер A51, входящий в состав Keil µVision, при генера-
ции кода формирует объектные модули в формате OMF-51. Соблюде-
ние нескольких простых правил обеспечивает взаимную доступность
модулей, подготовленных на C51 и A51. Переменные, декларирован-
ные как public в ассемблерной программе, доступны из модулей,
подготовленных на C51 как external, и наоборот.
Функция, написанная на C51, по умолчанию передает до трех пара-
метров через регистры микроконтроллера. Если количество парамет-
ров больше трех, то остальные параметры передаются через фиксиро-
ванную область памяти. Директива NOREGPARMS позволяет запретить
передачу параметров через регистры. В этом случае все параметры
будут переданы только через фиксированную область памяти. Ком-
пилятор C51 при генерации кода маркирует функции, передающие
параметры через регистры, значком подчеркивания ‘_’ перед именем
функции. Функции, передающие параметры только через фиксиро-
ванную область памяти, не маркируются таким значком. При рабо-
те с арифметическими библиотеками C51 обычно используются один
или два параметра. Технология передачи параметров через регистры
микроконтроллера представлена в табл. 4.1.
Таблица 4.1. Передача параметров функций через регистры
Номер
char,
int,
long,
generic ptr
аргумента 1-byte ptr 2-byte ptr
float
1
R7
R6_R7
R4–R7
R3–R1
2
R5
R4_R5
R0–R3
R3–R1
3
R3
R2_R3

R3–R1
Примечание. Старший байт записан всегда слева. Для generic ptr: R3 – тип памя-
ти, R2_R1 – указатель. R0–R3 – только для библиотечных функций, перечисленных
в табл. 4.3
.
При передаче параметров через фиксированную область памяти
библиотечные функции C51 используют специальные сегменты с име-
нами:
?function_name?BYTE
?function_name?BIT
Вместо «function_name» в имена сегментов подставляют имя
соответствующей функции. Первый из сегментов используют для пе-
редачи байтовых переменных, а второй – для передачи битовых пе-
ременных. Для всех параметров резервируют место в этих сегментах,
даже если эти параметры передаются через регистры. Параметры раз-
мещаются в порядке их декларирования в функции.
98


4.5. Арифметические функции библиотеки
Если функция возвращает значение, то оно всегда передается через
регистры (табл. 4.2).
Таблица 4.2. Возврат значения функции через регистры
Тип значения Регистры
Описание
Бит
C
Возврат бита через флаг переноса
char или
1-byte ptr
R7
Возврат байта через R7
int или
2-byte ptr
R6_R7
R6 – старший байт
long или
float
R4–R7
R4 – старший байт
generic ptr
R3–R1
R3 – тип памяти, R2 – старший байт

Download 0.63 Mb.

Do'stlaringiz bilan baham:
1   ...   52   53   54   55   56   57   58   59   ...   74




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling