我正在寫微控制器msp430的模擬器。我不能理解我應該什麼時候設置進位。例如在add
指令中: 1+0x7FFF
設置進位或者1+0xFFFF
?msp430中的進位位
1
A
回答
0
對於ADD
指令,進位位設置爲無符號溢出。
你可以從TI documents的例子中推斷出來。特別地,ADD
指令(page 3-22)的文檔中的第二個例子說,如果結果大於0xff
(以及ADD
和ADDA
極限分別爲0xffff
和0xfffff
- 8,16和20位)上發生ADD.B
進位:
ADD.B #10,R5 ; Add 10 to Lowbyte of R5
JC TONI ; Carry occurred, if (R5) ≥ 246 [0Ah+0F6h]
...... ; No carry
除了進位位之外,msp430狀態寄存器中還有一個NEGATIVE位確認了這一事實。
至少有一些現有的開源MSP430仿真器,即mspsim
和Avrora。我建議將它們用作參考實現。
+0
這很有道理。我認爲,如果我們有負位,那麼爲16位數字簽名的範圍是-32768到32767,當我們越過這個範圍時,我們設置進位位,但這是錯誤的。 – user3191398
0
有兩條不同的指令可以實現<
,JL(如果小於則跳轉)和JLO(如果低於跳轉)。
JL的文件說,它
允許有符號整數的比較。
JLO的文件說,它
用於無符號數的比較。
JLO和JNC一樣,因此C是無符號的進位。
相關問題
- 1. 在MSP430組件中爲固定內存位置分配標籤
- 2. 位運算,移動進位
- 3. 64位OS/32位進程
- 4. 32位進程無法訪問64位進程中的模塊
- 5. MSP430 TIMERA1中斷
- 6. 啓動64位進程修改32位和64位.NET machine.config中
- 7. java 4位小數位的二進制
- 8. 簡單的進位
- 9. 在.NET中,32位進程如何與64位進程通信?
- 10. 進位值
- 11. 進位值
- 12. 如何在c#中進行3位數和4位數的中位數?
- 13. Python中的分位數/中位數/二進制分組
- 14. C是否保存位移的位進位?
- 15. TI MSP430中斷源
- 16. MSP430中斷開銷
- 17. MSP430通過USB進行通信
- 18. 對32位整數進行位處理
- 19. 15位二進制64位小數?
- 20. 檢測32位dword + dword進位/ C++
- 21. 進位標誌何時置位?
- 22. 64位進程中的AnyCPU C#DLL加載32位DLL
- 23. 對32位系統中的64位字進行操作
- 24. 在iOS中對位串進行簡單的逐位操作
- 25. 如何在16位二進制,32位二進制和64位二進制中編寫整數值「60」
- 26. 使用GCC將閃存位置設置爲MSP430上的特定值
- 27. 進位旗問題!
- 28. PHP可變進位
- 29. MOVS與LSL進位
- 30. 進位,GAS約束
17位不是16位0x7FFF + 1表示N位置位但不是進位。與0x8000 + 0x8000一樣,0xFFFF + 1設置進位位。進位位是msbit的執行位。真正的問題是你在減法上做了什麼,你倒置第二個操作數並進行1,但是你是否反轉了執行?一些架構,你做了一些你沒有。最簡單的方法就是獲得10美元的msp430並嘗試一下。如果msbit進位和執行不同,通常會設置V標誌。而n只是15位。 –
哦,對了(看我的模擬器)如果是字節操作,那麼0xFF + 1,第9位出來的alu基本上是進位位,第7位是n位等等,如果是的話是一個字操作,它就像上面的0xFFFF + 1是0x0000,進位位設置爲0x8000 + 0x8000。 –