Я новичок, изучающий информатику. В области компьютерной техники мы работаем над 8-разрядным микропроцессором Zilog Z80 (1 МГц) и набором компонентов, которые необходимо вручную подключить с помощью макета и кабелей.
Соединительная часть меня не беспокоит, но у меня есть вопросы, касающиеся программы сборки, которую мне нужно написать, чтобы заставить мою программу работать (светодиодный индикатор, с ручным вводом для поведения и частоты).
Я уже прочитал руководство и знаю набор инструкций, которые можно использовать (только самое необходимое). Для начала, я не пытаюсь получить самый чистый, самый красивый код из возможных; но не волнуйтесь, позже я это сделаю, потому что мне нравится чистый и эффективный код.
На данный момент программа работает хорошо в симуляторе, поэтому синтаксис в порядке. Тем не менее, я не уверен, как справиться с некоторыми логическими проблемами.
Упражнение имеет следующие характеристики:
- Начальный адрес RAM: E000h
- Входной порт 1: 03h
- Выходной порт 1: 05h
- Отображение ввода / вывода для портов
- Цепи автоматически разомкнуты (1), поэтому светодиоды НИЗКО активны (0)
- Вход 2,3,4 изменяет поведение движения светодиодов
- Ввод 5,6 изменения частоты мигания светодиода
Я установил начальный адрес с помощью ORG E000h
и инициализировал указатель стека с помощью MOV SP,FFFFh
. Для входа (три разных типа мигания / бега, а также две разные частоты, всего пять кнопок) я создал разные метки.
Моя проблема на данный момент в том, что я не совсем уверен, как правильно настроить физический ввод - IIRC, мне нужно было бы указать битовую комбинацию, используя XOR со всем, равным 1, но желаемым входом, чтобы я мог используйте информацию в моей программе.
Но хотя я знаю, как это должно работать (по крайней мере, я думаю, что знаю), я не могу полностью обернуться вокруг реализации программного обеспечения. Кроме того, у меня проблемы с условиями: нажатие одного переключателя изменяет частоту мигания на 1/4 Гц, а нажатие другого переключает на 4 Гц. На языках более высокого уровня я бы просто использовал IF / ELSE здесь, но я не знаю, как это сделать в этом случае - к сожалению, руководство включает только основные операции, поэтому я в растерянности.
Поэтому я решил попытать счастья и обратиться к сообществу за помощью.
Для тех, кто заинтересован, я выложу свой код. Как я уже упоминал, это очень просто, но мне просто нужно, чтобы работа была выполнена на данный момент. Поскольку я не фанат огромных кусков неуклюже отформатированного кода, я разместил файл здесь . Файл представляет собой * .txt, размещенный через GoogleDrive.
Спасибо за ваше время и хорошего дня!
[РЕДАКТИРОВАТЬ] добавил специальный код в пост, в соответствии с вводом пользователя Рууд Хелдерман
[РЕДАКТИРОВАТЬ] обновленный код в * .txt-файле - теперь проще и эффективнее
[EDIT] использовал HTML-форматирование для выделения директив в записи
Фрагмент кода:
blink: ;function: all LED blinking, activated via input[2]
MOV A,FFh
OUT 05h,A ;all LED out
CALL pause1 ;frequency 1/4Hz, activated via input[5]
MOV A,00h
OUT 05h,A ;all LED on
CALL pause1
JP blink ;jump back to begin of function
Вышеуказанная функция изменяет поведение светодиода (в данном случае: мигание), а также частоту, используя различные физические переключатели на плате входных переключателей с общим количеством переключателей восемь (от 1 до 8, состояние неактивности = 1; используются переключатели от 2 до 6) , Я знаю, что получение входных данных должно быть простым делом - это просто вопрос использования XOR с битовой комбинацией 0 и ровно одного 1.
Пытаясь найти решение для моей проблемы, я наткнулся на различные подходы в Интернете, такие как использование TEST
для проверки битов в определенных местах. Тем не менее, в моей инструкции по эксплуатации нет никаких упоминаний о таких директивах, и само назначение не упоминает об этом.
Я вполне осознаю, что это, вероятно, тривиальный вопрос, и, может быть, я просто застрял в ментальном цикле, который я создал, задумавшись, но в данный момент я не знаю, как добраться, где мне нужно быть (хотя я вижу замок на горизонте - спасибо, Кафка!).
Любая помощь очень ценится.