2016-01-24 3 views
1

Я пишу симулятор для микроконтроллера msp430. Я не могу понять, когда я должен установить бит переноса. Например, в инструкции add: 1+0x7FFF установка бит переноса или 1+0xFFFF?Несущий бит в msp430

+1

17-й бит не 16-й 0x7FFF + 1 означает, что бит N установлен, но не переносится. 0xFFFF + 1 устанавливает бит переноса как 0x8000 + 0x8000. бит переноса - это выполнение msbit. реальный вопрос заключается в том, что вы делаете на вычитании, вы инвертируете второй операнд и нести в 1, но вы инвертируете выполнение? некоторые архитектуры, которые вы делаете, некоторые из вас не делают. проще всего получить $ 10 msp430 и попробовать. Флаг V обычно устанавливается, если msbit несут и выполняет различие. и n - это просто бит 15. –

+1

oh right (глядя на мой симулятор), если это операция байта, тогда 0xFF + 1, бит 9 из alu в основном является битом переноса, бит 7 является n бит и т. д., если он является операцией слова, то она аналогична приведенной выше 0xFFFF + 1 равна 0x0000, а бит переноса установлен так же, как 0x8000 + 0x8000. –

ответ

0

Для инструкции ADD бит переноса установлен на неподписанном переполнении.

Вы можете сделать это из примеров в TI documents. В частности, второй пример в документации ADD инструкции (page 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 и Avrora. Я предлагаю использовать их в качестве эталонных реализаций.

+0

Это имеет смысл. Я полагаю, что если у нас есть отрицательный бит, тогда диапазон для 16-битного номера будет равен -32768 до 32767, и когда мы пересечем этот диапазон, мы установим бит переноса, но это неправильно. – user3191398

0

Есть две разные инструкции, которые реализуют <, JL (прыгать, если меньше) и JLO (прыгать, если ниже).

Документация JL говорит, что

позволяет сравнение целых чисел.

Документация JLO говорит, что

используется для сравнения чисел без знака.

JLO - это то же самое, что и JNC, поэтому C без знака переносит.

Смежные вопросы