Я пишу симулятор для микроконтроллера msp430. Я не могу понять, когда я должен установить бит переноса. Например, в инструкции add
: 1+0x7FFF
установка бит переноса или 1+0xFFFF
?Несущий бит в msp430
ответ
Для инструкции 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. Я предлагаю использовать их в качестве эталонных реализаций.
Это имеет смысл. Я полагаю, что если у нас есть отрицательный бит, тогда диапазон для 16-битного номера будет равен -32768 до 32767, и когда мы пересечем этот диапазон, мы установим бит переноса, но это неправильно. – user3191398
Есть две разные инструкции, которые реализуют <
, JL (прыгать, если меньше) и JLO (прыгать, если ниже).
Документация JL говорит, что
позволяет сравнение целых чисел.
Документация JLO говорит, что
используется для сравнения чисел без знака.
JLO - это то же самое, что и JNC, поэтому C без знака переносит.
- 1. Внутренние операции бит-манипуляции с использованием GCC для MSP430
- 2. Игрок, несущий ошибку
- 3. MSP430 (msp430-gcc) linker undefined ссылка на
- 4. Данные PuTTY в MSP430
- 5. Перемещение типов ELF на MSP430
- 6. Несущий и перезапуск службы докеров
- 7. Несущий код для перезапуска Apache
- 8. JScrollPane, несущий JPanel, является ошибкой
- 9. msp430 кнопка прерывания не работает
- 10. msp430 связь с компьютером
- 11. Несущий. Ссылка на переменные в групповых vars
- 12. Что такое PMMCOREV в msp430?
- 13. MSP430 Переполнение переполнения
- 14. MSP430 toolchain in linux
- 15. TI MSP430 прерывания источник
- 16. Для кодирования контроллера Msp430
- 17. MSP430 TIMERA1 Прерывание
- 18. Циклы команд MSP430
- 19. Сжатие Zlib на MSP430
- 20. MSP430 Timer_A - масштаб регистра
- 21. MSP430 Прерывание накладных расходов
- 22. MSP430 инструкции по сборке
- 23. Выключение питания MSP430
- 24. MSP430 - Смешивание портов Регистры внутри структуры
- 25. Неустойчивое ключевое слово - MSP430
- 26. MSP430 RTC Callibration issue
- 27. MSP430 UART принимает строку
- 28. Доступ к портам MSP430
- 29. Вход кодов Морзе на MSP430
- 30. Реферированный проект, не несущий ссылочные сборки
17-й бит не 16-й 0x7FFF + 1 означает, что бит N установлен, но не переносится. 0xFFFF + 1 устанавливает бит переноса как 0x8000 + 0x8000. бит переноса - это выполнение msbit. реальный вопрос заключается в том, что вы делаете на вычитании, вы инвертируете второй операнд и нести в 1, но вы инвертируете выполнение? некоторые архитектуры, которые вы делаете, некоторые из вас не делают. проще всего получить $ 10 msp430 и попробовать. Флаг V обычно устанавливается, если msbit несут и выполняет различие. и n - это просто бит 15. –
oh right (глядя на мой симулятор), если это операция байта, тогда 0xFF + 1, бит 9 из alu в основном является битом переноса, бит 7 является n бит и т. д., если он является операцией слова, то она аналогична приведенной выше 0xFFFF + 1 равна 0x0000, а бит переноса установлен так же, как 0x8000 + 0x8000. –