2012-02-05 2 views
6

У меня есть следующий фрагмент кода сборки, который я пытаюсь понять. Это сборка для микроконтроллера MC68332.Что делает инструкция BEQ?

LOOP 
    some instructions 
    some more instructions 
BEQ LOOP 

Я гугле Beq и я нашел, что это означает, что ветвь на нулевой результат, но я до сих пор не понимаю, что он делает. Сопоставляет ли результат последней команды с 0, а если она равна 0, она возвращается к линии LOOP?

+0

Можете ли вы сказать, к какому микроконтроллеру вы обращаетесь? –

+0

Микроконтроллер MC68332, спасибо – jazzybazz

+0

добавил ответ, надеюсь, что это поможет. –

ответ

4

В семействе Motorola 68k это означает «ветвь, если она равна», что означает «перейти к заданному адресу, если установлен флаг нуля» (например, когда предыдущее сравнение было успешным).

Однако 68332, похоже, отличается от этого и основан на «синтаксисе верхнего регистра», это может быть оболочка макросов вокруг другой инструкции, которая по существу делает то же самое.

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

+0

спасибо, это именно то, что я думаю. последняя инструкция перед BEQ является SUB D2, D2, которая всегда устанавливает флаг нуля. поэтому это бесконечный цикл. правильно? – jazzybazz

+0

да, это правильно, если наши предположения ошибочны :) –

1

Точный ответ будет зависеть от того, какой микроконтроллер вы используете. В общем случае, если нет операндов, ожидается, что BEQ будет ветвиться, если Аккумулятор равен 0. Это, скорее всего, на простых микросах, где Аккумулятор является основным регистром для вычислений.

Какой микроконтроллер вы используете? Вы должны найти определение для инструкции BEQ в руководстве для этого микро.

+0

MC68332. нет ничего о команде BEQ в руководстве пользователя – jazzybazz

+0

, что означает глагол «to branch»? – jazzybazz

+0

На веб-сайте Freescale есть техническое описание, вы можете найти ссылку на него здесь: http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=MC68332. Ветвление означает переход к определенной точке программы, в данном случае к метке «LOOP». Функция этого кода должна зацикливаться до тех пор, пока аккумулятор не будет содержать значение «0». – Stefan