|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
請(qǐng)教雙字節(jié)無符號(hào)數(shù)減法程序 |
| 作者:lh9865 欄目:單片機(jī) |
我在做雙字節(jié)無符號(hào)數(shù)減法,減數(shù)是個(gè)固定值:7FFH,被減數(shù)為一組數(shù)據(jù),在減數(shù)的上下浮動(dòng),我想得到的差卻是一組無符號(hào)數(shù)的正數(shù),也就是說無論減的數(shù)據(jù)為正,為負(fù),得到的差最終要是無符號(hào)數(shù)正數(shù) 我想我有些地方不是很明白,就是無符號(hào)數(shù)減法如果不夠減,得到的差會(huì)是一個(gè)什么樣的數(shù)呢,補(bǔ)碼? 這是我編寫的程序,可是老是顯示的結(jié)果不盡人意 CLR C MOV A,R3 JIAO1: CJNE A,BZ1,JIAO00 ;先判斷低8位的大小,用大數(shù)減小數(shù) JIAO00: JC JIAO000 MOV A,r3 SUBB A,bz1 setb 07h ;如果是減數(shù)的低8位減被減數(shù)的低8位,就設(shè)置標(biāo)志位07H為1,作為借位 JMP JIAO10 JIAO000: MOV A,bz1 SUBB A,r3 JIAO10: MOV R3,A jnb 07h ,jiao99 ;如果有借位,就先把減數(shù)的高8位加一,然后在做大小判斷。 inc r2 clr c jiao99: MOV A,R2 CJNE A,BZ0,JIAO100 JIAO100: JC JIAO101 ; JNB PAN0,JIAO110 ; SETB C JIAO110: MOV A,R2 SUBB A,BZ0 JMP JIAO11 JIAO101: MOV A,BZ0 SUBB A,R2 JIAO11: MOV R2,A ;運(yùn)算結(jié)果存儲(chǔ) MOV A,R3 MOV @R0,A INC R0 MOV A,R2 MOV @R0,A INC R0 clr 07h RET 請(qǐng)高手指點(diǎn)呢 |
| 2樓: | >>參與討論 |
| 作者: faiwong 于 2005/12/29 12:34:00 發(fā)布:
何必那么麻煩! 不知你是要是要得到數(shù)據(jù)組的絕對(duì)值,如果是其實(shí)很簡(jiǎn)單。 |
|
| 3樓: | >>參與討論 |
| 作者: lh9865 于 2005/12/29 12:50:00 發(fā)布:
就是絕對(duì)值 嘿嘿,就是絕對(duì)值,請(qǐng)問,該怎么做呢 |
|
| 4樓: | >>參與討論 |
| 作者: faiwong 于 2005/12/29 13:33:00 發(fā)布:
先判斷數(shù)據(jù)的大小 MOV A,SHU_H CJNE A,#07H,CHECK_1 MOV A,SHU_L CJNE A,#0FF,SHU_JU<7FF(單字節(jié)不可能大于FF ) SJMP 結(jié)果=0 CHECK_1: JNC SHU_JU>7FF; 結(jié)果=數(shù)據(jù)-7FF SHU_JU<7FF: 結(jié)果=7FF-數(shù)據(jù) |
|
| 5樓: | >>參與討論 |
| 作者: lh9865 于 2005/12/29 14:11:00 發(fā)布:
謝謝兄弟的幫忙 謝謝兄弟的幫忙,可是我想我的程序也是這種思想,但是編寫的當(dāng)中有些問題,顯示的數(shù)據(jù)時(shí)不正確的,所以我想看看有沒有標(biāo)準(zhǔn)的程序 |
|
| 6樓: | >>參與討論 |
| 作者: lichunxia 于 2005/12/29 14:38:00 發(fā)布:
無符號(hào)雙字節(jié)減法 ;**無符號(hào)雙字節(jié)減法,入口為R2,R3,R6,R7(R2,R3為被減數(shù),R6、R7為減數(shù);R2、R6為高字節(jié))出口為R4,R5(R4為高字節(jié))********************** NSUB: CLR C MOV A,R3 SUBB A,R7 MOV R5,A MOV A,R2 SUBB A,R6 MOV R4,A RET |
|
| 7樓: | >>參與討論 |
| 作者: lh9865 于 2005/12/29 15:28:00 發(fā)布:
這段程序我已經(jīng)看到了,試過了 |
|
| 8樓: | >>參與討論 |
| 作者: faiwong 于 2005/12/29 20:18:00 發(fā)布:
試一下吧 ;R2,R3輸入數(shù)據(jù)R2高位,結(jié)果在R4,R5,R4高位 CHECK: MOV A,R2 CJNE A,#07H,CHECK_1 MOV A,R3 CJNE A,#0FFH,CHECK_1_2;(單字節(jié)不可能大于FF ) SJMP CHECK_0 CHECK_1: JNC CHECK_1_2 CLR C MOV A,R3 ;數(shù)據(jù)>07FFH SUBB A,#0FFH MOV R5,A MOV A,R2 SUBB A,#07H MOV R5,A SJMP CHECK_END CHECK_1_2: CLR C MOV A,#0FFH ;數(shù)據(jù)<07FFH SUBB A,R3 MOV R5,A MOV A,#07H SUBB A,R2 MOV R4,A SJMP CHECK_END CHECK_0: MOV R4,#00H ;相等 MOV R5,#00H CHECK_END: RET |
|
| 9樓: | >>參與討論 |
| 作者: faiwong 于 2005/12/29 20:42:00 發(fā)布:
剛才有兩次錯(cuò)誤,以下的已經(jīng)仿真通過. ;R2,R3輸入數(shù)據(jù)R2高位,結(jié)果在R4,R5,R4高位 CHECK: MOV A,R2 CJNE A,#07H,CHECK_1 MOV A,R3 CJNE A,#0FFH,CHECK_1_2;(單字節(jié)不可能大于FF ) SJMP CHECK_0 CHECK_1: JC CHECK_1_2 CLR C MOV A,R3 ;數(shù)據(jù)>07FFH SUBB A,#0FFH MOV R5,A MOV A,R2 SUBB A,#07H MOV R4,A SJMP CHECK_END CHECK_1_2: CLR C MOV A,#0FFH ;數(shù)據(jù)<07FFH SUBB A,R3 MOV R5,A MOV A,#07H SUBB A,R2 MOV R4,A SJMP CHECK_END CHECK_0: MOV R4,#00H ;相等 MOV R5,#00H CHECK_END: RET |
|
| 10樓: | >>參與討論 |
| 作者: biansf2001 于 2005/12/30 8:33:00 發(fā)布:
暈,你不會(huì)取反加1,然后相加呀,這樣多簡(jiǎn)單啊 |
|
| 11樓: | >>參與討論 |
| 作者: 夏蟲 于 2005/12/30 8:52:00 發(fā)布:
同意樓上得說法 |
|
| 12樓: | >>參與討論 |
| 作者: faiwong 于 2005/12/31 11:38:00 發(fā)布:
取反加1,然后相加也不簡(jiǎn)單 取反加1,然后相加也簡(jiǎn)單不到哪里,等你雙字節(jié)加1加完,人家也已經(jīng)減完,何況你還要取反. |
|
| 13樓: | >>參與討論 |
| 作者: dengm 于 2005/12/31 17:31:00 發(fā)布:
re ;**無符號(hào)雙字節(jié)減法,入口為R2,R3,R6,R7(R2,R3為被減數(shù),R6、R7為減數(shù);R2、R6為高字節(jié)) 出口為(絕對(duì)值)R4,R5(R4為高字節(jié))C為符號(hào) ********************** CLR C MOV A, R3 SUBB A, R7 MOV R5, A MOV A, R2 SUBB A, R6 MOV R4, A JNC EXIT_1 MOV A, R5 CPL A ADDC A, #0 MOV R5, A MOV A, R4 CPL A ADDC A, #0 MOV R4, A SETB C EXIT_1: RET |
|
| 14樓: | >>參與討論 |
| 作者: JIANWENWU 于 2005/12/31 19:27:00 發(fā)布:
不錯(cuò),簡(jiǎn)單明了! |
|
| 15樓: | >>參與討論 |
| 作者: yzy1102 于 2006/1/1 18:58:00 發(fā)布:
失敗 |
|
| 16樓: | >>參與討論 |
| 作者: SupermanTm 于 2006/1/2 23:19:00 發(fā)布:
照減嘛,負(fù)數(shù)是補(bǔ)碼,要變絕對(duì)值就取反加一嘛 |
|
|
|
| 免費(fèi)注冊(cè)為維庫電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |