[問題] 關於減法時的Carry Flag
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
IA32
問題(Question):
看了下板規就我的理解好像可以問ASM,所以如果有不妥的地方,小弟會立刻處理@@
想問下關於Carry Flag的東西,起因是因為看到IA32的手冊上說,
用NEG指令的時候會觸發Carry Flag。
可是如果我自己假設計算如下
兩個4 bit的數字運算:
1 (0001)-4(0100)
=1(0001)+(-4)(1100)
=-3(1101)
結果我自己測試Carry Flag會被設定
反倒是
4(0100)-1(0001)=
4(0100)+(-1)(1111)=
3(1 0011)
超出了4 bit卻沒有Carry Flag,有點不太能理解為什麼。
還希望版友們能不吝賜教,謝謝!
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.42.108.43
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1463572217.A.625.html
→
05/18 19:56, , 1F
05/18 19:56, 1F
→
05/18 19:57, , 2F
05/18 19:57, 2F
→
05/18 19:57, , 3F
05/18 19:57, 3F
不好意思是SUB,不過手冊有提到Neg A=SUB 0 A
→
05/18 20:00, , 4F
05/18 20:00, 4F
→
05/18 20:00, , 5F
05/18 20:00, 5F
→
05/18 20:01, , 6F
05/18 20:01, 6F
→
05/18 20:02, , 7F
05/18 20:02, 7F
喔喔不好意思,我知道不接受常數,但因為篇幅想說簡寫(拖走
MOV A 0
SUB A B
NEG A
這樣的話,效果是一樣的嗎(設置的Flag和結果)?
另外也有點好奇為什麼要借位,常用的處理器在處理減法時,不是都採用二的補數嗎?還
是其實這邊的CF無關實作,只是象徵借位?(像是表示UNSIGNED的減法運算產生SIGNED)
※ 編輯: a27417332 (114.42.108.43), 05/18/2016 20:31:25
→
05/18 21:05, , 8F
05/18 21:05, 8F
→
05/18 21:06, , 9F
05/18 21:06, 9F
→
05/18 21:19, , 10F
05/18 21:19, 10F
推
05/18 21:26, , 11F
05/18 21:26, 11F
推
05/18 21:26, , 12F
05/18 21:26, 12F
→
05/18 22:17, , 13F
05/18 22:17, 13F
→
05/18 22:18, , 14F
05/18 22:18, 14F
→
05/18 22:20, , 15F
05/18 22:20, 15F
推
05/19 09:30, , 16F
05/19 09:30, 16F
→
05/19 09:30, , 17F
05/19 09:30, 17F
→
05/19 09:31, , 18F
05/19 09:31, 18F
→
05/19 09:32, , 19F
05/19 09:32, 19F
→
05/19 09:33, , 20F
05/19 09:33, 20F