#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. Будет обновлен код по исходному вопросу. Возможно, удар по голове поможет установить связь, чтобы это имело смысл для меня. Надеваешь ботинки?