Я хоть и поздно увидел, но добавлю.
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
В компиляторе (в любом) используются определенные соглашения по именованию служебных функций, т.е функций, вызов которых генерируется компилятором. В имена функций могут входить любые символы, которые разрешены синтаксисом ассемблера (не Си), в том числе и символы '?'. То же самое относится и к меткам. Они генерируются компилятором автоматически.
Маленький пример:
_NOnes::
; {
push bc
; register char count;
;p_lastbyte = pdata + sizeof (*pdata) - 1 - ext_net + 3;
; if (lng < 123L)
ld hl,(_ext_net)
add hl,hl
push hl
ld hl,(_pdata)
inc hl
inc hl
pop de
call CSUB$U
ld de,6
add hl,de
ld (_p_lastbyte),hl .psect $$INIT
$3: .word 173, 0
.psect
ld hl,_lng
call CGET$L
ld hl,$3
call C$LT$L
; if (flt > 0.5)
jp p,$2
ld hl, 173
call CCVI$L
ld hl,_lng
call CPUT$L
$2:
.psect $$INIT
$5: .flt2 0.5
.psect
ld hl,_flt
call CGET$F
ld hl,$5
call C$GT$F
jp p,$4
.psect $$INIT
$6: .flt2 0.5
.psect
ld hl,$6
call CGET$F
ld hl,_flt
call CPUT$F
$4:
Я использовал следующие соглашения. К именам функций пользователя и и стандартным фнкциям библиотеки добавляюся символы '_'. Имена служебных функций начинаются с символа C(Compiler). Далее название операцции (GET, PUT, ADD, SUB) и символ $, последний символ определяется тип операции (L-long, U-unsigned, F-float, ...). Имена меток состоят из симола $ и числа, которое просто увеличивается при создании новой метки, это позволяет имя метки делать уникальным в пределах всего модуля.
По поводу совместного использования asm и Си. Обычно в документации на компилятор имеется раздел, в котором приводятся все необходимые сведения. Они касаются и соглашений по именованию функций, и механизмов передачи параметров в функцию, и механизмов возврата значений функциями и т.д. Советую найти в руководстве этот раздел и внимательно с ним ознакомиться.
Составить ответ
|||
Конференция
|||
Архив
Ответы
Перейти к списку ответов
|||
Конференция
|||
Архив
|||
Главная страница
|||
Содержание
|||
Без кадра
E-mail:
info@telesys.ru