Неси бит в мсп430
Пишу симулятор на микроконтроллер msp430. Я не могу понять, когда я должен установить бит для переноски. Например в add
инструкция:1+0x7FFF
установка бита переноса или 1+0xFFFF
?
2 ответа
Для ADD
инструкция, бит переноса установлен на переполнение без знака.
Вы можете сделать это из примеров в документах TI. В частности, второй пример в документации ADD
Инструкция ( стр. 3-22) гласит, что перенос происходит на ADD.B
если результат больше чем 0xff
(и для ADD
а также ADDA
пределы 0xffff
а также 0xfffff
соответственно - 8, 16 и 20 бит):
ADD.B #10,R5 ; Add 10 to Lowbyte of R5
JC TONI ; Carry occurred, if (R5) ≥ 246 [0Ah+0F6h]
...... ; No carry
Тот факт, что в регистре состояния msp430 есть бит ОТРИЦАТЕЛЬНЫЙ в дополнение к биту переноса, подтверждает это.
Существует как минимум пара существующих эмуляторов MSP430 с открытым исходным кодом, а именно mspsim
и Аврора. Я предлагаю использовать их в качестве эталонных реализаций.
Там две разные инструкции, которые реализуют <
, JL (прыгать, если меньше) и JLO (прыгать, если ниже).
Документация JL говорит, что это
позволяет сравнивать целые числа со знаком.
В документации JLO сказано, что это
используется для сравнения чисел без знака.
JLO такой же, как JNC, поэтому C - беззнаковый перенос.