功能雙字節二進制有符號數除法(補碼)_第1頁
功能雙字節二進制有符號數除法(補碼)_第2頁
功能雙字節二進制有符號數除法(補碼)_第3頁
功能雙字節二進制有符號數除法(補碼)_第4頁
功能雙字節二進制有符號數除法(補碼)_第5頁
已閱讀5頁,還剩4頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、(二)() 標號: 功能:雙字節二進制有符號數除法(補碼) 入口條件:被除數在R2、R3、R4、R5中,除數在R6、R7中。 出口信息:OV=0時商在R2、R3中,OV=1時溢出。 影響資源:PSW、A、B、R1R7 堆棧需求: 字節 DIVS: LCALL MDS ;計算結果的符號和兩個操作數的絕對值 PUSH PSW ;保存結果的符號 LCALL DIVD ;計算兩個絕對值的商 JNB OV,DVS1 ;溢出否? POP ACC ;溢出,放去結果的符號,保留溢出標志 RET DVS1: POP PSW ;未溢出,取出結果的符號 MOV R4,#0 MOV R5,#0 MDSE: JB F0

2、,MDS2 ;用補碼表示結果 CLR OV ;結果為正,原碼即補碼,計算成功 RET MDS: CLR F0 ;結果符號初始化 MOV A,R6 ;判斷第二操作數的符號 JNB ACC.7,MDS1;為正,不必處理 CPL F0 ;為負,結果符號取反 XCH A,R7 ;第二操作數取補,得到其絕對值 CPL A ADD A,#1 XCH A,R7 CPL A ADDC A,#0 MOV R6,A MDS1: MOV A,R2 ;判斷第一操作數或運算結果的符號 JNB ACC.7,MDS3;為正,不必處理 CPL F0 ;為負,結果符號取反 MDS2: MOV A,R5 ;求第一操作數的絕對值或

3、運算結果的補碼 CPL A ADD A,#1 MOV R5,A MOV A,R4 CPL A ADDC A,#0 MOV R4,A MOV A,R3 CPL A ADDC A,#0 MOV R3,A MOV A,R2 CPL A ADDC A,#0 MOV R2,A MDS3: CLR OV ;運算成功 RET () 標號: 功能:雙字節二進制無符號數開平方(快速) 入口條件:被開方數在R2、R3中。 出口信息:平方根仍在R2、R3中,整數部分的位數為原數的一半,其余為小數。 影響資源:PSW、A、B、R2R7 堆棧需求: 字節 SH2: MOV A,R2 ORL A,R3 JNZ SH20

4、RET ;被開方數為零,不必運算 SH20: MOV R7,#0 ;左規次數初始化 MOV A,R2 SH22: ANL A,#0C0H ;被開方數高字節小于否? JNZ SQRH ;不小于,左規格化完成,轉開方過程 CLR C ;每左規一次,被開方數左移兩位 MOV A,R3 RLC A MOV F0,C CLR C RLC A MOV R3,A MOV A,R2 MOV ACC.7,C MOV C,F0 RLC A RLC A MOV R2,A INC R7 ;左規次數加一 SJMP SH22 ;繼續左規 () 標號: 功能:四字節二進制無符號數開平方(快速) 入口條件:被開方數在R2、R

5、3、R4、R5中。 出口信息:平方根在R2、R3中,整數部分的位數為原數的一半,其余為小數。 影響資源:PSW、A、B、R2R7 堆棧需求: 字節 SH4: MOV A,R2 ORL A,R3 ORL A,R4 ORL A,R5 JNZ SH40 RET ;被開方數為零,不必運算 SH40: MOV R7,#0 ;左規次數初始化 MOV A,R2 SH41: ANL A,#0C0H ;被開方數高字節小于否? JNZ SQRH ;不小于,左規格化完成 MOV R6,#2 ;每左規一次,被開方數左移兩位 SH42: CLR C ;被開方數左移一位 MOV A,R5 RLC A MOV R5,A M

6、OV A,R4 RLC A MOV R4,A MOV A,R3 RLC A MOV R3,A MOV A,R2 RLC A MOV R2,A DJNZ R6,SH42 ;被開方數左移完兩位 INC R7 ;左規次數加一 SJMP SH41 ;繼續左規 SQRH: MOV A,R2 ;規格化后高字節按折線法分為三個區間 ADD A,#57H JC SQR2 ADD A,#45H JC SQR1 ADD A,#24H MOV B,#0E3H ;第一區間的斜率 MOV R4,#80H ;第一區間的平方根基數 SJMP SQR3 SQR1: MOV B,#0B2H ;第二區間的斜率 MOV R4,#0

7、A0H;第二區間的平方根基數 SJMP SQR3 SQR2: MOV B,#8DH ;第三區間的斜率 MOV R4,#0D0H;第三區間的平方根基數 SQR3: MUL AB ;與區間基點的偏移量乘區間斜率 MOV A,B ADD A,R4 ;累加到平方根的基數上 MOV R4,A MOV B,A MUL AB ;求當前平方根的冪 XCH A,R3 ;求偏移量(存放在R2R3中) CLR C SUBB A,R3 MOV R3,A MOV A,R2 SUBB A,B MOV R2,A SQR4: SETB C ;用減奇數法校正一個字節的平方根 MOV A,R4 ;當前平方根的兩倍加一存入R5R6

8、中 RLC A MOV R6,A CLR A RLC A MOV R5,A MOV A,R3 ;偏移量小于該奇數否? SUBB A,R6 MOV B,A MOV A,R2 SUBB A,R5 JC SQR5 ;小于,校正結束,已達到一個字節的精度 INC R4 ;不小于,平方根加一 MOV R2,A ;保存新的偏移量 MOV R3,B SJMP SQR4 ;繼續校正 SQR5: MOV A,R4 ;將一個字節精度的根存入R2 XCH A,R2 RRC A MOV F0,C ;保存最終偏移量的最高位 MOV A,R3 MOV R5,A ;將最終偏移量的低八位存入R5中 MOV R4,#8 ;通過

9、(R5R6R2)求根的低字節 SQR6: CLR C MOV A,R3 RLC A MOV R3,A CLR C MOV A,R5 SUBB A,R2 JB F0,SQR7 JC SQR8 SQR7: MOV R5,A INC R3 SQR8: CLR C MOV A,R5 RLC A MOV R5,A MOV F0,C DJNZ R4,SQR6 ;根的第二字節計算完,在R3中 MOV A,R7 ;取原被開方數的左規次數 JZ SQRE ;未左規,開方結束 SQR9: CLR C ;按左規次數右移平方根,得到實際根 MOV A,R2 RRC A MOV R2,A MOV A,R3 RRC A

10、MOV R3,A DJNZ R7,SQR9 SQRE: RET () 標號: 功能:單字節十六進制數轉換成雙字節ASCII碼 入口條件:待轉換的單字節十六進制數在累加器A中。 出口信息:高四位的ASCII碼在A中,低四位的ASCII碼在B中。 影響資源:PSW、A、B 堆棧需求: 字節 HASC: MOV B,A ;暫存待轉換的單字節十六進制數 LCALL HAS1 ;轉換低四位 XCH A,B ;存放低四位的ASCII碼 SWAP A ;準備轉換高四位 HAS1: ANL A,#0FH ;將累加器的低四位轉換成ASCII碼 ADD A,#90H DA A ADDC A,#40H DA A R

11、ET () 標號: 功能:ASCII碼轉換成十六進制數 入口條件:待轉換的ASCII碼(30H39H或41H46H)在A中。 出口信息:轉換后的十六進制數(00H0FH)仍在累加器A中。 影響資源:PSW、A 堆棧需求: 字節 ASCH: CLR C SUBB A,#30H JNB ACC.4,ASH1 SUBB A,#7 ASH1: RET () 標號: 功能:單字節十六進制整數轉換成單字節碼整數 入口條件:待轉換的單字節十六進制整數在累加器A中。 出口信息:轉換后的碼整數(十位和個位)仍在累加器A中,百位在R3中。 影響資源:PSW、A、B、R3 堆棧需求: 字節 HBCD: MOV B,

12、#100 ;分離出百位,存放在R3中 DIV AB MOV R3,A MOV A,#10 ;余數繼續分離十位和個位 XCH A,B DIV AB SWAP A ORL A,B ;將十位和個位拼裝成碼 RET () 標號: 功能:雙字節十六進制整數轉換成雙字節碼整數 入口條件:待轉換的雙字節十六進制整數在R6、R7中。 出口信息:轉換后的三字節碼整數在R3、R4、R5中。 影響資源:PSW、A、R2R7 堆棧需求: 字節 HB2: CLR A ;碼初始化 MOV R3,A MOV R4,A MOV R5,A MOV R2,#10H ;轉換雙字節十六進制整數 HB3: MOV A,R7 ;從高端移

13、出待轉換數的一位到CY中 RLC A MOV R7,A MOV A,R6 RLC A MOV R6,A MOV A,R5 ;碼帶進位自身相加,相當于乘 ADDC A,R5 DA A ;十進制調整 MOV R5,A MOV A,R4 ADDC A,R4 DA A MOV R4,A MOV A,R3 ADDC A,R3 MOV R3,A ;雙字節十六進制數的萬位數不超過,不用調整 DJNZ R2,HB3 ;處理完 RET () 標號: 功能:單字節十六進制小數轉換成單字節碼小數 入口條件:待轉換的單字節十六進制小數在累加器A中。 出口信息:CY=0時轉換后的碼小數仍在A中。CY=1時原小數接近整數

14、。 影響資源:PSW、A、B 堆棧需求: 字節 HBD: MOV B,#100 ;原小數擴大一百倍 MUL AB RLC A ;余數部分四舍五入 CLR A ADDC A,B MOV B,#10 ;分離出十分位和百分位 DIV AB SWAP A ADD A,B ;拼裝成單字節碼小數 DA A ;調整后若有進位,原小數接近整數 RET () 標號: 功能:雙字節十六進制小數轉換成雙字節碼小數 入口條件:待轉換的雙字節十六進制小數在R2、R3中。 出口信息:轉換后的雙字節碼小數仍在R2、R3中。 影響資源:PSW、A、B、R2、R3、R4、R5 堆棧需求: 字節 HBD2: MOV R4,#4

15、;四位十進制碼 HBD3: MOV A,R3 ;原小數擴大十倍 MOV B,#10 MUL AB MOV R3,A MOV R5,B MOV A,R2 MOV B,#10 MUL AB ADD A,R5 MOV R2,A CLR A ADDC A,B PUSH ACC ;保存溢出的一位十進制碼 DJNZ R4,HBD3 ;計算完四位十進制碼 POP ACC ;取出萬分位 MOV R3,A POP ACC ;取出千分位 SWAP A ORL A,R3 ;拼裝成低字節碼小數 MOV R3,A POP ACC ;取出百分位 MOV R2,A POP ACC ;取出十分位 SWAP A ORL A,R

16、2 ;拼裝成高字節碼小數 MOV R2,A RET ()標號: 功能:單字節碼整數轉換成單字節十六進制整數 入口條件:待轉換的單字節碼整數在累加器A中。 出口信息:轉換后的單字節十六進制整數仍在累加器A中。 影響資源:PSW、A、B、R4 堆棧需求: 字節 BCDH: MOV B,#10H ;分離十位和個位 DIV AB MOV R4,B ;暫存個位 MOV B,#10 ;將十位轉換成十六進制 MUL AB ADD A,R4 ;按十六進制加上個位 RET ()標號: 功能:雙字節碼整數轉換成雙字節十六進制整數 入口條件:待轉換的雙字節碼整數在R2、R3中。 出口信息:轉換后的雙字節十六進制整數仍在R2、R3中。 影響資源:PSW、A、B、R2、R3、R4 堆棧需求: 字節 BH2: MOV A,R3 ;將低字節轉換成十六進制 LCALL BCDH MOV R3,A MOV A,R2 ;將高字節轉換成十六進制 LCALL BCDH MOV B,#100 ;擴大一百倍 MUL AB ADD A,R3 ;和低字節按十六進制相加 MOV R3,A CLR A ADDC A,B MOV R2,A RET ()標號: 功能:單字節碼小數轉換成單字

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論