注意:訪問本站需要Cookie和JavaScript支持!請設置您的瀏覽器! • 打開購物車 • 查看留言 • 付款方式 • 聯系我們 |
![]() |
首頁 | 電子入門 | 學單片機 | 免費資源 | 下載中心 | 商品列表 | 象棋在線 | 在線繪圖 | 加盟五一 | 加入收藏 | 設為首頁 |
選擇分類:當前分類——小說笑話 相關聯或者相類似的文章: 23年前,有個年輕的女子~~~~(2191) MY8848網站銷聲匿跡 消費者(1196) 有地下王國嗎?(1182) 七仙女離婚(1127) 電容器的參數與分類(1126) TL431特性及應用(1074) 地球的黑洞-百幕大三角區(1069) 錄取通知書遲一年 家長和學校各執(1018) 三途河之鬼——人類真任性(1014) 白女孩(997) 優勝劣汰的用人原則(989) 何為天堂(987) 知識能否改變命運?(978) 求△V特性鎳氫電池充電單元電路圖(974) 深圳美的驚世絕侖(967) 做一個可愛的人(958) 無聊的笑話~~!!!(945) 三極管的開關作用(924) 簡易FM無線話筒!裝好的成品板(921) 考考你的眼睛——請找出那個輪子在(920) 首頁 前頁 后頁 尾頁 本站推薦: | 吐血推薦!!!(附源程序)MSC ;程序說明:浮點數變為壓縮BCD碼,保存在以數組中 ; 第1字節的位7:0正,1負.位6:0(位5--0代表小數點前的位數),1(位5--0代表小數點后0的位數) ; 2--4字節為壓縮BCD碼,有效位為7位,3個半字節,最后半個字節請使用者自行放棄 ; 程序占用資源PSW,A,B,DPTR,R0--R7,SP深度6,RAM 5個放數據 ; keil 兼容,調用KEIL 的FPMUL子程序。 ;程序作者:*************陳遠征************** ;目 的:追求更快的執行速度,與最小的程序代碼 ;發布時間:2003--05--08 ;編寫背景:精通匯編,研究C51半個月。身感C51方便中的不便 ; 研究了幾種匯編及KEIL的浮點算法,特做此程序. ;聲 明:轉載時請保留以上的信息 C程序: extern float ftod(float i); unsigned char cyz[5]; main(){ float i=1234.567; ftod(i); while(1); } 匯編程序: PUBLIC _FTOD ;程序段 FTODP SEGMENT CODE ;入口地址 RSEG FTODP ;程序段 EXTRN CODE (?C?FPMUL) EXTRN DATA (CYZ) _FTOD: ;參數傳遞在R4--R7中,浮點數IEEE標準seeeeeee emmmmmmm mmmmmmmm mmmmmmmm FTOD: MOV A,R4 ;保存數符 RLC A CLR A RRC A MOV CYZ,A MOV A,R4 ;取絕對值 CLR ACC.7 MOV R4,A ORL A,R5 JNZ FCMP_1E10 MOV CYZ,#0 ;數值為0 MOV CYZ+1,#0 MOV CYZ+2,#0 MOV CYZ+3,#0 MOV CYZ+4,#0 RET FCMP_1E10: MOV DPTR,#YUANZHENG_DE10 LCALL FR0DPTR ;數值裝入R0--R3 LCALL FCMP JNC FCMP_1E0 ;數值小于等于1e10,跳 MOV DPTR,#YUANZHENG_DE_10 ;數值大于1e10,X=X*(1e-10) LCALL FR0DPTR ;數值1e-10裝入R0--R3 LCALL ?C?FPMUL ;keil的浮點數乘法 MOV A,CYZ CLR ACC.6 ADD A,#10 MOV CYZ,A JMP FCMP_1E10 FCMP_1E0: MOV DPTR,#YUANZHENG_DE0 LCALL FR0DPTR ;數值裝入R0--R3 LCALL FCMP JZ FCMP_1E0_10 ;數值等于1e0,跳 JC FCMP_1E0_10 ;數值大于1e0,跳 MOV DPTR,#YUANZHENG_DE10 ;數值小于1e0,X=X*(1e10) LCALL FR0DPTR ;數值1e10裝入R0--R3 LCALL ?C?FPMUL ;keil的浮點數乘法 MOV A,CYZ SETB ACC.6 ADD A,#10 MOV CYZ,A JMP FCMP_1E10 FCMP_1E0_10: ;查表,找到一個比待轉換浮點數大的整數冪. MOV DPTR,#YUANZHENG_DE0 FCMP_FIND: LCALL FR0DPTR LCALL FCMP JNZ FCMP_UNEQU MOV CYZ+1,#10H ;正好是表格中的數,尾數為0.10000000 MOV CYZ+2,#00H MOV CYZ+3,#00H MOV CYZ+4,#00H LCALL CYZDEAL_JIE RET FCMP_UNEQU: JC FCMP_NEXT ;待轉換浮點數大,跳轉 MOV CYZ+1,DPH ;a,b,c a=b-(c-b) MOV CYZ+2,DPL MOV DPTR,#YUANZHENG_DE0 CLR C MOV A,CYZ+2 SUBB A,DPL MOV CYZ+2,A MOV A,CYZ+1 SUBB A,DPH MOV CYZ+1,A CLR C MOV A,DPL SUBB A,CYZ+2 MOV DPL,A MOV A,DPH SUBB A,CYZ+1 MOV DPH,A INC DPTR INC DPTR INC DPTR INC DPTR LCALL FR0DPTR ;數值1e?裝入R0--R3 LCALL ?C?FPMUL ;keil的浮點數乘法 JMP YUANZHENG_FBCD ;得到一個二進制浮點數的純小數。 FCMP_NEXT: MOV A,CYZ ;冪值調整 JB ACC.6,FCMP_NEXT1 INC CYZ JMP FCMP_FIND FCMP_NEXT1: DEC CYZ JMP FCMP_FIND YUANZHENG_FBCD: MOV A,R5 ;恢復階碼 RLC A MOV A,R4 RLC A CLR C SUBB A,#126 MOV R4,A MOV A,R5 ;恢復尾數 SETB ACC.7 MOV R5,A CYZFTB0: MOV A,R4 ;取階碼 JZ CYZFTB1 ;為零嗎? CLR C LCALL RR1 ;右規。 SJMP CYZFTB0 CYZFTB1: ACALL HB2 ;轉換尾數的十分位和百分位 MOV CYZ+1,A ACALL HB2 ;轉換尾數的千分位和萬分位 MOV CYZ+2,A ACALL HB2 ;轉換尾數的十萬分位和百萬分位 MOV CYZ+3,A ACALL HB2 ;轉換尾數的千萬分位和億分位 MOV CYZ+4,A MOV A,R5 ;四舍五入。 RLC A MOV A,#05H ;此處后半字節(BCD碼的第8位)的值不保證 ADDC A,CYZ+4 DA A MOV CYZ+4,A CLR A ADDC A,CYZ+3 DA A MOV CYZ+3,A CLR A ADDC A,CYZ+2 DA A MOV CYZ+2,A CLR A ADDC A,CYZ+1 DA A MOV CYZ+1,A JNC CYZFTB2 MOV CYZ+1,#10H LCALL CYZDEAL_JIE ;十進制浮點數的階碼。 CYZFTB2: RET CYZDEAL_JIE: MOV A,CYZ ;冪值調整 JNB ACC.6,CYZDEAL_JIE1 DEC CYZ RET CYZDEAL_JIE1: INC CYZ RET RR1: MOV A,R5 ;第一操作數右規一次 RRC A ;尾數縮小一半 MOV R5,A MOV A,R6 RRC A MOV R6,A MOV A,R7 RRC A MOV R7,A INC R4 ;階碼加一 CLR OV ;清溢出標志 CJNE R4,#80H,RR1E ;階碼上溢否? MOV R4,#7FH ;階碼溢出 SETB OV RR1E: RET HB2: MOV A,R7 ;尾數擴大100倍。 MOV B,#100 MUL AB MOV R7,A MOV A,B XCH A,R6 MOV B,#100 MUL AB ADD A,R6 MOV R6,A MOV A,B XCH A,R5 MOV B,#100 MUL AB ADD A,R5 MOV R5,A JNC HB21 INC B HB21: MOV A,B ;將整數部分轉換成BCD碼。 MOV B,#10 DIV AB SWAP A ORL A,B RET FR0DPTR: CLR A MOVC A,@A+DPTR MOV R0,A INC DPTR CLR A MOVC A,@A+DPTR MOV R1,A INC DPTR CLR A MOVC A,@A+DPTR MOV R2,A INC DPTR CLR A MOVC A,@A+DPTR MOV R3,A INC DPTR RET FCMP: ;比較兩個正的浮點數 CLR C MOV A,R0 SUBB A,R4 JNZ FCMP1 MOV A,R1 SUBB A,R5 JNZ FCMP1 MOV A,R2 SUBB A,R6 JNZ FCMP1 MOV A,R3 SUBB A,R7 FCMP1: RET YUANZHENG_DE_10: DB 02EH,0DBH,0E6H,0FFH ;1E-10 DB 030H,089H,070H,05FH ;1E-9 DB 032H,02BH,0CCH,077H ;1E-8 DB 033H,0D6H,0BFH,095H ;1E-7 DB 035H,086H,037H,0BDH ;1E-6 DB 037H,027H,0C5H,0ACH ;1E-5 DB 038H,0D1H,0B7H,017H ;1E-4 DB 03AH,083H,012H,06FH ;1E-3 DB 03CH,023H,0D7H,00AH ;1E-2 DB 03DH,0CCH,0CCH,0CDH ;1E-1 YUANZHENG_DE0: DB 03FH,080H,000H,000H ;1E0 DB 041H,020H,000H,000H ;1E1 DB 042H,0C8H,000H,000H ;1E2 DB 044H,07AH,000H,000H ;1E3 DB 046H,01CH,040H,000H ;1E4 DB 047H,0C3H,050H,000H ;1E5 DB 049H,074H,024H,000H ;1E6 DB 04BH,018H,096H,080H ;1E7 DB 04CH,0BEH,0BCH,020H ;1E8 DB 04EH,06EH,06BH,028H ;1E9 YUANZHENG_DE10: DB 050H,015H,002H,0F9H ;1E10 END 1、 本站不保證以上觀點正確,就算是本站原創作品,本站也不保證內容正確。 2、如果您擁有本文版權,并且不想在本站轉載,請書面通知本站立即刪除并且向您公開道歉! |
本站協議。
版權信息。
關于我們。
本站地圖。
營業執照。
發票說明。
付款方式。
聯系方式
深圳市寶安區西鄉五壹電子商行——粵ICP備16073394號-1;地址:深圳西鄉河西四坊183號;郵編:518102 E-mail:51dz$163.com($改為@);Tel:(0755)27947428 工作時間:9:30-12:00和13:30-17:30和18:30-20:30,無人接聽時可以再打手機13537585389 |