Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Ветвь на равных в ассемблере/машинном коде

Автор вопроса: davidx1Ответов: 1

В чем разница между использованием:

c.eq.s    $1, $2
bc1t      L2

И используя:

beq $1, $2, L2

Почему есть два способа ветвления, если они делают одно и то же? А если они разные, то какая польза от каждого?

Спасибо

РЕДАКТИРОВАТЬ: я не знал, что "c.eq.s" зависит от сопроцессора. Я написал только $1, $2 вместо $f1, $f2 для единообразия со вторым набором кода.

  • @Mysticial Я думаю, что это должна быть архитектура регистр-регистр (или загрузка-хранилище) для процессора RISC. davidx1 19.08.2012
  • В смысле типа, какой процессор ISA? Это явно не x86. PowerPC? Спарк? MIPS? РУКА? Я только хорошо знаком с x86. Но добавление соответствующего тега приведет к тому, что на него ответят нужные люди. Mysticial 19.08.2012

branchassemblymipsmachine-code

Ответы

Ответ 1 · рейтинг 4 · paxdiablo

Инструкция bc1t просто выполняет переход, если бит 1 условия математического сопроцессора равен true. Это тот случай, если два регистра были равны. Это эквивалентно простому переходу, если значения равны, с beq, но только, если регистры фактически были одними и теми же регистрами в обоих случаях.

С сопроцессором MIPS с плавающей запятой регистры должны быть $f1/$f2 в инструкции c.eq.s, чтобы эти две инструкции не были эквивалентны. Я никогда не видел использования $1/$2 в инструкциях с плавающей запятой, за исключением тех, которые перемещают данные между обычными регистрами и регистрами сопроцессора.

Я думаю, что единственный способ условных переходов с плавающей запятой состоит из двух шагов. В IDT MIPS Microprocessor Family Software Reference Manual говорится:

Инструкции для теста FP и ветвления разделены. Инструкция тестирования сравнивает два значения FP и соответствующим образом устанавливает бит состояния FPA (C в регистре состояния FP); инструкции ветвления разветвляются в зависимости от того, установлен бит или нет.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы