版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
./目錄TOC\o"1-3"\u實驗一數(shù)據(jù)傳送 2實驗二算術(shù)運算 8實驗三代碼轉(zhuǎn)換 14實驗四程序的基本結(jié)構(gòu)練習(xí) 20實驗五存儲器〔RAM6264擴展 25實驗六可編程并行接口〔8255擴展 28實驗七可編程計數(shù)/定時器〔8253擴展 34實驗八A/D、D/A轉(zhuǎn)換 45實驗九可編程串行通信接口〔8251擴展 53.實驗一:數(shù)據(jù)傳送實驗學(xué)時:2實驗類型:驗證實驗要求:必修一.實驗?zāi)康?.學(xué)習(xí)程序設(shè)計的基本方法和技能,掌握用匯編語言設(shè)計、編寫、調(diào)試和運行程序的方法;學(xué)習(xí)用全屏幕編輯軟件QEDIT.EXE建立源程序〔.ASM文件;學(xué)習(xí)用匯編軟件MASM.EXE對源文件匯編產(chǎn)生目標(biāo)文件〔.OBJ文件;學(xué)習(xí)用連接程序LINK.EXE對目標(biāo)文件產(chǎn)生可執(zhí)行文件〔.EXE文件;學(xué)習(xí)用調(diào)試軟件TD.EXE調(diào)試可執(zhí)行文件;2.掌握各種尋址方法以及簡單指令的執(zhí)行過程。二.實驗器材PC機三.實驗組織運行要求1.利用堆棧實現(xiàn)AX的內(nèi)容與BX的內(nèi)容進行交換。堆棧指針SP=2000H,AX=3000H,BX=5000H;2.匯編、調(diào)試、觀察、記錄結(jié)果;=1\*GB2⑴用QEDIT.EXE軟件輸入?yún)R編語言源程序,以.ASM格式文件存盤;=2\*GB2⑵用MASM對源程序進行匯編產(chǎn)生二進制目標(biāo)文件〔.OBJ文件,再用連接程序LINK產(chǎn)生可執(zhí)行文件〔.EXE文件;=3\*GB2⑶用調(diào)試軟件TD調(diào)試、運行程序,觀察、記錄結(jié)果。四.實驗步驟1.進入子目錄E:>\SY86后,利用QEDIT.EXE〔簡稱Q送入以下匯編語言源程序,并以M1.ASM文件存盤⑴匯編語言程序的上機過程①進入\SY86子目錄E:>CD\SY86E:\SY86>②進入QEDIT.EXE編輯界面E:\SY86>Q③輸入文件名*.ASM〔如M1.ASM后,輸入源程序源程序DATA SEGMENT PARA PUBLIC’DATA’;數(shù)據(jù)段定義DB 512 DUP<0>DATA ENDS STACK SEGMENT PARA STACK’STACK’;堆棧段定義DB 512 DUP<
?>STACK ENDS CODE SEGMENT PARA PUBLIC’CODE’;代碼段定義 ASSUME CS
:CODE,DS
:DATA,ES:DATA,SS
:STACKMAIN PROC FAR ;定義過程程序PUSH DSMOV AX,0PUSH AXMOV AX,DATAMOV DS,AXMOVES,AXMOV SP,2000hMOV AX,3000hMOV BX,5000hPUSH AXPUSH BXPOP AXPOP BXRETMAINENDP ;結(jié)束主要部分程序CODEENDS ;結(jié)束代碼段END MAIN ;結(jié)束匯編⑵用MASM程序產(chǎn)生.OBJ文件操作如下:E:\SY86>MASMM1.ASMM1.OBJMicrosoft〔RMacroAssemblerVersion5.00Copyright〔CMicrosoftCorp1981-1985,1987.Allrightsreserved.ObjectFilename [HEXASC.OBJ]:Sourcelisting [NUL.LST]:Cross-reference [NUL.CRF]:51576+385928Bytessymbolspacefree 0WarningErrors 0SevereErrors以上說明匯編過程已經(jīng)完成。⑶用LINK程序產(chǎn)生EXE文件操作如下:E:\SY86>LINKM1.OBJMicrosoft〔ROverlayLinkerVersion3.60Copyright〔CMicrosoftCorp1983-1987.Allrightsreserved.RunFile [M1.EXE]:ListFile [NUL.MAP]:Libraries [.LIB]:E:\SY86>LINK程序輸出3個文件:.EXE文件;.LIB庫文件;.MAP列表文件。連接過程全部完成,可以執(zhí)行程序;⑷在TD狀態(tài)下用單步運行F8對M1.EXE文件進行調(diào)試,觀察、記錄結(jié)果。E:\SY86>TD進入TD調(diào)試軟件后用單步執(zhí)行F8命令從首地址開始執(zhí)行指令并觀察相應(yīng)變化。運行結(jié)果如下:―F8AX=0000BX=0000CX=000DDX=0000SP=2000BP=0000SI=0000DI=0000DS=17F7ES=17F7SS=17F7CS=17F7IP=0103NVUPDIPLNZNAPONC17F7:0103B80030 MOV AX,3000―F8AX=3000BX=0000CX=000DDX=0000SP=2000BP=0000SI=0000DI=0000DS=17F7ES=17F7SS=17F7CS=17F7IP=0106NVUPDIPLNZNAPONC17F7:0106BB0050 MOV BX,5000―F8AX=3000BX=5000CX=000DDX=0000SP=2000BP=0000SI=0000DI=0000DS=17F7ES=17F7SS=17F7CS=17F7IP=0109NVUPDIPLNZNAPONC17F7:010950 PUSH AX―F8AX=3000BX=5000CX=000DDX=0000SP=1FFEBP=0000SI=0000DI=0000DS=17F7ES=17F7SS=17F7CS=17F7IP=010ANVUPDIPLNZNAPONC17F7:010A53 PUSH BX―F8AX=3000BX=5000CX=000DDX=0000SP=1FFCBP=0000SI=0000DI=0000DS=17F7ES=17F7SS=17F7CS=17F7IP=010BNVUPDIPLNZNAPONC17F7:010B58 POP AX―F8AX=5000BX=5000CX=000DDX=0000SP=1FFEBP=0000SI=0000DI=0000DS=17F7ES=17F7SS=17F7CS=17F7IP=010CNVUPDIPLNZNAPONC17F7:010C5B POP BX―F8AX=5000BX=3000CX=000DDX=0000SP=2000BP=0000SI=0000DI=0000DS=17F7ES=17F7SS=17F7CS=17F7IP=010DNVUPDIPLNZNAPONC17F7:010DF4 HLT―2.用以上同樣的方法,完成下列程序的調(diào)試:編輯、匯編、連接、運行程序,觀察、記錄結(jié)果。=1\*GB2⑴輸入以下匯編程序〔分號";"后面內(nèi)容不需輸入用單步運行執(zhí)行程序,按分號后的要求記錄結(jié)果。源程序DATA SEGMENTPARAPUBLIC‘DATA’DATA ENDSSTACK SEGMENTPARASTACK‘STACK’DB 512DUP<?>STACK ENDSCODE SEGMENTPARAPUBLIC‘CODE’ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKSTART PROCFARPUSH DSMOV AX,0PUSH AXMOV AX,DATAMOV DS,AXMOVES,AXMOV AX,2000H ;AH=20HMOV DS,AX ;AL=00H DS=2000HMOV SS,AX ;SS=2000H AX=2000HMOV BX,2030H ;BH=20H BL=30HMOV SI,BX ;SI=2030HMOV DI,3040H ;DI=3040HMOV SI,DI ;SI=3040HMOV SP,50FFH ;SP=50FFHMOV DX,SP ;DH=50H DL=0FFHMOV CL,25 ;CL=25<19H>MOV BL,CL ;CL=19H BL=19HMOV AH,0F0H ;AH=0F0HMOV CH,AH ;CH=0F0HMOV BYTEPTR[DI],64 ;<DI>=40HMOV WORDPTR[SI],256 ;<SI>=00H <SI+1>=01HMOV DL,[SI+1] ;DL=01HMOV DH,1+[SI] ;DH=01HMOV AL,1[SI] ;AL=01HMOV WORDPTR[BX][SI],34 ;<BX+SI>=22H <BX+SI+1>=00HMOV [BX+SI+4],BL ;<BX+SI+4>=19HMOV BP,2[BX+DI] ;BP=0100HMOV [BP],AL ;<BP>=01HMOV AX,[BP][DI] ;AX=8B00HMOV BL,MOV ES,BX ;ES=2000HPUSH BX ;SP=50FDH <SP,SP+1>=2000HPUSH DI ;SP=50FBH <SP,SP+1>=3040HPOP CX ;SP=50FDH CX=3040HPOP DX ;SP=50FFH DX=2000HXCHG AX,BP ;AX=0101H BP=8B00HXCHG DH,BL ;DH=00H BL=20HLAHF ;FLAG=NVUPDIPLNZNAPONC;FLAG=00000000 ;AH=02HSAHF ;FLAG=NVUPDIPLNZNAPONC ;FLAG=00000000;AH=02HPUSHF ;SP=50FDH <SP,SP+1>=3102HPOPF ;SP=50FDH;FLAG=NVUPDIPLNZNAPONC;FLAG=00000000NOPSTART ENDPCODE ENDSEND START⑵以文件名"E2”存盤;⑶單步運行程序,每運行一條指令即檢查相應(yīng)結(jié)果并予以記錄;⑷利用斷點運行、跟蹤運行和全速運行等功能調(diào)試程序、運行程序并檢查結(jié)果?!\行結(jié)果:各寄存器及內(nèi)存變化如上。五.思考題常用的數(shù)據(jù)傳送指令有幾種類型?試歸納并舉例說明。答:常用的數(shù)據(jù)傳送指令有四種類型:1.通用數(shù)據(jù)傳送指令⑴MOVOPRD1,OPRD2例:MOVAX,2000H ;AX=2000H⑵壓棧指令——PUSHOPRD出棧指令——POPOPRD例:PUSHAX ;SP=SP-2,<SP,SP+1>=AXPOPAX ;AX=<SP,SP+1>,SP=SP+2⑶交換指令——XCHGPORD1,OPRD2例:MOVAX,02FFH MOVBP,0001HXCHGAX,BP ;AX=0001H,BP=02FFH2.累加器專用傳送指令⑴輸入、輸出指令——IN、OUT例:INAX,DX ;AX=<DX+1,DX>OUTDX,AX ;<DX+1,DX>=AX⑵換碼指令XLAT例:XLAT ;AL=<BX+AL>3.地址傳送指令⑴有效地址送寄存器——LEAREG,SRC例:LEASI,DAT1 ;SI=ADDR<DAT1>⑵指針?biāo)虳S和寄存器——LDSREG,SRC例:LDSDI,[BX] ;DI=<DS×16+BX>,DS=<DS×16+BX+2>⑶指針?biāo)虴S和寄存器——LESREG,SRC例:LESDI,[BX] ;DI=<DS×16+BX>,ES=<DS×16+BX+2>4.標(biāo)志寄存器傳送指令⑴標(biāo)志傳送指令例:LAHF ;AH←PSW的低字節(jié)SAHF ;PSW的低字節(jié)←AH⑵標(biāo)志進、出棧例:PUSHF ;SP←SP-2,<SP+1,SP>←PSWPOPF ;PSW←<SP+1,SP>,SP←SP+2實驗二:算術(shù)運算實驗學(xué)時:2實驗類型:設(shè)計實驗要求:必修一.實驗?zāi)康?.驗證算術(shù)運算基本指令;2.正確使用加、減、乘、除程序,為設(shè)計綜合算術(shù)運算程序打好基礎(chǔ);3.學(xué)習(xí)獨立編程;4.深入學(xué)習(xí)、掌握TD調(diào)試軟件的使用方法。二.實驗器材PC機三.實驗內(nèi)容及步驟1.加、減法運算⑴要求調(diào)試以下程序源程序DATA SEGMENTPARAPUBLIC‘DATA’DATA ENDSSTACKSEGMENTPARASTACK‘STACK’DB 512DUP<?>STACK ENDSCODE SEGMENTPARAPUBLIC‘CODE’ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKSTART PROCFARPUSH DSMOV AX,0PUSH AXMOV AX,DATAMOV DS,AXMOVES,AXMOV AX,2040H ;AH=20H , AL=40H, CF=0ADD AL,AH ;AH=20H , AL=60H, CF=0MOV CX,257 ;CX=0101H, CF=0MOV SI,AX ;SI=2060H,SUB SI,CX ;SI=1F5FH, CX=010H, CF=0SUB CH,CL ;CH=00H, CL=01H, CF=0ADC AX,CX ;AX=2061H, CX=0001H,CF=0MOV WORDPTR[SI],513 ;<SI,SI+1>=0201HADC[SI],AL ;<SI,SI+1>=0262H, CF=0SBB AX,[SI] ;AX=1DFFH, CF=0INC BYTEPTR[SI+1];<SI,SI+1>=0362HDEC BYTEPTR[SI] ;<SI,SI+1>=0361HDAA ;AH=1DH,AL=65H,AF=1,CF=1AAA ;AH=1EH,AL=0BH,AF=1,CF=1RETSTART ENDPCODE ENDSEND START——運行結(jié)果:各寄存器及內(nèi)存數(shù)據(jù)如上。2.加、減法程序設(shè)計⑴要求試設(shè)計、編寫程序,計算<UP1>+<UP2>-<UP3>,結(jié)果存放在DX中。如25+48-19=?其中UP1、UP2、UP3的內(nèi)容均為二位十進制數(shù),并以非壓縮BCD碼格式存入存儲器:<UP1>=0205H, <UP2>=0408H, <UP3>=0109HUP1=2050H, UP2=2150H,UP3=2250H源程序DATA SEGMENT PARA PUBLIC‘DATA’DATA ENDSSTACK SEGMENT PARA STACK‘STACK’DB 512DUP<?>STACK ENDSCODE SEGMENT PARA PUBLIC‘CODE’ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKSTART PROC FARPUSH DSMOV AX,0PUSH AXMOV AX,DATAMOV DS,AXMOVES,AXMOVAX,0000MOV DX,0000MOV SI,2050HMOV DI,2150HMOV BP,2250HMOV WORDPTR[SI],0205HMOV WORDPTR[DI],0408HMOV WORDPTR[BP],0109HMOVAL,[SI] ;送被加數(shù)低8位ADDAL,[DI] ;低8位相加AAA ;加法ASCII調(diào)整MOVDL,AL ;暫存MOVAL,[SI+1] ;送被加數(shù)高8位ADCAL,[DI+1] ;帶進位加AAA ;加法ASCII調(diào)整XCHGAL,DL ;AL與DL交換SUBAL,[BP] ;和的低8位減減數(shù)的低8位AAS ;減法ASCII調(diào)整XCHGAL,DL ;AL與DL交換,存低8位結(jié)果SBBAL,[BP+1] ;高8位帶進位減AAS ;減法ASCII調(diào)整MOVDH,AL ;存高8位結(jié)果RETSTART ENDPCODE ENDSEND START——運行結(jié)果:DX=0504H3.乘法程序設(shè)計要求:試設(shè)計、編寫程序,計算<A>×<B>。A、B表示內(nèi)存單元,分別存放著二個用非壓縮BCD碼表示的十進制數(shù)<如34、56>。內(nèi)存單元<A>=04H,<A+1>=03H,內(nèi)存單元<B>=06H,<B+1>=05H,計算結(jié)果應(yīng)為非壓縮的BCD碼表示的十進制數(shù),存放在以C為首地址的4個連續(xù)內(nèi)存字節(jié)單元中。設(shè)內(nèi)存單元A=2200H、B=2220H、C=2240H;源程序DATA SEGMENT PARA PUBLIC‘DATA’DATA ENDSSTACK SEGMENT PARA STACK‘STACK’DB 512DUP<?>STACK ENDSCODE SEGMENT PARA PUBLIC‘CODE’ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKSTART PROC FARPUSH DSMOV AX,0PUSH AXMOV AX,DATAMOV DS,AXMOVES,AXMOVAX,0MOVBX,0MOVDI,223AHMOVSI,2230HMOVAL,04H;被乘數(shù)低8位送ALMOVBL,06H;乘數(shù)低8位送BLMULBL ;相乘,AL=18H,CF=0AAM ;調(diào)整,AH=02H,AL=04HMOVWORDPTR[DI],AX ;存結(jié)果,<DI,DI+1>=04H,02HMOVAL,03H ;被乘數(shù)高8位送ALMULBL ;被乘數(shù)高8位乘以乘數(shù)低8位,AL=12H,CF=0AAM ;調(diào)整,AH=01H,AL=08HADDAL,[DI+1] ;部分積相加,AL=0AHAAA ;調(diào)整,AH=02H,AL=00H,AF=1,CF=1MOVWORDPTR[DI+1],AX ;存結(jié)果,<DI+1,DI+2>=00H,02HMOVAL,04H ;被乘數(shù)低8位送ALMOVBL,05H ;乘數(shù)高8位送BLMULBL ;相乘,AL=14HAAM ;調(diào)整,AH=02H,AL=00HMOVWORDPTR[SI],AX ;存結(jié)果,<SI,SI+1>=00H,02HMOVAL,03H ;被乘數(shù)高8位送ALMULBL ;被乘數(shù)高8位乘以乘數(shù)高8位,AL=0FHAAM ;調(diào)整,AH=01H,AL=05HADDAL,[SI+1] ;部分積相加,AL=07HAAA ;調(diào)整,AH=01H,AL=07H,AF=0,CF=0MOVWORDPTR[SI+1],AX ;存結(jié)果,<SI+1,SI+2>=07H,01HMOVAL,[DI] ;AL=04HMOVBP,2240H;乘積首址2240HMOV[BP],AL ;存積低位,<2240H>=04HMOVAL,[DI+1]ADDAL.[SI+1]AAA ;調(diào)整,AH=01H,AL=00H,AF=0,CF=0MOV[BP+1],AL ;存積低位加1,<2241H>=00HMOVAL,[DI+2] ;AL=02HADCAL,[SI+1] ;AL=09H,AF=0,CF=0AAA ;調(diào)整,AH=01H,AL=09HMOV[BP+2],AL ;存積低位加2,<2242H>=09HMOVAL,0ADCAL,[SI+2] ;AL=01H,AF=0,CF=0AAA ;調(diào)整,AH=01H,AL=01HMOV[BP+3],AL ;存積高位,<2243H>=01HRETSTART ENDPCODE ENDSEND START——運行結(jié)果:<2243H>=01H,<2242H>=09H,<2241H>=00H,<2240H>=04H;積=1904H4.除法程序設(shè)計〔選做⑴要求試設(shè)計、編寫程序,計算<A>/<B>,A、B表示內(nèi)存單元,數(shù)據(jù)自定。其中除數(shù)<B>是16位十六進制數(shù),存放在BX中;被除數(shù)<A>是32位十六進制數(shù),高16位存放在DX,低16位存放在AX中;結(jié)果為32位十六進制數(shù)的商存放在BX:AX中;16位十六進制余數(shù)存放在DX中。設(shè)置數(shù)據(jù)時如果除數(shù)等于零或者商大于16位,則應(yīng)考慮溢出處理。源程序〔避免溢出的除法程序STACK SEGMENTPARASTACK'STACK' DW 32DUP<0>STACK ENDSDATA SEGMENTPARA'DATA'DATA ENDSCODE SEGMENTPARA'CODE' ASSUMECS:CODE,DS:DATA,SS:STACKDIVUO PROCFAR PUSHDS MOVAX,0 PUSHAX MOVAX,DATA MOVDS,AX MOVAX,1FCDH ;被除數(shù)低16位 MOVDX,3B78H ;被除數(shù)高16位 MOVBX,7C9AH ;16位除數(shù) CMPBX,0 ;除數(shù)=0? JNZDVROK ;不為零,轉(zhuǎn) DIVBX ;為零,除 JMPSHORTGO_DOSDVROK: PUSHES PUSHDI PUSHCX MOVDI,0 ;取出當(dāng)前的INT0向量并保存之MOVES,DI PUSHES:[DI] PUSHES:[DI+2] LEACX,OVR_INT ;獲得INT0向量 MOVES:[DI],CXMOVCX,SEGOVR_INT MOVES:[DI+2],CXDIVBX ;做除法 SUBBX,BXRESTORE:POPES:[DI+2]
;恢復(fù)INT0向量POPES:[DI]POPCXPOPDIPOPESGO_DOS: RETOVR_INT: POPCXLEACX,RESTOREPUSHCXPUSHAXMOVAX,DXSUBDX,DXDIVBXPOPCXPUSHAXMOVAX,CXDIVBXPOPBXIRETDIVUO ENDPCODE ENDSEND DIVUO ——運行結(jié)果:商BX:AX=7A2EH,余數(shù)DX=5821H程序流程框圖開始開始YY除數(shù)為0?INT0中斷做除法NY有溢出?INT0中斷轉(zhuǎn)OVR-INT處理放除數(shù)、被除數(shù)N除數(shù)為0?INT0中斷做除法NY有溢出?INT0中斷轉(zhuǎn)OVR-INT處理放除數(shù)、被除數(shù)N結(jié)束結(jié)束四.思考題1.若對兩個帶符號的雙精度數(shù)作加、減法運算,該怎樣處理。答:如果對兩個帶符號的雙精度數(shù)作加、減法運算,則運算應(yīng)按照帶符號的加、減法考慮。2.在編寫乘法程序時,若<B>是一個帶符號非壓縮的BCD碼,則程序應(yīng)該怎樣編寫。答:如果乘數(shù)是一個帶符號非壓縮的BCD碼,則運算應(yīng)按照帶符號的乘法考慮。首先保存被乘數(shù)和乘數(shù)的符號位,正常運算后,在結(jié)果加上符號位。實驗三:代碼轉(zhuǎn)換實驗學(xué)時:2實驗類型:設(shè)計實驗要求:必修一.實驗?zāi)康?.設(shè)計常見的代碼轉(zhuǎn)換程序,通過實際操作,調(diào)試并檢驗所設(shè)計程序的正確性;2.提高獨立編程的能力。二.實驗器材PC機三.實驗內(nèi)容1.十六進制數(shù)→ASCII碼要求:試設(shè)計、編寫程序,將一個十六進制數(shù)0FBE9H轉(zhuǎn)換為ASCII碼并在屏幕上顯示出來。源程序NAME HEXASCDATA SEGMENTPARAPUBLIC'DATA'HEX DW0EBF9HASC DB20DUP<0>DATA ENDSSTACK SEGMENTPARASTACK'STACK'DB 512DUP<?>STACK ENDSCODE SEGMENTPARAPUBLIC'CODE'ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKSTARTPROCFAR PUSHDS MOVAX,0 PUSHAX MOVAX,DATA MOVDS,AXMOVES,AXMOVCX,0004H MOVAX,HEX ;取十六進制數(shù)0EBF9H LEABX,ASC AA: PUSHCXMOVCL,04H ;給循環(huán)計數(shù)器賦轉(zhuǎn)換代碼長度 ROLAX,CL ;十六進制數(shù)循環(huán)左移 PUSHAX ANDAX,000FH CMPAL,0AH ;判別是否為"0~9” ASCII ;是"0~9”轉(zhuǎn)ASCII ADDAL,07HASCII: ADDAL,30H MOVDH,AL MOVCL,04H ;給循環(huán)計數(shù)器賦轉(zhuǎn)換代碼長度 SHRDH,CL ;邏輯右移 MOVDL,AL ANDDX,0F0FH ORDX,3030H MOV[BX],DH ;<BX>=46H,<BX>=42H,<BX>=45H,<BX>=39H, INCBX MOV[BX],DL INCBX POPAX POPCXLOOPAA MOVAL,'$' MOV[BX],AL MOVAH,09H LEADX,ASC INT21H RETSTART ENDP CODE ENDS ENDSTART——在TD狀態(tài)下分別用單步執(zhí)行、全速運行對HEXASC.EXE文件進行調(diào)試、運行,結(jié)果正確;——在DOS狀態(tài)下運行可執(zhí)行文件HEXASC.EXE,結(jié)果正確。屏幕顯示:45424639。2.ASCII碼→BCD碼要求:試設(shè)計、編寫程序,完成以下功能。設(shè)有一組ASCII碼數(shù)據(jù):3332H,3537H,3946H,3239H,3642H,…,存放在起始地址為DS:150H的連續(xù)內(nèi)存單元內(nèi),數(shù)組長度存入CX。經(jīng)過轉(zhuǎn)換后的BCD碼存放在起始地址為DS:160H的連續(xù)內(nèi)存續(xù)單元內(nèi),如果待轉(zhuǎn)換的數(shù)據(jù)不是十進制數(shù)的ASCII碼,則對應(yīng)的結(jié)果單元存放"0FFH"。源程序NAMEASCBCDDATASEGMENTPARAPUBLIC'DATA'ORG0150HDATA1DW3332H,3537H,3946H,3239H,3642HORG0160HDB10DUP<?>DATAENDSSTACKSEGMENTPARASTACK'STACK'DB512DUP<?>STACKENDSCODESEGMENTPARAPUBLIC'CODE'ASSUMECS:CODE,DS:DATA,ES:DATA,SS:STACKSTARTPROCFARPUSHDSMOVAX,0PUSHAXMOVAX,DATAMOVDS,AXMOVES,AXMOVCX,0AH ;循環(huán)計數(shù)器賦轉(zhuǎn)換代碼數(shù)組長度LEADI,DATA1 ;ASCII首址送DILEASI,DATA2 ;BCD首址送SIBB:MOVBL,0FFH ;錯誤標(biāo)志BLMOVAL,[DI] ;ASCII碼送ALCMPAL,3AH ;檢查是否為大于9的ASCII碼JNBDONE ;是轉(zhuǎn)DONESUBAL,30H ;不是,取ASCII碼低4位DONE ;小于0的十進制數(shù),轉(zhuǎn)DONEMOVBL,AL ;BCD碼送BLDONE:MOVAL,BL ;錯誤標(biāo)志或結(jié)果送ALMOV[SI],AL ;轉(zhuǎn)換結(jié)果送BCD數(shù)據(jù)區(qū)INCDIINCSILOOPBB ;<CX>不為0,轉(zhuǎn)BBRETSTARTENDPCODEENDSENDSTART——運行結(jié)果:從DS:160H開始的連續(xù)內(nèi)存單元的BCD碼數(shù)據(jù)為:02,03,07,05,0FF,09,09,02,0FF,06,…。程序流程框圖開始開始ASCII首址送DIBCD首址送SIASCII首址送DIBCD首址送SI數(shù)組長度送CX數(shù)組長度送CX取待轉(zhuǎn)換數(shù)取待轉(zhuǎn)換數(shù)Y待轉(zhuǎn)換數(shù)Y待轉(zhuǎn)換數(shù)>39H?NNCX-CX-1=0?YY結(jié)束結(jié)束SI←SI+1DI←DI+1置錯誤標(biāo)志0FFHN待轉(zhuǎn)換數(shù)減30H存轉(zhuǎn)換結(jié)果SI←SI+1DI←DI+1置錯誤標(biāo)志0FFHN待轉(zhuǎn)換數(shù)減30H存轉(zhuǎn)換結(jié)果3.BCD碼→二進制要求:試設(shè)計、編寫程序,完成以下功能。有一組非壓縮的BCD碼數(shù)據(jù)存放在起始地址為DS:180H的連續(xù)內(nèi)存單元內(nèi),數(shù)組長度存入CX。經(jīng)過轉(zhuǎn)換后的二進制數(shù)存放在起始地址為DS:190H的連續(xù)內(nèi)存單元內(nèi)。非壓縮的BCD碼數(shù)據(jù)如下:0802,0103,0009,0706,0407,…。源程序NAMEBCD2DATASEGMENTORG0180HDAT1DW0802H,0103H,0009H,0706H,0407HORG0190HDAT2DB10DUP<?>DATAENDSSTACKSEGMENTPARASTACK'STACK'DB512DUP<?>STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,ES:DATA,SS:STACKSTARTPROCFARPUSHDSMOVAX,0PUSHAXMOVAX,DATAMOVDS,AXMOVES,AXMOVCX,05H ;循環(huán)計數(shù)器賦轉(zhuǎn)換代碼長度LEADI,DAT1 ;BCD碼首址送DI LEASI,DAT2 ;二進制首址送SIXL: MOVAL,[DI+1] ;BCD碼十位數(shù)值賦ALMOVBL,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 教學(xué)樓室內(nèi)裝修協(xié)議模板
- 家庭護理保姆服務(wù)合同樣本
- 辦公空間色彩搭配合同范本
- 咖啡店店員招聘協(xié)議書
- 城市文化中心地暖工程承包合同
- 環(huán)境保護企業(yè)消防整改施工合同
- 化工廠彩鋼板翻新合同
- 勞動報酬零花錢協(xié)議
- 消防工程發(fā)包合同
- 常州乒乓球館租賃合同
- 工程質(zhì)量檢測論文范文10篇
- 【真題解析】2023年2月26日河南省直遴選筆試真題(考生回憶版)
- 《企業(yè)采購成本控制現(xiàn)狀、問題及對策研究-以伊利乳業(yè)集團為例(論文)10000字》
- 中華醫(yī)學(xué)會雜志社作者貢獻聲明
- 國開電大本科《人文英語4》機考總題庫珍藏版
- 腮腺疾病圍手術(shù)期護理查房
- 學(xué)生假期安全承諾書200字(5篇)
- 血液透析個案護理兩篇
- GB/T 37814-2019綜采綜放工作面遠(yuǎn)距離供電系統(tǒng)技術(shù)規(guī)范
- 高中通用技術(shù)《技術(shù)試驗及其方法》公開課課件
- PSSR試車前的安全檢查
評論
0/150
提交評論