2016-01-24 38 views
1

我正在寫微控制器msp430的模擬器。我不能理解我應該什麼時候設置進位。例如在add指令中: 1+0x7FFF設置進位或者1+0xFFFFmsp430中的進位位

+1

17位不是16位0x7FFF + 1表示N位置位但不是進位。與0x8000 + 0x8000一樣,0xFFFF + 1設置進位位。進位位是msbit的執行位。真正的問題是你在減法上做了什麼,你倒置第二個操作數並進行1,但是你是否反轉了執行?一些架構,你做了一些你沒有。最簡單的方法就是獲得10美元的msp430並嘗試一下。如果msbit進位和執行不同,通常會設置V標誌。而n只是15位。 –

+1

哦,對了(看我的模擬器)如果是字節操作,那麼0xFF + 1,第9位出來的alu基本上是進位位,第7位是n位等等,如果是的話是一個字操作,它就像上面的0xFFFF + 1是0x0000,進位位設置爲0x8000 + 0x8000。 –

回答

0

對於ADD指令,進位位設置爲無符號溢出。

你可以從TI documents的例子中推斷出來。特別地,ADD指令(page 3-22)的文檔中的第二個例子說,如果結果大於0xff(以及ADDADDA極限分別爲0xffff0xfffff - 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是無符號的進位。