Соглашение о вызовах SDCC для цели 9S08 (HCS08) специально - PullRequest
0 голосов
/ 19 сентября 2019

Мне нужно знать соглашение о вызовах SDCC для цели 9S08, в частности.(Другие цели не имеют отношения к этому сообщению.) Таким образом, мой код ASM может быть правильно вызван из SDCC.

Я гуглил и посмотрел руководство (sdccman.pdf), которое поставляется с SDCC : mcs51 / z80 / z180 / r2k / r3ka / gbz80 / tlcs90 / ez80_z80 / ds390 / pic16 / pic14 / TININative / ds400 / hc08 / s08 / stm8 / pdk14 / pdk15 3.9.0 # 11195 (MINGW32) и не может найти полезную информацию о соглашении о вызовах для конкретной цели. Раздел S08 в руководстве состоит всего из четырех строк и больше похож на заглушку, которую необходимо заполнить через некоторое время.

Основываясь на информации о других целях, я как минимум предполагаю, что онитакже передавать аргументы в стеке справа налево.Таким образом, последний аргумент, который должен быть помещен в стек, соответствует первому параметру функции.Это правильно, во всех случаях?Что, если какой-либо аргумент может вписаться в регистр, например?

А как насчет регистров H, X, A при входе и выходе?

Из изучения некоторого ассемблерного кода они, похоже, используют X:Пара в качестве указателя на запись (для каких случаев?), Которая сразу же копируется в H: X внутри функции вместо передачи ее непосредственно в H: X (возможно, оставленное поведение из HC08), а также при возврате 16-битногослово (которое я предполагаю соответствует типу int по умолчанию).

Кроме этого, я не слишком уверен.Вещи, которые я ищу:

Желательно какая-нибудь ссылка с авторитетными ответами!В противном случае ...

  • Используется ли когда-либо регистр H для входа / выхода?
  • Нужно ли защищать какие-либо регистры, не используемые для входа / выхода?При каких-то условиях или всегда?
  • Используются ли регистры A или X индивидуально для определенных случаев?
  • Если один аргумент может вписаться в A или X, какой из них предпочтительнее?
  • Если у меня есть два (8-битных) аргумента, какой из них будет идти к A, а какой к X?Например, самое правое для A?
  • Предпочитают ли определенные типы (например, char) быть в регистрах на входе / выходе, а не в стеке?

Пожалуйста, неЯ предлагаю попробовать каждый случай и убедиться в этом сам.Есть слишком много возможностей, и я все равно не очень хорош в Си. Мне просто нужны правила.

...