Как преобразовать код C в сборку для Freestyle для 9S12?

#assembly

#сборка

Вопрос:

Я начал вводный курс сборки, и у меня есть задание создать инструкции для выполнения следующих действий.

T=Hamp;~J

Код C, связанный с этим, выглядит следующим образом:

 void main(void)
{
ddrh = 0x00;
ddrj = 0x00;
ddrt = 0xff;

while(1)
{
ptt = (~ptj)amp;pth;
}
}
 

DDR — это регистры направления для настройки ввода-вывода.

PT — это порты.

Любые предложения или решения будут с благодарностью приняты.

* Обновление кода сборки с помощью MC9S12C32

    DDRH equ $0262
   DDRJ equ $026A
   DDRT equ $0242
   PTT  equ $0240
   PTH  equ $0260
   PTJ  equ $0268
        org $4000

   main ldaa #$00
        staa DDRH ;Setting direction register H for all inputs
        ldaa #$00
        staa DDRJ ;Setting direction register J for all inputs.
        ldaa #$FF
        staa DDRT ;Setting direction register T for all outputs.

   loop ldaa PTH  ;load port h to register a
        ldab PTJ  ;load port j to register b
        comb      ;compliment register b contents for ~J
        andb PTH  ;AND logical register b and port H
        stab PTT  :output register b to port T
        bra  loop
        org  $FFFE
        fdb  main
 

Код выполняется без ошибок, но когда я запускаю его для имитации процессора, я получаю следующий код ошибки:

«Сохранить с помощью EAR W 0x0262 0x00 в порт ввода-вывода 0x4002 staa $ 0262 записать в неисполненный порт ввода-вывода 0x0262».

Сможет ли кто-нибудь проверить, где это происходит, и, возможно, предоставить жесткие предложения, чтобы исправить это?

ОБНОВЛЕНИЕ! обнаружена моя проблема, в ассемблере выбран неправильный процессор. Нужно использовать MC9S12DP512, а не MC9S12C32.

Комментарии:

1. Конвертер с языка Си на ассемблер обычно называется компилятором языка Си.

Ответ №1:

Поскольку — насколько я понимаю — это домашнее задание для вашего курса, я не буду оказывать вам слишком большую помощь. Вы должны сделать домашнее задание самостоятельно, потому что иначе вы не будете готовы к экзамену.

Сначала вы должны проанализировать, что делает программа на C. Поскольку вы не проходите курс C, я могу вам немного помочь здесь:

  • Он записывает значение 0 в регистр DDRH
  • Он записывает значение 0 в регистр DDRJ
  • Он записывает значение 0xFF (= 255) в регистр DDRT
  • В бесконечном цикле он выполняет следующие шаги:
  • Он считывает в регистре PTJ
  • Он инвертирует значение, только что прочитанное в
  • Он считывает в регистре PTH
  • Он выполняет комбинацию И обоих значений
  • Он записывает результат в регистр PTT
  • В конце цикла инструкция перехода / перехода к первой инструкции цикла (всегда) необходима в ассемблерном коде

Теперь вам нужно выполнить все эти шаги в программе сборки. Я уверен, что вы знаете все необходимые инструкции из вашего курса.

Кстати: Вы, вероятно, хотели написать «Freescale», а не «Freestyle»

Комментарии:

1. Определенно подразумевалось написать Freescale.

2. Мартин, похоже, ты хорошо разбираешься в этом. Я попробовал свой ассемблерный код для этого, и ассемблер возвращает ошибки. Использование микроконтроллера MC9S12C32. Будет обновлен код по исходному вопросу. Возможно, удар по голове поможет установить связь, чтобы это имело смысл для меня. Надеваешь ботинки?