實(shí)驗(yàn)6有關(guān)雙精度數(shù)據(jù)運(yùn)算及邏輯運(yùn)算、移位程序_第1頁(yè)
實(shí)驗(yàn)6有關(guān)雙精度數(shù)據(jù)運(yùn)算及邏輯運(yùn)算、移位程序_第2頁(yè)
實(shí)驗(yàn)6有關(guān)雙精度數(shù)據(jù)運(yùn)算及邏輯運(yùn)算、移位程序_第3頁(yè)
實(shí)驗(yàn)6有關(guān)雙精度數(shù)據(jù)運(yùn)算及邏輯運(yùn)算、移位程序_第4頁(yè)
實(shí)驗(yàn)6有關(guān)雙精度數(shù)據(jù)運(yùn)算及邏輯運(yùn)算、移位程序_第5頁(yè)
已閱讀5頁(yè),還剩4頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、 實(shí)驗(yàn)6 自編有關(guān)雙精度數(shù)據(jù)運(yùn)算及邏輯運(yùn)算、移位程序一、實(shí)驗(yàn)內(nèi)容:自編有關(guān)雙精度數(shù)據(jù)、BCD碼數(shù)據(jù)算術(shù)運(yùn)算、邏輯運(yùn)算、移位運(yùn)算程序段,和供參考的數(shù)據(jù)轉(zhuǎn)換、顯示程序段組合成完整程序,上機(jī)實(shí)現(xiàn)并驗(yàn)證。二、實(shí)驗(yàn)?zāi)康模?. 學(xué)習(xí)雙精度數(shù)運(yùn)算程序設(shè)計(jì)方法。 2.學(xué)習(xí)壓縮BCD碼與非壓縮BCD碼數(shù)據(jù)運(yùn)算程序設(shè)計(jì)方法。 3. 熟悉邏輯運(yùn)算、移位運(yùn)算指令內(nèi)容與使用方法,學(xué)習(xí)用這些指令解決實(shí)際問題的方法。 4. 熟悉常見的算術(shù)運(yùn)算、邏輯運(yùn)算、移位運(yùn)算程序設(shè)計(jì)方法。 5. 學(xué)習(xí)1號(hào)、2號(hào)、9號(hào)DOS系統(tǒng)功能調(diào)用的使用方法 6. 復(fù)習(xí)數(shù)據(jù)轉(zhuǎn)換程序與顯示程序設(shè)計(jì)方法 7. 學(xué)習(xí)將多個(gè)程序段拼湊設(shè)計(jì)程序的方法三、實(shí)驗(yàn)題

2、目在題目之后給出了一些供參考的經(jīng)常用到的顯示與計(jì)算的程序段,請(qǐng)參考這些程序段完成以下程序設(shè)計(jì)并上機(jī)驗(yàn)證。1. 設(shè)數(shù)據(jù)區(qū)有雙精度數(shù)據(jù)A、B 定義例如:A DD 2A3D0B2CH B DD 2573ADEH 求自編程序,計(jì)算A與B的和與差, 并用十六進(jìn)制和二進(jìn)制形式分別顯示。2. 自編程序,任意設(shè)AX的值,求將其中1、3、5位清0,2、4、9位置1,6、7位求反。分別用二進(jìn)制形式顯示原數(shù)據(jù)及處理后的數(shù)據(jù)。(參考實(shí)驗(yàn)5參考實(shí)驗(yàn)段)3. 自編程序,任意設(shè)4位壓縮BCD碼數(shù)據(jù)放到AX中,求用移位方法及2號(hào)DOS中斷顯示其值。(參考實(shí)驗(yàn)5參考實(shí)驗(yàn)段)4. 設(shè)數(shù)據(jù)區(qū)有壓縮BCD碼數(shù)據(jù)A、B 定義例如:A

3、DW 2937H B DW 877H 求自編程序,計(jì)算A與B的和,并用十進(jìn)制形式顯示。5. 設(shè)數(shù)據(jù)區(qū)有非壓縮BCD碼數(shù)據(jù)A、B 定義例如:A DW 0907H B DW 0807H 求自編程序,計(jì)算A與B的和,并用十進(jìn)制形式顯示。6. 設(shè)計(jì)求兩個(gè)二位壓縮BCD碼的乘積(用壓縮BCD碼表示)的程序。(例如86H*39H,結(jié)果為3354H)分析:本題有二種求解方法:(1)根據(jù)AB等于B個(gè)A相加,從0起逐次加A,注意每次加后要進(jìn)行十進(jìn)制調(diào)整。按B的大小計(jì)加的次數(shù),可以將一個(gè)數(shù)從B起遞減1直到0,每減1,就加一次A,注意B是壓縮BCD碼,每減1后也要調(diào)整。還要注意的是,A和B均為二位BCD碼,相乘乘積

4、可能為四位BCD碼,每次加A都要先加低8位,調(diào)整;再帶進(jìn)位加高8位并調(diào)整。(2)首先求出二個(gè)二位的壓縮BCD碼實(shí)際代表的數(shù)值(二進(jìn)制數(shù)),再做乘法,最后求其壓縮BCD碼。求二位壓縮BCD碼的二進(jìn)制數(shù)值的方法是先將其看成是高8位為0的字,左移4位,使拾位上的數(shù)碼移到高8位中,再將低8位右移4位還原,變成非壓縮BCD碼;將高8位的值(原拾位上的數(shù)碼)乘10后加上低8位數(shù)值,就得到原二位的壓縮BCD碼實(shí)際代表的數(shù)值。非壓縮BCD碼變成原二位的壓縮BCD碼所實(shí)際代表的數(shù)值也可以利用除法調(diào)整指令A(yù)AD完成。求二進(jìn)制的乘積的壓縮BCD碼的方法是設(shè)法得到壓縮BCD碼的4個(gè)十進(jìn)制數(shù)字,再拼接得到結(jié)果。求壓縮B

5、CD碼的4個(gè)十進(jìn)制數(shù)字可以用除10取余法得到,但要注意的是,第一次直接除10時(shí)可能出現(xiàn)溢出錯(cuò),可以先除100,先分別得到結(jié)果的千、百二位與拾、個(gè)兩位,之后再分別求壓縮BCD碼。前一種解法采用循環(huán),運(yùn)算部分語(yǔ)句條數(shù)可以減少到19句,但效率不如后一種解法高。本手冊(cè)給出了第二種解法的程序代碼,請(qǐng)考慮第一種解法的程序設(shè)計(jì)方法。7. 設(shè)計(jì)求四位壓縮BCD碼除以二位壓縮BCD碼表示的程序。(例如8390H29H,結(jié)果為289H余9)分析:本題同樣有二種求解方法:(1)根據(jù)AB等于A足夠減B的次數(shù),從A中累次減B,只要夠減就將次數(shù)加1,不夠減了所剩余數(shù)為余數(shù)。注意每次減后要進(jìn)行十進(jìn)制調(diào)整。減的次數(shù)加1的數(shù)據(jù)

6、先按二進(jìn)制數(shù)計(jì),該數(shù)據(jù)可能大于255。要注意的是,A為四位壓縮BCD碼,每次減B都要先減低8位,調(diào)整;再帶借位將高8位減0并調(diào)整。完成后竟商與余數(shù)分別變成壓縮BCD碼(2)首先求出二個(gè)壓縮BCD碼實(shí)際代表的數(shù)值(二進(jìn)制數(shù)),再做除法,最后求商與余數(shù)的壓縮BCD碼。求四位壓縮BCD碼的二進(jìn)制數(shù)值的方法是分別將高8位壓縮BCD碼與低8位壓縮BCD碼分別變成二進(jìn)制數(shù),在將高8位的數(shù)乘100后加低8位的數(shù),注意結(jié)果類型為字類型。8. 設(shè)數(shù)據(jù)區(qū)有雙精度數(shù)據(jù)A=2A3D0B2CH、B= 2573ADEH,其存儲(chǔ)情況如下所示。求自編程序,計(jì)算A與B的積,放到數(shù)據(jù)區(qū)的X1,X2,X3,X4四個(gè)字單元中,再求用

7、十六進(jìn)制形式顯示。 A1 DW 2A3DH A2 DW 0B2CH B1 DW 257H B2 DW 3ADEH X1 DW 0 X2 DW 0 X3 DW 0 X4 DW 0 提示:如上數(shù)據(jù)區(qū)有字變量X1,X2,X3,X4;初值均為0;X1準(zhǔn)備存結(jié)果的最高16位;X4準(zhǔn)備存結(jié)果的最低16位;將A看成A1,A2;A1為高16位,A2為低16位;同樣,B看成B1,B2。 那么,可以將B2與A2的積加到X3,X4中;將B2與A1的積加到X2,X3中;將B1與A2的積加到X2,X3中;將B1與A1的積加到X1,X2中;注意進(jìn)位。9. 設(shè)數(shù)據(jù)區(qū)有雙精度數(shù)據(jù)A、字類型數(shù)據(jù)B ,求自編程序,計(jì)算A/B的商

8、與余數(shù),各用十進(jìn)制形式顯示。10. 設(shè)數(shù)據(jù)區(qū)有雙精度數(shù)據(jù)A、B ,求自編程序,計(jì)算A/B的商與余數(shù)。,各用十進(jìn)制形式顯示。 提示:方法1:將DX AX清0,準(zhǔn)備存結(jié)果;將BX CX清0,存中間結(jié)果;將DI清0作為標(biāo)志;將A左移一位到BX CX中,將DI加1,將DX AX左移1位;如果BX CX大于B,將BX CX減去B,同時(shí)將DX AX加1;循環(huán)到DI等于32為止。 方法2:用減法求解。將DX AX清0,準(zhǔn)備存結(jié)果;只要AB,就將A減B,每減一次,將DX AX加1;到AB為止。此時(shí),DX AX中為商,A中值為余數(shù)。供參考的程序段:(1) 假設(shè)數(shù)據(jù)區(qū)中有如下定義,求字類型數(shù)據(jù)A1與字類型數(shù)據(jù)B1

9、相乘后結(jié)果加到變量X1,X2中的程序段,設(shè)X1中存放高16位。 A1 DW 123H B1 DW 2A4BH X1 DW 0 X2 DW 0程序如下: MOV AX,A1 MUL B1 MOV X1,DX MOV X2,AX (2) 以二進(jìn)制形式顯示任意字符的ASCII碼(要求在數(shù)據(jù)區(qū)設(shè)置A,DB類型) MOV BL,A ;取要顯示的字符到BL中 MOV CL,8 NEXT: MOV DL,0 SAL BL,1 RCL DL,1 ADD DL,30H MOV AH,2 INT 21H DEC CL JNE NEXT(3) 二進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù)。要求在數(shù)據(jù)區(qū)設(shè)置BUF DB 10 DUP(0)

10、和D0,例如 D0 DW 1234 MOV DI,OFFSET BUF+10 ;到存儲(chǔ)區(qū)尾部 DEC DI ;到上一單元 MOV DI,BYTE PTR $ ;9號(hào)功能調(diào)用要顯示內(nèi)容最后加$表示字串結(jié)束 MOV AX,D0 ;取要用來變十進(jìn)制數(shù)的數(shù)到AX MOV BX,10 ;準(zhǔn)備除以10CHANGE10: DEC DI ;到上一單元 MOV DX,0 ;將除數(shù)的高16位(在DX中)清0,DX也將用來存放余數(shù) DIV BX ;DX,AX除以BX (BX=10) ADD DL,30H ;余數(shù)變?yōu)锳SCII碼值 MOV BYTE PTRDI,DL ;存儲(chǔ)十進(jìn)制數(shù) CMP AX,0 ;是否為0? J

11、NZ CHANGE10 ;不為0轉(zhuǎn)CHANGE10 CHANGE11: MOV DX,DI ;取出存放在BUF中的ASCII碼形式的十進(jìn)制數(shù)首地址到DX中供顯示 MOV AH,9 ;顯示十進(jìn)制數(shù) INT 21H(4) 二進(jìn)制數(shù)轉(zhuǎn)換為壓縮型BCD碼,要求在數(shù)據(jù)區(qū)有ASC_BUF數(shù)據(jù),DB類型,共16個(gè)單元,要轉(zhuǎn)換的數(shù)據(jù)要放到DX中。 MOV DI,OFFSET BCD_BUFCHG_BCD1:MOV AX,DX ;轉(zhuǎn)換開始 MOV DX,0 MOV CX,10 DIV CX MOV BL,DL MOV DX,0 MOV CX,10 DIV CX MOV CL,4 SHL DL,CL ;左移4位,

12、等效于乘以16 AND DL,0F0H OR DL,BL ;組合壓縮型BCD碼 MOV DI,DL ;存儲(chǔ)BCD碼 INC DI MOV DX,AX CMP DX,0 JNZ CHG_BCD1(5) 壓縮型BCD碼轉(zhuǎn)換為二進(jìn)制數(shù),要轉(zhuǎn)換的數(shù)據(jù)要放到DX中。 MOV CX,4 ;BCD碼共4位CHG_AGAIN1:MOV DI,0 PUSH CX MOV CX,4 ;每個(gè)BCD碼對(duì)應(yīng)四位2進(jìn)制數(shù)CHG_AGAIN2:SHL SI,1 ;SI左移,最高位送CF RCL DI,1 ;CF最高位送DI DEC CX JNZ CHG_AGAIN2 ;將某位BCD碼送DI MOV CX,10 MUL CX

13、 ADD AX,DI ;二進(jìn)制數(shù)合并 POP CX DEC CX JNZ CHG_AGAIN1 (6) 壓縮型BCD碼的加法運(yùn)算 MOV AL,X ;例如x68H,表示壓縮BCD碼68 MOV BL,Y ;例如y28H,表示壓縮BCD碼28 ADD AL,BL ;二進(jìn)制加法:AL68H28H90H DAA ;十進(jìn)制調(diào)整:AL96H;實(shí)現(xiàn)壓縮BCD碼加法:682896(7) 單字節(jié)壓縮BCD碼的減法運(yùn)算 MOV AL,X ;例如x:AL68H,表示壓縮BCD碼68 MOV BL,Y ;例如y:BL28H,表示壓縮BCD碼28 SUB AL,BL ;二進(jìn)制減法:AL68H28H40H DAS ;十

14、進(jìn)制調(diào)整:AL40H ;實(shí)現(xiàn)壓縮BCD碼減法:682840(8) 單字壓縮BCD碼的減法運(yùn)算;已知AX1234H、BX4612H,計(jì)算12344612的差 SUB AL,BL DAS XCHG AL,AH SBB AL,BH DAS XCHG AL,AH ;AX6622H,CF1(9) 非壓縮BCD碼的加法運(yùn)算 MOV AX,W1 ;W1:例如0608H,表示非壓縮BCD碼68 MOV BL,W2 ;W2:例如BL09H,表示非壓縮BCD碼9 ADD AL,BL ;二進(jìn)制加法:AL08H09H11H AAA ;十進(jìn)制調(diào)整:AX0707H ;實(shí)現(xiàn)非壓縮BCD碼加法:68977(10) 非壓縮BC

15、D碼的減法運(yùn)算 MOV AX,W1 ;例如AX0608H,表示非壓縮BCD碼68 MOV BL,W2 ;例如BL09H,表示非壓縮BCD碼9 SUB AL,BL ;二進(jìn)制減法:AL08H09HFFH AAS ;十進(jìn)制調(diào)整:AX0509H ;實(shí)現(xiàn)非壓縮BCD碼減法:68959;AAA和AAS這兩條指令影響AF和CF標(biāo)志位,而對(duì)其余標(biāo)志位均無(wú)定義。(11) 一位非壓縮BCD碼的乘法運(yùn)算 MOV AL,x ;例如AL08H,表示非壓縮BCD碼8 MOV BL,y ;例如BL09H,表示非壓縮BCD碼9 MUL BL ;二進(jìn)制乘法:AX08H09H0048H AAM ;十進(jìn)制乘法:AX0702H ;實(shí)

16、現(xiàn)(16)非壓縮BCD碼乘法:8972(12) 非壓縮BCD碼的除法運(yùn)算 MOV AX,W1 ;例如AX0608H,表示非壓縮BCD碼68 MOV BL,W2 ;例如BL09H,表示非壓縮BCD碼9 AAD ;二進(jìn)制擴(kuò)展:AX680044H DIV BL ;除法運(yùn)算:商AL07H,余數(shù)AH05H ;實(shí)現(xiàn)非壓縮BCD碼乘法:68795(13) 兩個(gè)二位壓縮BCD碼的乘積(用壓縮BCD碼表示)。DATA SEGMENT A DW 86H B DW 39H C DW 0DATA ENDSSTACK SEGMENT STACK DB 200 DUP(0)STACK ENDSCODE SEGMENT A

17、SSUME DS:DATA,SS:STACK,CS:CODESTART:MOV AX,DATA MOV DS,AX MOV CL,4 SHL A,CL ;準(zhǔn)備求A與B的二進(jìn)制數(shù)據(jù)值,A左移4位 SHL B,CL SHR BYTE PTR A,CL ;A的低8位右移4位,變成非壓縮BCD碼 SHR BYTE PTR B,CL MOV AX,A AAD ;利用除法調(diào)整指令將非壓縮BCD碼變成二進(jìn)制數(shù) MOV BL,AL ;變成的二進(jìn)制數(shù)放到BL中作乘數(shù) MOV AX,B ;再求B的二進(jìn)制數(shù)值 AAD MUL BL ;A的二進(jìn)制數(shù)值與B的二進(jìn)制數(shù)值相乘,在AX中 MOV BL,100 ;準(zhǔn)備除100

18、分離出結(jié)果的千、百兩位 DIV BL MOV CH,AH ;除100的余數(shù)為拾、個(gè)兩位暫存CH中 MOV AH,0 MOV BL,10 ;除100的商為千、百兩位,準(zhǔn)備除10進(jìn)一步分開 DIV BL SHL AL,CL ;除10的商為千位左移4位在AL中 ADD AL,AH ;千位加除10的余數(shù)(百位)在AL中 MOV BYTE PTR C,AL ;存千、百兩位 MOV AL,CH ;取CH中保存的拾、個(gè)兩位 MOV AH,0 DIV BL SHL AL,CL ;除10的商為拾位左移4位在AL中 ADD AL,AH ;拾位加除10的余數(shù)(個(gè)位)在AL中 MOV BYTE PTR C+1,AL

19、;存拾、個(gè)兩位 MOV AH,4CH INT 21H CODE ENDS END START (14)設(shè)計(jì)求四位壓縮BCD碼除以二位壓縮BCD碼表示的程序。(例如8390H29H,結(jié)果為289H余9);將opr1中的二位壓縮BCD碼變?yōu)槎M(jìn)制數(shù)程序;結(jié)果存放在字節(jié)類型變量或寄存器opr2中;要求opr1為字節(jié)類型變量或寄存器COMPTOB MACRO opr1,opr2 PUSH AX PUSH CX MOV CL,4 MOV AL,opr1 ;取欲變的BCD碼 MOV AH,0 ;高8位清0 SHL AX,CL ;全字左移4位 SHR AL,CL ;低8位右移4位 AAD ;非壓縮BCD碼變

20、二進(jìn)制數(shù) MOV opr2,AL ;保存變換結(jié)果 POP CX POP AX ENDM ;將opr1中的字類型二進(jìn)制數(shù)變成壓縮BCD碼程序;結(jié)果存放在字類型變量或寄存器opr2中;要求opr1為字類型變量或寄存器BTOCOMP MACRO opr1,opr2 PUSH AX PUSH BX PUSH CX MOV CL,4 MOV AX,opr1 MOV BL,100 ;準(zhǔn)備除100分離出結(jié)果的千、百兩位 DIV BL MOV CH,AH ;除100的余數(shù)為拾、個(gè)兩位暫存CH中 MOV AH,0 MOV BL,10 ;除100的商為千、百兩位,準(zhǔn)備除10進(jìn)一步分開 DIV BL SHL AL,

21、CL ;除10的商為千位左移4位在AL中 ADD AL,AH ;千位加除10的余數(shù)(百位)在AL中 MOV BYTE PTR opr2,AL ;存千、百兩位 MOV AL,CH ;取CH中保存的拾、個(gè)兩位 MOV AH,0 DIV BL SHL AL,CL ;除10的商為拾位左移4位在AL中 ADD AL,AH ;拾位加除10的余數(shù)(個(gè)位)在AL中 MOV BYTE PTR opr2+1,AL ;存拾、個(gè)兩位 POP CX POP BX POP AX ENDM DATA SEGMENT A DW 8390H B DB 29H C DW 0 D DW 0DATA ENDSSTACK SEGMENT STACK DB 200 DUP(0)STACK ENDSCODE SEGMENT ASSUME DS:DATA,SS:STACK,CS:CODESTART:MOV AX,DATA MOV DS,AX COMPTOB ,BL ;取A的高二個(gè)字變換為二進(jìn)制數(shù) MOV AL,100 MUL BL ;乘10

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論