Оптимизация количества команд сравнения (PDP-11) - PullRequest
2 голосов
/ 27 апреля 2010

Для PDP-11, как я могу изменить следующий фрагмент сборки так, чтобы это было только две инструкции, но работает ли так же, как эти четыре?

tst r0
blt label
cmp r0, #75
bgt label

Ответы [ 3 ]

6 голосов
/ 28 апреля 2010

Я никогда не работал с PDP-11, но у меня есть некоторый опыт работы с тестированием и ветвлением в системах x86, и похоже, что он может быть похожим.

В наборе команд x86 команда "test" эквивалентна сравнению с 0; флаг "меньше чем" устанавливается, если значение меньше 0 и т. д. Я предполагаю, что # 75 означает числовой литерал в шестнадцатеричном формате - 0x75.

Если мои предположения верны, код, который у вас есть, выполняет два сравнения со знаком:

  • Является ли (подписанное) значение r0 меньше 0?
  • Значение (со знаком) r0 больше 0x75?

Если вместо этого вы обрабатываете его как значение без знака , тогда - при условии, что системы PDP-11 используют кодирование с 2-мя дополнениями - отрицательные значения становятся значениями, большими или равными 0x8000 (поскольку PDP -11 это 16-битная система). Таким образом, если вы выполните сравнение без знака, проверка по 0x75 также позаботится о отрицательных значениях; наименьшее возможное значение становится 0, что является приемлемым для тестов здесь.

Я не уверен, является ли сравнение без знака на PDP-11 другим кодом операции сравнения или другим флагом, но я уверен, что вы можете понять эту часть. : -)

1 голос
/ 31 мая 2010

Вероятно, уже слишком поздно для вашей домашней работы, поэтому вот ответ:

cmp r0,#75
bcc label    ; branch if r0 contains 75..65535, ie 75..32767, -32768..-1

bcc имеет синоним сборки bhis (ветвь, если HIgher или Same unsigned).

0 голосов
/ 27 апреля 2010

Если вы хотите перейти к той же метке, если результат сравнения или больше или меньше чем, то вы можете получить его до двух инструкций, используя ответвление, если не равная инструкция (потому что a! = b, когда a b), и еще одна инструкция.

Подсказка: это не инструкция по тестированию.

...