版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第6章匯編語(yǔ)言程序設(shè)計(jì)
用匯編語(yǔ)言編程屬結(jié)構(gòu)化程序設(shè)計(jì)。需按照結(jié)構(gòu)化的思想來(lái)進(jìn)行匯編程序的設(shè)計(jì)分析題意,確定算法根據(jù)算法畫(huà)出程序框圖根據(jù)框圖編寫(xiě)程序上機(jī)調(diào)試程序執(zhí)行程序按照自上而下的設(shè)計(jì)方法,設(shè)計(jì)一個(gè)匯編程序的步驟:順序程序分支程序循環(huán)程序從結(jié)構(gòu)上來(lái)講,一般的匯編程序可分為: .486DATASEGMENTUSE16
BUF DB ?DATAENDS源程序清單:CODE SEGMENTUSE16 ASSUME CS:CODE,DS:DATABEG: MOV AX,DATA MOV DS,AX MOV AH,1 INT 21H;AL=鍵入字符的 MOV BUF,ALASIIC碼 MOV AH,4CH INT 21HCODE ENDS END BEG
分支程序設(shè)計(jì)
轉(zhuǎn)移指令可用來(lái)實(shí)現(xiàn)分支程序設(shè)計(jì)分支程序分三種:簡(jiǎn)單分支
復(fù)合分支多分支
簡(jiǎn)單分支即兩路分支,該分支程序結(jié)構(gòu)為:條件滿足否?程序段1程序段2YN·486CODESEGMENTUSE16ASSUME
CS:CODEBEG:MOVBX,5678HMOVCX,16LAST:MOVAL,’0’ROLBX,1JNCNEXT
MOVAL,’1’NEXT:MOVAH,0EH
INT10HLOOPLASTMOVAH,4CHINT21H
CODEENDSENDBEGADCAL,0數(shù)→BX,16→CXC標(biāo)=?‘1’→AL調(diào)BIOS.0EHCX-1→CXCX=0‘0’→ALBX左移一位10NY返DOS源程序清單:復(fù)合分支判斷的條件是復(fù)合條件,稱復(fù)合判斷復(fù)合分支程序結(jié)構(gòu)為:條件1和條件2...滿足否?程序段1程序段2YNEg:某科室9人,統(tǒng)計(jì)月收入在800~900間的人數(shù),并用十進(jìn)制數(shù)顯示
復(fù)合分支
分析:月收入是無(wú)符號(hào)數(shù),對(duì)一批數(shù)處理應(yīng)該用間址。數(shù)軸:··
N1(800)N2(900)
例.多分支段內(nèi)轉(zhuǎn)移要求:鍵入0,轉(zhuǎn)P0程序段鍵入1,轉(zhuǎn)P1程序段……鍵入9,轉(zhuǎn)P9程序段思路:①用比較指令配合直接轉(zhuǎn)移指令實(shí)現(xiàn)CMP鍵入字符,‘0’JEP0CMP鍵入字符,‘1’JEP1……
②用轉(zhuǎn)移地址表配合間接轉(zhuǎn)移指令實(shí)現(xiàn)
多分支
·486DATASEGMENTUSE16TABDWP0,P1,…,P9;匯編后自動(dòng)裝入相應(yīng)的偏移地址MESGDB0DH,0AH,’strike0~9:$’DATAENDSCODESEGMENTUSE16ASSUMECS:CODE,DS:DATABEG:MOVAX,DATAMOVDS,AXAGA:MOVAH,9MOVDX,OFFSETMESGINT21HMOVAH,1INT21HCMPAL,’0’JCAGACMPAL,’9’JAAGASUBAL,30HMOVZXBX,ALADDBX,BX;2×BX→BXMOVSI,OFFSETTABJMP[BX+SI];DS:[BX+SI]→IPP0:…P1:………P9:…CODEENDSENDBEG或:MOVBX,[BX+SI]JMPBX;BX→IP源程序清單:
循環(huán)程序設(shè)計(jì)循環(huán)程序的組成:循環(huán)準(zhǔn)備
循環(huán)體循環(huán)控制Eg:假設(shè)從BUF單元開(kāi)始為一個(gè)ASCII碼字符串,找出其中的最大數(shù)送屏幕顯示。循環(huán)程序設(shè)計(jì)思路:ASCⅡ碼數(shù)為無(wú)符號(hào)數(shù),無(wú)符號(hào)數(shù)的最小數(shù)為0YNN數(shù)據(jù)區(qū)首址→DS:BX無(wú)符號(hào)最小數(shù)→AL數(shù)據(jù)個(gè)數(shù)→CX[BX]→AL[BX]>=AL?BX+1→BXCX-1→CX顯示結(jié)果返回DOSCX=0?Y·486DATASEGMENTUSE16BUFDB'QWERTYUIOP123'
COUNTEQU$-BUF;統(tǒng)計(jì)串長(zhǎng)度MAXDB'MAX=',?,0DH,0AH,'$'DATAENDSCODESEGMENTUSE16ASSUMECS:CODE,DS:DATABEG:MOVAX,DATAMOVDS,AXMOVAL,0
;無(wú)符號(hào)最小數(shù)0→ALLEABX,BUF
;串首址偏移量→BX
MOVCX,COUNT
;串長(zhǎng)度→CX
LAST:CMP[BX],AL;比較JCNEXTMOVAL,[BX];大數(shù)→ALNEXT:INCBXLOOPLAST;循環(huán)計(jì)數(shù)MOVMAX+4,AL;最大數(shù)→MAX+4單元MOVAH,9MOVDX,OFFSETMAXINT21H;顯示結(jié)果MOVAH,4CHINT21H;返回DOSCODEENDSENDBEG
源程序清單1:
·486DATASEGMENTUSE16BUFDB'QWERTYUIOP123'FLAGDB-1
;設(shè)置串結(jié)束標(biāo)志MAXDB'MAX=',?,0DH,0AH,'$'DATAENDSCODESEGMENTUSE16ASSUMECS:CODE,DS:DATABEG:MOVAX,DATAMOVDS,AXMOVAL,0
;無(wú)符號(hào)最小數(shù)0→ALLEABX,BUF
;串首址偏移量→BXLAST:CMPBYTEPTR[BX],-1
;[BX]=串結(jié)束標(biāo)志?JEDISP;是,轉(zhuǎn)CMP[BX],ALJCNEXTMOVAL,[BX]
;大數(shù)→ALNEXT:INCBXJMPLASTDISP:MOVMAX+4,AL
;最大數(shù)→MAX+4單元MOVAH,9MOVDX,OFFSETMAXINT21H;顯示結(jié)果MOVAH,4CHINT21H;返回DOSCODEENDSENDBEG
源程序清單2:代碼轉(zhuǎn)換常見(jiàn)的代碼轉(zhuǎn)換有:二進(jìn)制數(shù)→顯示二進(jìn)制數(shù)→十進(jìn)制數(shù)→顯示二進(jìn)制數(shù)→十六進(jìn)制數(shù)→顯示BCD碼數(shù)→二進(jìn)制數(shù)代碼轉(zhuǎn)換A二進(jìn)制數(shù)顯示:例.把鍵盤輸入的一位數(shù)(0~9),轉(zhuǎn)換成等值二進(jìn)數(shù)顯示顯示的格式要求如下:PleaseEnter:ERROR!PleaseEnter:9=00001001B程序框圖:AL-30H→BL‘=’→屏幕,8→CX‘0’→屏幕‘1’→屏幕CX-1→CX‘B’→屏幕,返回DOSNN給出操作提示鍵盤輸入→ALAL=‘0’~’9’?CF=?CX=0?BL左移一位Y顯示錯(cuò)誤信息
Y01.486DATASEGMENTUSE16MESG1DB'PleaseEnter!',0DH,0AH,'$'MESG2DB‘------Error!$'DATAENDSCODESEGMENTUSE16ASSUMECS:CODE,DS:DATABEG:MOVAX,DATAMOVDS,AXMOVAH,9MOVDX,OFFSETMESG1INT21H;顯示操作提示MOVAH,1INT21H;等待鍵入CMPAL,3AHJNCERROR;>'9'轉(zhuǎn)CMPAL,30H[EXE格式程序清單]JC
ERROR;<'0'轉(zhuǎn)SUBAL,30HMOVBL,AL
;BL=0~9的二進(jìn)制數(shù)MOVAH,2MOVDL,'='INT21HCALLDISPMOVAH,2MOVDL,'B'INT21HJMPEXITERROR:MOVAH,9MOVDX,OFFSETMESG2INT21H
;顯示錯(cuò)誤信息EXIT:MOVAH,4CHINT21H;---------------------------------DISPPROC;顯示BL中的二進(jìn)制數(shù)MOVCX,8LAST:MOVDL,'0'RCLBL,1JNCNEXTMOVDL,'1'NEXT:MOVAH,2INT21HLOOPLASTRETDISPENDPCODEENDSENDBEG[EXE格式程序清單];-------------------------------DISPPROC;顯示BL中的二進(jìn)制數(shù)MOVCX,8LAST:MOVDL,'0‘RCLBL,1JNCNEXTMOVDL,'1'NEXT:MOVAH,2INT21HLOOPLASTRETDISPENDPCODEENDSENDSTART[COM格式程序清單]問(wèn)題:鍵入的是兩位十進(jìn)制數(shù)時(shí),如何將該十進(jìn)制數(shù)的二進(jìn)制數(shù)顯示在屏幕上?代碼轉(zhuǎn)換二.二進(jìn)制數(shù)→十六進(jìn)制數(shù)顯示算法:四位二進(jìn)制數(shù)等值的十六進(jìn)制數(shù)十六進(jìn)制數(shù)ASCⅡ碼算法0000~10011010~11110~9A~F30H~39H41H~46H四位二進(jìn)制數(shù)+30H=等值的十六進(jìn)制數(shù)ASCⅡ碼四位二進(jìn)制數(shù)+37H=等值的十六進(jìn)制數(shù)ASCⅡ碼代碼轉(zhuǎn)換編程技巧:8位二進(jìn)制數(shù)截取高4位顯示顯示截取低4位XXXXXXXXXXXX0000XXXX000016進(jìn)制數(shù)ASCⅡ碼16進(jìn)制數(shù)ASCⅡ碼代碼轉(zhuǎn)換例.設(shè)從BNUM單元開(kāi)始,有4個(gè)16位的二進(jìn)制數(shù),要求把它們轉(zhuǎn)換成16進(jìn)制數(shù),并送屏幕顯示。
[程序清單].486DATASEGMENTUSE16BNUMDW10100B;1234HDW11000B;5678HDW01011B;1A2BHDW01101B;3C4DHBUFDB4DUP(?),‘H$’;輸出緩沖區(qū)COUNTDB4DATAENDSCODESEGMENTUSE16ASSUMECS:CODE,DS:DATABEG:MOVAX,DATAMOVDS,AXMOVCX,4MOVBX,OFFSETBNUMAGA:MOVDX,[BX]
SALEDX,16
CALLN2_16ASCMOVAH,9MOVDX,OFFSETBUFINT21H
;顯示一個(gè)16進(jìn)數(shù)ADDBX,2;地址加2LOOPAGAMOVAH,4CHINT21H;二進(jìn)數(shù)→十六進(jìn)數(shù)ACSII碼N2_16ASCPROCMOVSI,OFFSETBUF
;輸出緩沖區(qū)地址→SIMOVCOUNT,4LAST:ROLEDX,4
ANDDL,0FHCMPDL,10JCNEXTADDDL,7NEXT:ADDDL,30HMOV[SI],DLINCSI;地址加1DECCOUNT;計(jì)數(shù)JNZLASTRETN2_16ASCENDPCODEENDSENDBEG[EXE格式程序清單]代碼轉(zhuǎn)換三.BCD碼→二進(jìn)制數(shù)例.4位BCD碼數(shù)→二進(jìn)制數(shù)顯示算法:設(shè)4位BCD碼數(shù)列為:N3N2N1N0,等值二進(jìn)制數(shù)=N3×1000+N2×100+N1×10+N0=(((0×10+N3)×10+N2)×10+N1)×10+N0編程考慮:4位BCD碼最大為9999H,等值的二進(jìn)制數(shù)最大為16位(超過(guò)8位),而且D15位肯定為0分離出BCD千位N3,百位N2,十位N1,個(gè)位N0設(shè)計(jì)一個(gè)AX×10+BX→AX的子程序供調(diào)用,首次調(diào)用時(shí),令A(yù)X=0,BX=N3,共調(diào)用4次,則AX中即為等值的二進(jìn)制數(shù)?!?86CODESEGMENTUSE16ASSUMECS:CODENUMDW4567H
;BCD碼表示BEG:MOVCX,4;4次調(diào)用
MOVAX,0AGA:ROLNUM,4MOVBX,NUMANDBX,000FH
IMULAX,10ADDAX,BXLOOPAGA顯示AX中的二進(jìn)制數(shù)返回DOSCODEENDSENDBEG本例數(shù)據(jù)放在代碼段!本例:因?yàn)锳X的D15=0,是正的有符號(hào)數(shù),所以可用IMUL指令A(yù)X×10+BX→AX[EXE格式程序清單]代碼轉(zhuǎn)換三.二進(jìn)制數(shù)→十進(jìn)制數(shù)方法:比較法,恢復(fù)余數(shù)法,除法8位二進(jìn)制數(shù)最大為11111111,等值的十進(jìn)制數(shù)為255,
比較法的關(guān)鍵:判斷某二進(jìn)制數(shù)(假設(shè)為BEN單元的內(nèi)容)包含幾個(gè)100,幾個(gè)10,幾個(gè)1
1.8位二進(jìn)制數(shù)→十進(jìn)制數(shù),比較法:DL+1→DL(BEN)-10→BEN(BEN)>=100?NY(BEN)>=10?NY0→DLDL+1→DL(BEN)-100→BENDL+30H→屏幕0→DLDL+30H→屏幕(BEN)+30H→屏幕返回DOS.486CMPDISPMACRONNLOCALLAST,NEXTMOVDL,0;DL清0LAST:CMPBEN,NN;比較JCNEXT;BEN<NN轉(zhuǎn)INCDL;DL加1SUBBEN,NNJMPLASTNEXT:ADDDL,30HMOVAH,2INT21H;顯示ENDM
CODESEGMENTUSE16ASSUMECS:CODEBENDB10101110B;=174BEG:CMPDISP100CMPDISP10CMPDISP1MOVAH,4CHINT21HCODEENDSENDBEG[EXE格式程序清單]代碼轉(zhuǎn)換2.8位二進(jìn)制數(shù)→十進(jìn)制數(shù),恢復(fù)余數(shù)法(請(qǐng)自學(xué))3.8位二進(jìn)制數(shù)→十進(jìn)制數(shù),“除權(quán)值求商”的算法分析把11110101B→十進(jìn)制數(shù)245算法:①依次用權(quán)值100,10,1去除上次的余數(shù),直到余數(shù)為0時(shí)停止。②每次除法所得的商數(shù)順序排列,即為十進(jìn)制數(shù)。
11110101110010010110110……2權(quán)值(100)10101……51011010……余數(shù)為0時(shí)止1權(quán)值(1)100……4
10110110101011010權(quán)值(10)10例.
將NUM單元中的16位二進(jìn)制數(shù),轉(zhuǎn)換成十進(jìn)制數(shù)顯示。思路:16位二進(jìn)制數(shù):最大為1……1,其等值的十進(jìn)制數(shù)為65535,故應(yīng)判斷NUM單元的數(shù)包含幾個(gè)10000,幾個(gè)1000,幾個(gè)100,幾個(gè)10,幾個(gè)1設(shè)計(jì)一個(gè)XX÷YY并顯示商值的宏指令供調(diào)用,XX為32位,YY為16為二進(jìn)制數(shù)。DX,AX為被除數(shù)·486DIVIDEMACROXX,YYMOVAX,XXMOVDX,0MOVCX,YY;CX為除數(shù)DIVCX
;AX=商,且<1010B,DX=余數(shù)MOVAH,0EHADDAL,30HINT10HENDMCODESEGMENTUSE16ASSUMECS:CODENUMDW65530;匯編后為二進(jìn)制數(shù)BEG:DIVIDENUM,10000DIVIDEDX,1000①本題在代碼段中設(shè)置數(shù)據(jù),這是COM格式?EXE格式?②如果改為:BEG:MOVBX,OFFSETNUMDIVIDE[BX],10000……是錯(cuò)誤的,為什么?DIVIDEDX,100DIVIDEDX,10DIVIDEDX,1MOVAH,4CHINT21HCODEENDSENDBEG顯示一位商值不能顛倒分析:應(yīng)寫(xiě)成:DIVIDECS:[BX],10000[程序清單]代碼轉(zhuǎn)換4.8位二進(jìn)制數(shù)→十進(jìn)制數(shù),“除十取余”的算法分析
把11110101→十進(jìn)制數(shù)245算法:①N被(10)10除,商再被(10)10除……,直到商數(shù)為0時(shí)止。②每次所得的余數(shù)按倒序方式排列顯示。編程技巧:每次除法的余數(shù)→棧,除法結(jié)束后,再?gòu)亩褩V幸来螐棾鲇鄶?shù)+30H→屏。11000
1111010110
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年酒店客房服務(wù)滿意度提升單位合同范本3篇
- 二零二五年度網(wǎng)絡(luò)安全防護(hù)服務(wù) XXX合同協(xié)議補(bǔ)充協(xié)議2篇
- 二零二五年高管薪酬體系調(diào)整與執(zhí)行合同3篇
- 2024版建設(shè)工程合同包括哪幾種形式
- 二零二五年研發(fā)合作協(xié)議及其技術(shù)轉(zhuǎn)讓條款2篇
- 2024汽修場(chǎng)地租賃及維修設(shè)備采購(gòu)合同范本2篇
- 二零二五年海南地區(qū)教育機(jī)構(gòu)勞動(dòng)合同示范文本3篇
- 2024年酒店式公寓共同開(kāi)發(fā)協(xié)議
- 二零二五年度公益組織財(cái)務(wù)審計(jì)代理協(xié)議3篇
- 2024版山林土地租賃合同書(shū)范本
- 窗簾采購(gòu)?fù)稑?biāo)方案(技術(shù)方案)
- 司庫(kù)體系建設(shè)
- 居間合同范本解
- 機(jī)電傳動(dòng)單向數(shù)控平臺(tái)-礦大-機(jī)械電子-有圖
- 婦科病盆腔炎病例討論
- 人教版高中物理必修一同步課時(shí)作業(yè)(全冊(cè))
- 食堂油鍋起火演練方案及流程
- 《呼吸衰竭的治療》
- 有余數(shù)的除法算式300題
- 五年級(jí)上冊(cè)小數(shù)除法豎式計(jì)算練習(xí)300題及答案
- 【外資便利店在我國(guó)的經(jīng)營(yíng)策略分析案例:以日本羅森便利店為例11000字(論文)】
評(píng)論
0/150
提交評(píng)論