Ты флиртуешь? )
http://www.lyceum95.ru/inform/ss_8.htm
Он режет правду-матку, хексы рулят!
Ещё один вопрос.
Не вполне понимаю вот такой кусочек кода:
Команда BCS осуществляет переход по адресу 022 632, если в результате сравнения случился перенос единицы из старшего разряда результата, т.е. бит С=1.Код:022 414: 020 127 CMP R1,#011 000 022 416: 011 000 022 420: 103 504 BCS 022 632
При сравнении выполняется операция R1 минус 011 000.
Теперь вопрос - в каком случае случится перенос (и произойдёт переход)?
И то же самое, но в случае с командой BCC.
Плохо у меня с математикой ...
Так, по этим командам происходит сравнение чисел как беззнаковых.
Например, R1 = 012 000.
Тогда для двухбайтовых чисел мы получим: 012 000 - 011 000 = 001 000. Заимствования из старшего разряда не было. C=0.
Если же, R1 = 010 000, то: 010 000 - 011 000 = 177 000. Произошло заимствование из старшего разряда. C=1.
Полагаю, что переход по BCS произойдёт если R1 < 011 000,
а для BCC - если R1 >= 011 000.
Последний раз редактировалось darkstar; 30.10.2014 в 05:40.
Нет ничего более вечного чем то, что обмотано синей изолентой
Для ознакомления с кодом программы для 1801ВМ1 рекомендую поставить эмуль ДВК господина Patron - там есть пультовый режим, в котором можно набрать эти команды с клавы и проверить точно, при каких содержимых источника и приемника команды сравнения идет ветвление, и куда.
Будет все наоборот, т.к. (на сколько я помню) при вычитании и сравнении флаг переноса используется инверсный, в отличие от того же Z80.
C – очищается, если был перенос из старшего разряда результата, в противном случае устанавливается. Перенос может произойти в том случае, если операнд источника был больше или равен нулю, а операнд приёмника – меньше нуля, или если операнды источника и приёмника были одного знака, а результат получился меньше нуля.
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
MM, можно по-подробнее про пультовый режим?
DVK Emulator уже стоит.
Как можно напрямую ввести команды и просмотреть содержимое флагов?
Нет ничего более вечного чем то, что обмотано синей изолентой
В эмуле ДВК надо выйти в пульт и набрать циферками машкод. Например, такой текст :
022727 123456 012345 -
сравнить число "123456" и число "012345"
Далее поставить необходимую команду ветвления, например ( вообще ) :
001004
012737 000100 177566 000000
012737 000101 177566 000000
Команда ( пример ) 001004 - ветвление на 4 слова вперед, если выполнится какое-то условие, в данном конкретном случае - неравенство в команде сравнения.
Запись числа "100" в регистр "177566" означает вывод символа "@", а числа "101" - знака "А".
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)