




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第4章匯編語言程序設計4.1匯編語言程序設計過程
4.2簡單程序設計
4.3分支程序設計
4.4循環程序設計
4.5查表程序設計
4.6散轉程序設計
4.7子程序設計
4.8浮點數及其程序設計4.1匯編語言程序設計過程1.分析問題,確定算法或解題思路2.畫流程圖3.編寫程序4.調試和修改4.1.1匯編語言程序設計過程4.1.2偽指令所謂偽指令是指由匯編程序提供的,在匯編時起作用,在執行時不起作用的一類指令。其特點是沒有對應的機器碼。偽指令提供了像規定程序地址、建立數據表格一類的功能,為匯編語言程序的編寫提供了方便。1.定位偽指令格式:ORGnn為十進制或十六進制常數,代表地址。該偽指令規定了后面指令的地址,例如: ORG0100H AJMPPRG1AJMP為雙字節指令,其首字節放在0100H單元,第二字節放在0101H單元。2.匯編結束偽指令格式:END當匯編程序遇到該指令后,結束匯編過程,其后的指令將不加處理。3.定義字節偽指令格式:DBx1,x2,…,Xn其中Xi為8位數據或ASCII碼。例如:ORG1000HDB01H,02H則(1000H)=01H(1001H)=02HORG1100DB‘01’則(1100H)=30H0的ASCII碼(1101H)=31H1的ASCII碼4.定義雙字節偽指令格式:DWXl,X2,…,Xn其中Xi為雙字節數據。例如:ORG2000HDW2546H,0178H則(2000H)=25H(2001H)=46H(2002H)=01H(2003H)=78H5.單字節數據賦值偽指令格式:xEQUnx為用戶定義的標號,n為常數、工作寄存器或特殊功能寄存器,為單字節數。該偽指令將n的值賦給標號x。x可用于指令中,作為單字節操作數;包括立即數和直接地址direct。6.雙字節數據賦值偽指令格式:yEQUny為用戶定義的標號,n為雙字節常數。該偽指令將n的值賦給標號y。y可作為指令中的雙字節操作數,或轉移指令中的目的地址。需要注意的是,不同的匯編程序提供的偽指令可能不同,使用時要參考相應的說明。4.2簡單程序設計
簡單程序又稱順序程序。計算機是按指令在存儲器中存放的先后次序來順序執行程序的。例1求多項式y=a2-b。圖4-1例1流程圖開始A←aB←aA*BA←(A)-bR7←(A)A←(B)A←(A)-(C)R6←(A)結束程序為: MOV A, R2;A←a MOV B, A MUL AB CLR C SUBB A, R3 MOV R7, A ;R7←結果的低8位 MOV A, B SUBB A, #00H;高八位減進位位 MOV R6, A END例2單字節十六進制數轉換為BCD碼。解:單字節十六進制數在0~255之間,將其除100后,商即百位數,余數除以10,商為十位數,余數即個位數。設單字節數在累加器A中,轉換結果的百位數放在R3中,十位、個位則放在A中。流程圖如圖4-2所示。開始B←100A/BR7←(A)A←(B)B←10A/B結束A7~4←(A)3~0A3~0←(B)圖4-2例2流程圖程序為:HBCD: MOV B,#100 ;分離出百位數 DIV AB MOV R3,A ;R3←立即數MOV A,#10 ;分離十位和各位數XCH A,BDIV A,BSWAP AADD A,BRET例3無符號雙字節乘法。解:設乘數和被乘數分別放在R2、R3和R6、R7中,計算結果放入R4、R5、R6、R7中。雙字節無符號數的乘法可以采用重復加法的方法進行。MCS-51單片機有乘法指令,采用乘法指令的程序流程圖如圖4-3所示。(R2 R3)×(R6 R7)(R3*R7)H(R3*R7)L(R2*R7)H(R2*R7)L(R3*R6)H(R3*R6)L+(R2*R6)H(R2*R6)LR4R5R6R7開始(R3)*(R7)R7←(R3*R7)LR5←(R3*R7)HR2*R7R4←(R2*R7)L+(R3*R7)HR5←(R2*R7)H+(Cy)R3*R6R6←(R3*R6)L+(R2*R7)L+(R3*R7)HR5←(R3*R6)L+(R2*R7)H+(Cy)R2*R6R5←(R2*R6)L+(R3*R6)L+(R2*R7)H+(Cy)R5←(R2*R6)L+(Cy)
返回圖4-3例3流程圖程序為:
MUL:MOV A, MOV B, R7 MUL AB XCH A, R7MOV R5, B MOV B, R2MUL AB ADD A, R5 MOV R4, ACLR A ADDC A, B MOV R5, A MOV A, R6MOV B, R3 MUL AB ADD A, R4 XCH A, R6 XCH A, B ADDC A, R5 MOV R5, A MOV F0, C MOV A, R2MUL AB ADD A, R5 MOV R5, A CLR A MOV ACC.0, C MOV C, F0 ADDC A, B MOV R4, A RET如果是左規格化,直至把操作數變為規格化浮點數。SUBB A,P31234.MOV A,R2MOV R2,A ;R0中的值即為所求的地址。例24位BCD碼的減法程序。本例中,參數傳遞是通過累加器A完成的,主程序將被轉換的數送到A中。圖4-9例2流程圖一般情況下,對自變量x是有變化規律的數據,可以根據這一規律形成地址,對應的y則存放于該地址單元中;在許多問題中,需多次執行一段完全相同的程序,只是參加運算(或其它處理過程)的操作數不同,這時就可以采用循環程序結構。5,所以需進行左規格化處理,使積為規格化浮點數。SS: MOV A,R7在這種表示方法中,數值由四個部分組成,即尾數S及符號,階碼P及符號。將數據存儲器中的內容取出,分別與X相比較,若相等,當前4.3分支程序設計
在許多情況下,需要根據不同的條件轉向不同的處理程序,這種結構的程序稱為分支程序。采用條件轉移指令、比較轉移指令和位轉移指令可以實現程序的分支。例1求單字節有符號二進制數的補碼。解:正數補碼是其本身,負數的補碼是其反碼加1。因此,程序首先判斷被轉換數符號,負數進行轉換,正數即為補碼。設二進制數放在累加器A中,其補碼放回到A中。其程序框圖如圖所示。圖4-4例1流程圖程序為:CMPT: JNB ACC.7,NCH ;(A)>0,不需要轉換 MOV C,ACC.7 ;保存符號 MOV 00H, C ;保存符號 CPL A ADD A,#1 MOV C,OOH MOV ACC.7,C ;恢復符號NCH: RET求符號函數。1,X>0;Y=0,X=0;-1,X<0。
解:X存放在30H單元,Y存放在31H單元中。流程圖如圖4-5所示。圖4-5例2流程圖X>0Yes開始X=0?Y←0Y←1Y←-1結束NoNoYes解:X存放在30H單元,Y存放在31H單元中。流程圖如圖4-5所示。START: MOV A,30H CJNZ A,#00H AJMP LLNZ: JB ACC.7,MM MOV A,#01H AJMP LLMM: MOV A,#81HLL: MOV 31H, A END例3將ASCII碼轉換為十六進制數。如果不是十六進制數,用戶標志位置1。解:由ASCII碼表可知,30H~39H為0~9的ASCII碼,41H~46H為A~F的ASCII碼,即是將ASCII碼減30H或37H就可以獲得對應的十六進制數。設ASCII碼放在累加器A中,轉換結果放回A。YesYesYesNo(A)>10H?開始A←(A)-30H(A)≥0?(A)≥0AH?A←(A)-07H(A)>09H?F0←1No返回NoNoYes圖4-6例3流程圖程序為:START:CLR C SUBB A,#30H JC NASC;(A)<0,不是十六進制 CJNE A,#0AH,MMMM: JC ASC ;0≤(A)<0AH,是十六進制數 SUBB A,#07HCJNE A,#0AH,NNNN: JC NASC CJNE A,#10H,LLLL: JC ASCNASC: SETB F0ASC :RET4.4循環程序設計循環程序是指一段反復執行的程序。在許多問題中,需多次執行一段完全相同的程序,只是參加運算(或其它處理過程)的操作數不同,這時就可以采用循環程序結構。循環程序可以縮短程序,減少程序所占的存儲空間。圖4-7循環程序循環開始設置循環初值循環體循環控制循環結束循環控制循環開始設置循環初值循環體循環結束例1將內部數據存儲器30H~7FH單元的內容傳送到外部數據存儲器以1000H開始的連續單元中去。解:30H~7FH共計80個單元,需傳送80次數據。將R7作為循環計數寄存器,流程圖如圖4-8所示開始R0←30HDPTR←1000HR7←50HA←((R0))(DPTR←(A)R0←(R0)+1DPTR←(DPTR)+1R7=0?結束No圖4-8例1流程圖程序為:MOV R0, #30H MOV DPTR,#1000H MOV R7, #50HLOP: MOV A,@RO MOVX @DPTR,A INC R0 ;指向下一指針 INC DPTR DJNZ R7, LOP ;未完繼續 END例2多字節BCD碼加法。解:設R7存放著BCD碼的字節數(一個字節中存2位BCD碼),R0為被加數和結果的低位地址寄存器,R1為加數的低位地址寄存器,Cy保存最高字節的進位位,流程圖如圖4-9所示。開始R2←(R7)R6←((R0))A←((R0))A←(A)+((R1))DAAR0←(R0)+1R1←(R1)+1R2=0?R2←(R6)結束NoYes圖4-9例2流程圖程序為:MADD: MOV A,R7 MOV R2,A ;保存字節數 MOV A,R0 ;保存結果的地址指針 MOV R6, A CLR CLOOP: MOV A,@R0 ADDC A,@R1 DA A MOV @R0, A INC R0 INC R1 DJNZ R2,LOOP MOV A,R6 ;恢復地址 MOV R0,A RET例3內部數據存儲器中連續存放著若干8位二進制數據,其中一個數的值為X,試求出該數的地址。NoA←((R0))YesR6←(R0)R0←(R0)+1R2=0?開始R2←(R7)結束(A)=X?YesNo圖4-10例3流程圖解:設R0為數據區的首地址寄存器,R7存放數據的個數,R6存放X的地址。將數據存儲器中的內容取出,分別與X相比較,若相等,當前R0中的值即為所求的地址。程序的循環的次數是不確定的,一旦找到X,循環立即結束。程序為: START: MOV A,R7 ;保存立即數 MOV R2, A LOOP: MOV A,@R0CJNE A,#X,LL SJMJP OUTL LL: INC R0 DJNZ R2,LOOPSJMP MM OUTL: MOV A,R0MOV R6,A MM: RET例4排序程序,是將連續存放的若干數據重新排列,本例要求把內部數據存儲器的數據由小到大排列。解:將兩個相鄰的數據相比較,如果前數大于后數,兩個數的位置互換,否則位置不變。所有數據比較完后、找出最大的數,并存在最后一個單元中。第二次比較在剩余的數據中進行,找到剩余數據中最大的數。以此類推,即可完成數據的排序。設數據的個數為n,第一次需比較的次數為n-1,第二次需n-2次,等等。在理論上.需要進行n-1次循環比較才能完成排序過程。事實上,有可能提前完成排序過程。如果在某次循環比較過程中沒有發生位置互換,說明數據的排序已完成。為此在程序中設置一個數據換位標志位,當其發生變化時,排序即告完成。設R0為數據區的首地址寄存器,R7字節數。YesYesNo開始R2←(R7)60H←(R0)R2←(R2)-1R3←(R2)R0←(60H)F0←0A←((R0))R0←(R0)+1A←(A)-((R0))A<((R0))?A←((R0))R0←(R0)-1(A)←((R0))R0←(R0)+1(R0)←(A)F0←1R3=0?FO=1?R0←(60H)結束NoNoYes圖4-11例4流程圖程序為:SS: MOV A,R7 MOV R2, A ;保存字節數 MOV 60H,R0 ;保存地址指針 NN: DEC R2 MOV A, R2 MOV R3, A ;初始化循環次數 MOV R0, 60H ;恢復地址指針 L1: CLR FO MOV A, @R0 ;取前數 INC R0 CLR CSUBB A, @RO ;減后數 JC MM MOV A, @R0 ;位置互換 DEC R0 XCH A, @R0 INC R0 MOV @R0,A SETB F0MM: DJNZ R3, L1 JB F0, NN ;排序未完轉NN MOV R0, 60H ;恢復地址指針RET例5試編寫延時程序。解:計算機反復執行一段程序以達到延時的目的稱為軟件延時。通過控制執行指令的數量可以延時不同的時間。要實現較長時間的延時,一般需采用多重循環。下面是延時50ms的延時程序,設單片機的晶振為12MHZ。DEL: MOV R7, #200DEL1: MOV R6, #125DEL2: DJNZ R6,DEL2 DJNZ R7,DEL1該程序的延時時間實際為((125×2+4)×200+2)×0.001=50.8ms。4.5查表程序設計查表就是根據自變量x的值,在表中查找y,使y=f(x)。x和y可以是各種類型的數據。表的結構也是多種多樣的。表格可以放在程序存儲器中,也可以存放在數據存儲器中。一般情況下,對自變量x是有變化規律的數據,可以根據這一規律形成地址,對應的y則存放于該地址單元中;對x是沒有變化規律的數據,在表中存放x及其對應的y值。前者形成的表格是有序的,后者形成的表格可以是無序的。例1將l位十六進制數轉換為ASCII碼。解:在前面的例子中,我們介紹了將ASCII碼轉換為十六進數的程序,本例是其逆變換。這里采用查表的方法完成十六進制數到ASCII碼的轉換。建立一個表格,首先確定表格的首地址,在相對于表首的地址單元中存放ASCII碼。設十六進制存放在R0中,轉換結果存放在R1中。程序為:ORG 0300H MOV A,R0ANL A,#0FH ;屏蔽高位MOV DPTR,#TAB MOVC A,@A+DPTRMOV R1,AORG 0380HTAB: DB ‘01234567’DB ‘89ABCDEF’END程序為:
MOV DPTR,#TAB MOV A,R3 CLR C RLC A ;X*2 MOV R3,A XCH A,R2 RLC A XCH A,R2 ADD A,DPL ;加表首地址 MOV DPL, A MOV A,DPH ADDC A,R2 MOV DPH, A CLR A INC DPTR MOVC A,@A+DPTR MOV R3,A RETTAB: DW
…例3通過一個鍵盤輸入一組命令,完成不同的功能。解:設從鍵盤輸入的命令字符為‘A’、‘D’、‘E’、‘L’、‘M’、‘X’、‘Z’七種,當鍵入不同的命令字符時轉向不同的處理程序,對應的處理程序的入口標號為XA、XD、XE、XL、XM、XX、XZ。由于輸入的字符之間很難找到什么規律,建立表格時將字符和其對應的處理程序的地址一同存入。查表時先查找字符,其后就是處理程序的入口地址。表格以0為結束標志。入口條件為:命令字符放在A中。程序:LTB: MOV DPTR,#TAB MOV B,ALOOP: CLR A MOVC A,@A+DPTR JZ LEND INC DPTR CJNZ A,B,LNF CLR A MOVC A,@A+DPTR ;取出入口地址第一個字節 MOV B,A INC DPTR CLR A MOVC A,@A+DPTR MOV DPL, A MOV DPH, B CLR A JMP @A+DPTR ;轉向相應處理程序LNF: INC DPTR INC DPTR ;繼續查 SJMP LOOPLEND: (查不到處理程序)TAB: DB ‘A’ DW XA DB ‘D’ DW XD DB ‘E’ DW XE DB ‘L’ DW XL DB ‘M’ DW XM DB ‘X’ DW XX DB ‘Z’ DW XZ DB 0 ;表格結束標志4.6散轉程序設計散轉程序是一種并行多分支程序。它根據系統的某種輸入或運算結果,分別轉向各個處理程序。與分支程序不同的是,散轉程序多采用指令:JMP@A+DPTR,根據輸入或運算結果,確定A或DPTR的內容,直接跳轉到相應的分支程序中去。而分支程序一般是采用條件轉移指令或比較轉移指令實現程序的跳轉。K=?分支程序0分支程序1分支程序n···圖4-12散轉程序的結構例1單片機四則運算系統。解:在單片機系統中設置+、-、×、÷四個運算命令鍵,它們的鍵號分別為0、1、2、3。當其中一個鍵按下時,進行相應的運算。操作數由P1口和P3口輸入,結果再由Pl口和P3口輸出。具體如下:P1口輸入被加數、被減數、被乘數和被除數,輸出結果的低8位或商;P3口輸入加數、減數、乘數和除數,輸出進位(借位)、結果的高8位以及余數。鍵號放入A中。程序為FOUR: MOV P1,#00FH MOV P3,#00FH MOV DPTR,#TRJ4 RL A ;鍵號*2 JMP @DPTRTBJ4: AJMP PRG0 AJMP PRG1 AJMP PRG2 AJMP PRG3PROG0: MOV A,P1 ADD A,R3 MOV P1,A CLR A ADDC A,#0 ;進位位放入A MOV P3,A RETPROG1: MOV A,P1 CLR C SUBB A,P3 MOV P1,A CLR A RLC A ;借位位放入A MOV P3,A RETPROG2:MOV A,P1 MOV B,P3 MUL AB MOV P1,A MOV P3,B RETPROG3: MOV A,P1 MOV B,P3 DIV AB MOV P1,A MOV P3,B RET例2根據(R3R2)的內容轉向不同的處理程序解:程序為:JMPN: MOV DPTR,#TABN MOV A,R3 MOV B,#3 MUL AB ADD A,DPH MOV DPH, A MOV A,R2 MOV B,#3 MUL AB XCH A,B ADD A,DPH XCH A,B JMP @A+DPTRTABN: LJMP PRG0 LJMP PRG1 LJMP PRGN下面的例子是利用查表的方法來實現程序散轉的。例3根據R2的內容轉向不同的處理程序。解:程序為:JMPN: MOV A,R2 MOV DPTR,#TABN MOVC A,@A+DPTR JMP @A+DPTRJBJN: DB PRG0 DB PRG2
DB PRGNPRG0:分支程序0PRG1:分支程序1
PRGN:分支程序n這類程序中,地址表和所有的分支程序必須設在256個字節中。例4根據R2的內容轉向不同的處理程序。解:程序為: JMPN: MOV DPTR,#TAB MOV A,R2 MOV B,#2 MUL AB ADD A,DPL MOV DPL, A MOV A,B ADDC A,DPH MOV DPH, A CLR A MOVC A,@A+DPTR MOV R7,A CLR A INC DPTR MOVC A,@A+DPTR MOV DPH,A MOV DPL, R7 CLR A JMP @A+DPTR TABN: DW PRG0 DW PRG1
DW PRGN該散轉程序最多可以實現256個分支。4.7子程序設計在程序設計過程中,經常遇到在程序的不同位置需使用完全相同的一段程序的情況。為了避免多次出現同一段程序,節省程序存儲器空間,可將這段程序寫成獨立的程序段,在任何需要的地方都可調用這段程序,運行完這段程序后再返回原程序繼續運行,這樣的獨立程序段就稱為子程序,而調用子程序的程序稱為主程序。調用子程序過程由調用指令完成,MCS-51單片機有二條調用指令:ACALLaddr11和LCALLaddrl6。指令中的地址為子程序的入口地址,在匯編語言中通常用標號來代表。在執行這二條指令時,單片機將當前的PC值壓入堆棧。子程序的最后是返回指令RET,這條指令將堆棧的內容傳入PC中,保證程序返回調用的地方繼續運行。在子程序調用時,先將這些內容保存起來,子程序返回前再恢復原來的內容、這一過程稱為保護現場。保護現場通常由堆棧來完成。在子程序調用時,主程序應先把有關參數放到某些約定的位置,子程序運行時,可以從約定位置得到這些參數。在子程序執行過程中調用其它子程序,這種現象稱為子程序嵌套。MCS-5l單片機允許多重嵌套。子程序的結構與一般程序沒有什么差別,最重要的標志是在其最后有一條返回指令。另外,在需要保護現場時,子程序的開始和結束都有入棧和出棧指令。以下例子主要是說明子程序的調用過程和參數傳遞的方法。例1單字節有符號數的加、減法程序。解:該程序的功能為(R2)±(R3)→R7,R2和R3中為有符號數的原碼,R7中存放計算結果的原碼。運算結果溢出時OV置位。程序為:SUB1: MOV A,R3 CPL ACC.7 ;符號位取反 MOV R3,AADD1: MOV A,R3 ACALL CMPT ;加數或減數求補 MOV R3,A MOV A,R2 ACALL CMPT ;被加數或被減數求補 MOV R7,AOVER: RETSUBl為減法程序入口,ADDl為加法程序入口。CMPT為單字節有符號數求補碼程序,參見4.3節例1。本例中,參數傳遞是通過累加器A完成的,主程序將被轉換的數送到A中。子程序將A中的有符號數求補后,存于A中。主程序可從A中得到運算結果。例24位BCD碼的減法程序。解:由于BCD碼調整指令在減法指令后面是不起作用的,因此不能用直接采用BCD碼調整指令來完成BCD碼的減法運算。本例是BCD碼減法運算的一種方法。設被減數放在50H和5lH單元中,減數放在60H和61H中,差放入40H和41中。;主程序 MOV R1,#50H MOV R0,#60H CLR C ACALL BSUB MOV 40H, A ACALL BUSB MOV 41H, A
;子程序BSUB: MOV A,#9AH SUBB A,@R0 ADD A,@R1 DA A INC R0 INC R1 CPL C RET4.8浮點數及其程序設計在單片機應用系統的數據處理過程中,經常會遇到小數的運算問題,表示小數的方法一般有兩種,定點數和浮點數。在二進制效中,可用類似科學計數法的方法來表示一個數,如一般表達式為N=S×2p在這種表示方法中,數值由四個部分組成,即尾數S及符號,階碼P及符號。在二進制中,通過定義相應字節或位來表示這四部分,就形成了二進制浮點數。二進制浮點數可以有多種不同的表示方法,下面是一種常見的三字節浮點數的格式:其中尾數占16位,階碼占6位,階符占1位,數符占1位。階碼通常用補碼來表示。在這種表示方法中,小數點的實際位置要由階碼來確定,而階碼又是可變的,因此稱為浮點數。4.8.2規格化浮點數同一個數用浮點數表示可以是不同的,如1234.75=0B9A58H=0C4D2CH=0D2696H雖然這幾種表示其數值是相同的,但其尾數的有效數字的位數不同,分別為16位、15位和14位。在運算過程中,為了最大限度地保持運算精度,應盡量增加尾數的有效位數。這就需要對浮點數進行規格化處理。在只考慮用二進制原碼表示尾數時,尾數的最高位為l,則該浮點數為規格化浮點數。在規格化浮點數中,用尾數為0和最小階碼表示0,三字節規格化浮點數的0表示為410000H。浮點數在運算之前和運算之后都要進行規格化,規格化過程包括以下步驟:(1)首先判斷尾是否為0,如果為0,規格化結果為410000H;(2)如果尾數不為0,判斷層數的最高位是否為1,如果不為1,尾數左移,階碼減1;(3)再判斷層數的最高位是否為1,如果不為1,繼續進行規格化操作,如果為1,則規格化結束。4.8.3浮點數運算浮點數的加、減運算浮點數的運算就是求結果的尾數、數符、階碼包括階符的過程。例1解:132.25+69.75=088444H+078B80H=088444H+0845C0H=08CA00H=202由于兩個浮點數的階碼分別為8和7,先將加數的階碼變為8,其尾數右移1位。兩個數的階碼相同后,尾數直接相加即為和的尾數,和的尾數的最高位為1,為規格化浮點數。例2本例中被減數小于減數,差為負數,結果的數符為1。差的階碼為兩個數中較大的階碼2.浮點數乘法運算如果設參加運算的兩個操作數分別表示為Na=(-1)SSa×Sa×2PaNb=(-1)SSb×Sb×2Pb它們的積為N=Na×Nb=(-1)SSa+SSb×(Sa×Sb)×2Pa+Pb式中SSa和SSb為兩個數的數符。
乘法運算可總結為:(1)積的數符為乘數的符號位和被乘數的符號位按模2求和,即異或;(2)積的階為乘數和被乘數的階的和;(3)積的尾數為被乘數和乘數的尾數的積。參加運算的浮點數一般都是規格化的浮點數,尾數的積小于1,不需進行右規格化處理。但有可能小于0.5,所以需進行左規格化處理,使積為規格化浮點數。如果乘數或被乘數的尾為0、則積為410000H。由于在尾數相乘時,積的低16位不能反映在結果中,因此,積可能會產生一定的誤差。例3算22.4l×4.23。積的階為乘數和被乘數的和,即8。尾數相乘時,積小于0.5,進行左規格化處理,階碼變為7。例4計算2586.5×(-6.91)。解:2586.5×(-6.91)=0CA1BOH×83DD13H=8F8BA0H=-17872被乘數為正數,數符為0,乘數為負數,數符為1,積的數符為0⊕1=1,積為負數。3.浮點數的除法運算除法運算可以表示為N=Na/Nb=[(-1)SSa×Sa×2Pa]/[(-1)SSb×Sb×2Pb]=(-1)SSa-SSb×(Sa/Sb)×2Pa-Pb浮點數的除法運算可以總結為:(1)商的數符為被除數與除數的符號位的差;(2)商的階碼為被除數和除數的階碼的差;(3)商的尾數為被除數和除數的尾數的商。規格化的浮點數進行除法運算時,尾數相除,商不會小于0.5,不需進行左規格化處理。但有可能大于1,有時需進行右規格化處理。例5計算390.67÷14.3l。商的階碼為被除數與除數的階碼的差。尾數相除時,結果的最高位為1,商為規格化浮點數。例6計算-6.02÷16.157。異號相除時,商為負數。由于被除數的尾數大于除數的尾數,所以被除數先進行右規格化,階碼變為4,商的階碼為-1,用補碼來表示。4.8.4浮點數運算子程序1.浮點數通用規格化子程序在浮點數運算過程中,有時需要左規格化,有時需要右規格化。通過規格化子程序既可實現左規格化,又可實現右規格化,其具體功能如下:當Cy=0時,進行右規格化:F0=0時.對R6(階)R2R3(尾數)右規格化1位;F0=1時,對R7(階)R4R5(尾數)右規格化1位。當Cy=1時,對R6(階)R3R3(尾數)執行左規格化。程序開始時,判斷是執行左規格化還是右規格化。如果是右規格化,還要判斷是對R6(階)R2R3(尾數)還是對R7(階)R4R5(尾數)進行規格化。如果是左規格化,直至把操作數變為規格化浮點數。開始Cy=1?Cy←B34HFO=0?R2R3右移階碼+1R4R5右移階碼+1(R2R3)=0?A←(R2)R6←41HACC.7=1?階碼-1R2R3左移結束程序框圖
程序為:FSDT: JC LNORMS MOV C,39H ;進行右規格化 JB F0,NR7 MOV A,R2 ;R2R3右移一位 RRC A ;(Cy)移入尾數最高位 MOV R2,A MOV A,R3 RRC A MOV R3,A INC R6 ;階碼加1RET NR7: MOV A,R4 RRC A MOV R4,A MOV A,R5 RRC A MOV R5,A INC R7 RETLNORMS:MOV A,R7 JNZ LSHIFT CJNE R3,#00H,LSBIT8 ;尾數為0,階碼41H MOV R6,#41HLSEND: RETLSHIFT: JB ACC.7,LSENDLSBIT8: MOV C,F0 MOV A,R3 RLC A MOV R3,A MOV A,R2 RLC A MOV R2,A CLR F0 DEC R6 SJMP LNORMS2.浮點數加減運算子程序下面是三字節浮點數加、減法處理于程序,具體功能為:R6(階)R2R3(尾)±R7(階)R4R5(尾)→R4(階)R2R3(尾);當位3AH=0時,執行加法;當位3AH=1時,執行減法。YesNoNoNoYes尾數相減右規格化開始符號相同嗎?B3AH←B3AH階相同嗎?B3AH=1?尾數相加右規格化返回對階Yes圖4-14程序框圖
程序如下:FABP:MOV A,R6 MOV 38
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- XXX學校教風學風巡查工作情況匯報范文
- 企業發票管理實務培訓
- 《邯鄲講座》課件
- 《頸部疼痛的緩解》課件
- 《追尋幸福的軌跡》課件
- 醫學檢驗工作轉正總結
- 物業小區停車管理
- 管理心理學教學體系框架
- 臨床輸血安全與規范化管理培訓
- 計量管理員培訓體系構建
- 人工智能設計倫理知到智慧樹章節測試課后答案2024年秋浙江大學
- 國際機票基礎知識培訓課件
- 蒸汽疏水器原理及簡介課件
- 部編版語文四年級下冊第六單元 復習課件
- 蒸汽暖管方案
- 新中考考試平臺-考生端V2.0使用手冊
- DB12-474-2012公用紡織產品通用技術要求
- 基礎會計課件(完整版)
- 管理者的職業素養及能力
- 2022年國企集團公司職工代表大會制度國企職工代表大會提案
- 國家開放大學計算機應用基礎(本) 終結性考試試題及參考答案
評論
0/150
提交評論