gpp0603
靜水無為
級別: 略有小成
|
MOV K8192 D0 MOV K4 D1 MUL D0 D1 D2 SUB D2 K1 D10 DIV D10 K4 D12 監視發現到D2值是—32768 D12的值是0,是否運算錯誤,還是值超出范圍 請高手幫忙解釋一下,期待你的回復。 |
---|---|
|
dongguansae
級別: 探索解密
|
這樣改就對了: MOV K8192 D0 MOV K1 D1 MUL D0 D1 D2 DSUB D2 K1 D10 DDIV D10 K4 D12 MUL后的值是32位的,保存在D2和D3中,所以想用這個值去代入運算,必須加D,DSUB D2 K1 D10 等于(D3,D2)--1 =D10 這樣才對,另外D10也是32位的,所以下面應該是DDIV 才能計算正確。這個比較特殊,一個帶符號的16位顯示的范圍是+/-32767,所以32768在D3,D2中是這樣的: 00000000 00000000 100000000 00000000 (0為正,1為負),如果沒有加D,那只是D2代入,D3被忽略,默認為1,所以此時D2會顯示 -32768,再減個1,為-32769,超出了范圍,所以,D10的值此時為0。說了這么多,總之加D就對啦! [ 此帖被dongguansae在2013-03-29 12:09重新編輯 ] |
---|---|
|