Как реализовать логические элементы, используя ассемблерный код? - PullRequest
0 голосов
/ 22 мая 2019

Я готовлюсь к экзамену по цифровым системам, и у меня есть предыдущий бумажный вопрос, как показано ниже: внедрить вентили AND и NAND, используя ассемблерный код. Там нет схемы маркировки для бумаги, поэтому я не могу посмотреть, как это сделать. Если кто-то может объяснить это, это будет оценено.

enter image description here

Я исследовал четыре команды, которые он говорит использовать, и я понимаю, что ANL выполняет операцию AND, а CPL выполняет операцию NOT. Однако я не уверен, как реализовать их, используя другие команды, и, поскольку вопрос стоит 10 баллов, 5 за каждый гейт, я не думаю, что достаточно будет просто написать такие одиночные команды:

а) ANL P1^0, P1^1

б) ANL P1^0, P1^1

CPL P1^0

Моя идея заключалась в том, что, возможно, команду MOV следует использовать для сохранения значения контакта порта в переменной для использования в команде, а затем снова использовать для вывода на P1 ^ 2 на выходе шлюза, но я Я не уверен на 100% в этом, и это также не объясняет, откуда приходит команда SJMP.

1 Ответ

1 голос
/ 22 мая 2019

Для тех, кто заинтересован, я нашел полное решение. C используется для хранения временных значений, а выводы можно использовать в командах.

Для И-ворот:

loop: MOV C, P1^0     ; Assign value on pin 1.0 to C
      ANL C, P1^1     ; Perform AND and store result in C
      MOV P1^2, C     ; Assign new value of C to output pin
      SJMP loop       ; Jump to top of statement and run again

Для шлюза ИЛИ используйте ORL вместо ANL. Для NOR или NAND используйте команду CPL для инвертирования C перед копированием на выходной контакт.

...