版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
4.6.1順序結(jié)構(gòu)程序設(shè)計(jì)順序結(jié)構(gòu)程序也稱為簡(jiǎn)單程序,這種結(jié)構(gòu)的程序是按順序執(zhí)行下來的,程序本身的邏輯很簡(jiǎn)單,只要能正確安排有關(guān)語句的順序,即可解決問題。4.6匯編語言程序設(shè)計(jì)在匯編語言程序中,主要有四種結(jié)構(gòu):順序程序、分支程序、循環(huán)程序、子程序。順序程序分支程序循環(huán)程序子程序圖4-3四種基本程序結(jié)構(gòu)的示意圖例4-10編程實(shí)現(xiàn)123*456→M MDD? MOVAX,123 MOVBX,456 MULBX MOVM,AX MOVM+2,DX4.6.1順序結(jié)構(gòu)程序設(shè)計(jì)例4-11從鍵盤上鍵入0至9中任一個(gè)自然數(shù),求其立方值。數(shù)據(jù)段定義如下:DATASEGMENTINPUTDB‘PLEASEINPUTX(0~9):$’TABDW0,1,8,27,64,125,216,343,512,729XDB?XXXDW?DATAENDS4.6.1順序結(jié)構(gòu)程序設(shè)計(jì)程序段如下:
INT 21H;用9號(hào)功能顯示字符串MOV AH,1INT 21H;從鍵盤輸入一個(gè)字符ALAND AL,0FHMOV X,AL;將ASCII碼轉(zhuǎn)換成真值
ADD AL,ALMOV BL,ALMOV BH,0;計(jì)算在表中的偏移量送BXMOV AX,TAB[BX];查表獲得立方值
MOV XXX,AX;將立方值保存在XXX單元
4.6.1順序結(jié)構(gòu)程序設(shè)計(jì)4.6.2分支結(jié)構(gòu)程序設(shè)計(jì)N分支1YNY分支2條件
1.利用比較與條件轉(zhuǎn)移實(shí)現(xiàn)分支
例4-13求兩個(gè)無符號(hào)數(shù)差的絕對(duì)值,結(jié)果存放在D1單元中。DATASEGMENT
D1 DB?
D2 DB0F5H,68HDATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXLEA BX,D2MOV AL,[BX];取第1個(gè)數(shù)
INC BX4.6.2分支結(jié)構(gòu)程序設(shè)計(jì)MOV CL,[BX];取第2個(gè)數(shù)CMP AL,CL;兩個(gè)數(shù)比較JAE BIGR;大于等于,則轉(zhuǎn)BIGRSUB CL,AL;否則,第2個(gè)數(shù)減第1個(gè)數(shù)MOV D1,CL;兩數(shù)差的絕對(duì)值存D1單元JMP RSTBIGR:SUB AL,CL;第1個(gè)數(shù)減去第2個(gè)數(shù)MOV D1,ALRST:MOV AH,4CHINT 21HCODEENDSEND START4.6.2分支結(jié)構(gòu)程序設(shè)計(jì)例4-14設(shè)在A、B、C字型變量中存放著3個(gè)數(shù),若3個(gè)數(shù)均不為0,則求出它們的和(不考慮溢出)存入D單元。DATASEGMENTA DW108B DW0C DW45D DW?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AX4.6.2分支結(jié)構(gòu)程序設(shè)計(jì)MOV BH,0;BH淸0MOV D,0;變量D淸0CMP A,0;判斷變量A是否為0JNE NT1;A非0則轉(zhuǎn)去判斷變量BINC BH;A為0則BH加1NT1:CMPB,0 ;判斷變量B是否為0JNE NT2;B非0則轉(zhuǎn)去判斷變量CINC BH;B為0則BH加1NT2:CMPC,0;判斷變量C是否為0JNE NT3;C非0則轉(zhuǎn)去判斷寄存器
INCBH4.6.2分支結(jié)構(gòu)程序設(shè)計(jì)NT3:CMPBH,0;判斷寄存器BH是否為0JNE EXIT;BH非0則程序結(jié)束
MOV AX,A;BH為0則求和并存入D單元
ADD AX,BADD AX,CMOV D,AXEXIT:MOVAH,4CHINT 21HCODEENDSENDSTART4.6.2分支結(jié)構(gòu)程序設(shè)計(jì)2利用跳轉(zhuǎn)表實(shí)現(xiàn)分支
條件分支1分支2分支n……例4-15某工廠有n+1種產(chǎn)品R0、R1、R2、...、Rn的加工程序,分別存放在PR0、PR1、PR2、...PRn為首地址的內(nèi)存區(qū)域中。而這n+1個(gè)首地址的偏移量連續(xù)存放在以BASE為基地址的跳轉(zhuǎn)表中。已知產(chǎn)品編號(hào)存放在NUM單元中,要求編寫程序,能夠根據(jù)產(chǎn)品編號(hào)轉(zhuǎn)至相應(yīng)的處理程序。DATASEGMENTBASEDWPR0,PR1,PR2,...,PRn
;定義跳轉(zhuǎn)表NUM DB4DATAENDS4.6.2分支結(jié)構(gòu)程序設(shè)計(jì)CODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXXORAX,AX;清AXMOVAL,NUM;取加工的產(chǎn)品編號(hào)iADDAX,AX;2*i,獲得偏移量
MOVBX,OFFSETBASE;獲得跳轉(zhuǎn)表首地址
ADDBX,AX;獲得對(duì)應(yīng)的單元地址
JMPBX;轉(zhuǎn)入相應(yīng)的加工子程序
MOVAH,4CH;程序結(jié)束
INT21H4.6.2分支結(jié)構(gòu)程序設(shè)計(jì)PROPROC NEAR;加工子程序
...PR0ENDP
;PR1PROC NEAR...PR1ENDP
;
...PRnPROC NEAR...PRnENDPCODEENDSEND START4.6.2分支結(jié)構(gòu)程序設(shè)計(jì)PR0BASEPR0PRnPR1PR2PRn….…4.6.2分支結(jié)構(gòu)程序設(shè)計(jì)
圖4-5例4-15的跳轉(zhuǎn)表
4.6.3循環(huán)結(jié)構(gòu)程序設(shè)計(jì)1.循環(huán)程序結(jié)構(gòu)可分為五個(gè)部分。(1)初始化部分設(shè)置循環(huán)的初始值,是循環(huán)的準(zhǔn)備部分。(2)循環(huán)體部分這是循環(huán)程序的主體,用來完成主要的計(jì)算任務(wù)和操作。(3)循環(huán)修改部分修改循環(huán)工作部分的變量地址等,為下一次循環(huán)作準(zhǔn)備。(4)循環(huán)控制部分修改循環(huán)次數(shù)計(jì)數(shù)器并判斷結(jié)束條件。(5)結(jié)束部分循環(huán)結(jié)束后,用于分析和存放結(jié)果。4.6.3循環(huán)結(jié)構(gòu)程序設(shè)計(jì)2循環(huán)的控制方法
(1)計(jì)數(shù)控制用于循環(huán)次數(shù)已知的情況。通常采用CX寄存器為循環(huán)計(jì)數(shù)器。循環(huán)計(jì)數(shù)控制一般用LOOP指令實(shí)現(xiàn)。(2)條件控制用于循環(huán)次數(shù)未知,但卻已知一些循環(huán)或不循環(huán)的條件。(3)邏輯尺控制這是匯編語言循環(huán)程序設(shè)計(jì)獨(dú)有的方式。所謂邏輯尺,是指具有一定長度的一串二進(jìn)制數(shù)。該方式按照邏輯尺的指示,決定對(duì)循環(huán)體中某一部分的執(zhí)行或不執(zhí)行。
4.6.3循環(huán)結(jié)構(gòu)程序設(shè)計(jì)3.循環(huán)程序設(shè)計(jì)舉例
例4-16編程計(jì)算Y=a1+a2+…+a100。(其中ai為16位二進(jìn)制整數(shù),設(shè)和值不大于16位二進(jìn)制整數(shù)表數(shù)范圍)
DATASEGMENTTAB DWa1,a2,...,a100Y DW?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AX
4.6.3循環(huán)結(jié)構(gòu)程序設(shè)計(jì)XOR AX,AX;初始化部分,累加和清0LEA BX,TAB ;BX指向加數(shù)首地址
MOV CX,100 ;設(shè)置減計(jì)數(shù)初值LP:ADD AX,[BX];循環(huán)體開始,累加
INC BX;修改部分,修改BX
INC BXLOOP LP;控制部分,CX減計(jì)數(shù)
MOV Y,AX;結(jié)束部分,存放結(jié)果
MOV AH,4CHINT 21HCODEENDSEND START4.6.3循環(huán)結(jié)構(gòu)程序設(shè)計(jì)例4-17寫一個(gè)把字符串中的所有大寫字母改寫為小寫字母的程序。設(shè)字符串以‘$’結(jié)尾。DATASEGMENTSTRINGDB‘IamAStudent!’,’$’DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV SI,OFFSETSTRING;取串首地址AGAIN:MOV AL,[SI];取一字符
CMP AL,‘$’;是否到字符串尾4.6.3循環(huán)結(jié)構(gòu)程序設(shè)計(jì)JEOK;到字符串尾,跳出循環(huán)
CMPAL,‘A’;否則,判斷是否為大寫字母
JB NEXT;否,轉(zhuǎn)繼續(xù)
CMPAL,‘Z’JA NEXT;否,轉(zhuǎn)繼續(xù)
ORAL,20H;是大寫字母,改為小寫字母NEXT:INCSI;調(diào)整指針
JMPAGAIN;繼續(xù)循環(huán)OK:MOVAH,4CH;結(jié)束
INT21HCODEENDSENDSTART4.6.3循環(huán)結(jié)構(gòu)程序設(shè)計(jì)例4-18設(shè)計(jì)一個(gè)程序判斷無符號(hào)字型數(shù)組BUFFER的若干個(gè)元素中是否含有數(shù)字0,如有則把第一個(gè)0元素所在存儲(chǔ)單元的偏移地址送字型變量ADDR,如沒有則將該變量的值置為0FFFFH。數(shù)據(jù)段定義如下:DATASEGMENTBUFFERDW23,65,89,……COUNTEQU$-BUFFER;元素個(gè)數(shù)
ADDDRDW?DATAENDS4.6.3循環(huán)結(jié)構(gòu)程序設(shè)計(jì)程序段如下:
MOVBX,OFFSETBUFFER;數(shù)組地址到BXMOVCX,COUNT;置循環(huán)最大次數(shù)AGAIN:MOVAX,[BX];取一元素
CMPAX,0;與0比較
JZYES;相等則跳出循環(huán)
ADDBX,2;修改地址指針
LOOPAGAIN;循環(huán)控制
MOVADDR,0FFFFH;沒找到
JMPEXITYES:MOV ADDR,BX;找到EXIT:......;結(jié)束4.6.3循環(huán)結(jié)構(gòu)程序設(shè)計(jì)例4-19設(shè)字型數(shù)組X、Y分別有12個(gè)元素,試形成一個(gè)Z數(shù)組,使該數(shù)組的各元素滿足以下關(guān)系:Z0=X0+Y0Z1=X1+Y1Z2=X2-Y2Z3=X3+Y3Z4=X4+Y4Z5=X5+Y5Z6=X6+Y6Z7=X7-Y7Z8=X8-Y8Z9=X9+Y9Z10=X10+Y10Z11=X11-Y11邏輯尺的定義:用0表示加運(yùn)算,用1表示減運(yùn)算,則12個(gè)式子的運(yùn)算操作按Z11,Z10,Z9,…,Z0的順序可表示為二進(jìn)制數(shù)100110000100。為存放這個(gè)二進(jìn)制數(shù),可在內(nèi)存中定義一個(gè)字變量,將二進(jìn)制數(shù)作為該變量的低12位,變量的高4位無意義。
4.6.3循環(huán)結(jié)構(gòu)程序設(shè)計(jì)數(shù)據(jù)段定義如下:DATASEGMENTXDW3,65,96,45,86,8,50,7,76,45,75,5YDW9,45,23,6,74,8,21,45,12,4,64,87ZDW12DUP(?)RULERDW0000100110000100BDATAENDS主要程序段如下:……
MOV BX,0;置地址指針
MOV CX,12;置循環(huán)次數(shù)
MOVDX,RULER4.6.3循環(huán)結(jié)構(gòu)程序設(shè)計(jì)AGAIN:MOVAX,X[BX];取數(shù)組X一元素
SHRDX,1;邏輯尺右移一位
JCSUBS;移出位為1則相減
ADDAX,Y[BX];否則相加
JMPNEXTSUBS:SUBAX,Y[BX]NEXT:MOVZ[BX],AX;將結(jié)果存入Z數(shù)組
ADDBX,2;修改地址指針
LOOPAGAIN;循環(huán)控制EXIT:MOV ......;結(jié)束4.6.3循環(huán)結(jié)構(gòu)程序設(shè)計(jì)例4-20用冒泡排序法對(duì)有符號(hào)字型數(shù)組ARY按升序排列。下面是對(duì)有7個(gè)元素的無序表進(jìn)行冒泡排序:表的初始狀態(tài):[36486698751328]第一遍比較之后:[364866751328]98第二遍比較之后:[3648661328]7598第三遍比較之后:[36481328]667598第四遍比較之后:[361328]48667598第五遍比較之后:[1328]3648667598第六遍比較之后:132836486675984.6.3循環(huán)結(jié)構(gòu)程序設(shè)計(jì)數(shù)據(jù)段定義如下:DATASEGMENTARY DW n1,n2,n3,……N EQU ($-ARY)/2;數(shù)組元素個(gè)數(shù)DATAENDS主要程序段定義如下:……MOVCX,N-1;置外循環(huán)次數(shù)LOOP1:PUSHCX;保存外循環(huán)計(jì)數(shù)器的值MOVBX,0;置地址指針4.6.3循環(huán)結(jié)構(gòu)程序設(shè)計(jì)LOOP2:MOVAX,ARY[BX];取前面元素到AXCMPAX,ARY[BX+2];與后面元素比較
JLEOK;次序正確則轉(zhuǎn)到下一步
XCHGAX,ARY[BX+2];否則,交換位置
MOVARY[BX],AXOK:ADD BX,2;修改地址指針
LOOPLOOP2;內(nèi)循環(huán)控制
POPCX;將CX恢復(fù)為外循環(huán)計(jì)數(shù)器值
LOOPLOOP1;外循環(huán)控制……4.6.3循環(huán)結(jié)構(gòu)程序設(shè)計(jì)
4.6.4子程序設(shè)計(jì)
1.子程序的調(diào)用和返回
SP返回地址偏移CSIP返回地址偏移IPCSSP返回地址段值返回地址段值CALL指令執(zhí)行后RET指令執(zhí)行后要實(shí)現(xiàn)子程序的正確調(diào)用返回,必須注意:(1)正確定義子程序的類型。(2)CALL和RET指令必須成對(duì)出現(xiàn)。(3)正確使用堆棧。
4.6.4子程序設(shè)計(jì)
2.保存和恢復(fù)寄存器
典型的保護(hù)和恢復(fù)寄存器編程舉例如下:子程序名PROCNEAR(或FAR)PUSHAX;保護(hù)現(xiàn)場(chǎng)PUSHBXPUSHCXPUSHDXPUSHF...
4.6.4子程序設(shè)計(jì)
...POPF;恢復(fù)現(xiàn)場(chǎng)POPDXPOPCXPOPBXPOPAXRET子程序名ENDP
4.6.4子程序設(shè)計(jì)
3.主程序和子程序之間的參數(shù)傳送方法
參數(shù)傳送的主要方法有以下幾種:(1)通用寄存器傳送參數(shù)。主程序調(diào)用子程序時(shí),將要傳送的參數(shù)裝入某些指定寄存器;子程序返回時(shí)也將結(jié)果裝入指定的寄存器。(2)存儲(chǔ)單元傳送參數(shù)。指定某些存儲(chǔ)單元存放主程序與子程序之間要傳遞的參數(shù)。(3)堆棧傳送參數(shù)。主程序把參數(shù)或參數(shù)地址壓入堆棧,子程序通過訪問堆棧取得參數(shù)。
4.6.4子程序設(shè)計(jì)
4.子程序說明信息
子程序的說明信息至少應(yīng)該包含下面幾個(gè)部分:;子程序名:‥‥‥‥‥‥;功能:‥‥‥‥‥‥;入口參數(shù):‥‥‥‥‥‥;出口參數(shù):‥‥‥‥‥‥;其它說明:‥‥‥‥‥‥
4.6.4子程序設(shè)計(jì)
例4-21編寫一個(gè)對(duì)字型數(shù)組各元素求和的子程序(不考慮進(jìn)位),并在主程序中調(diào)用該子程序分別求字型數(shù)組A1和A2的各元素之和。(1)使用通用寄存器傳遞參數(shù)DATASEGMENTA1DW30H,20H,10,30H,6BHN1EQU($-A1)/2;獲得A1元素的個(gè)數(shù)
SUM1DW?;存放數(shù)組A1的和
A2DW45,12,-4,89,6CH,0DH,35N2EQU($-A2)/2;獲得A2元素的個(gè)數(shù)
SUM2DW?;存放數(shù)組A2的和DATAENDS
4.6.4子程序設(shè)計(jì)
主要程序如下:......LEABX,A1;傳送數(shù)組A1的地址到BXMOVCX,N1;傳送A1的元素個(gè)數(shù)到CXLEASI,SUM1;傳送SUM1的地址到SICALLARY_SUM;調(diào)用子程序?qū)?shù)組A1求和LEABX,A2;傳送數(shù)組A2的地址到BXMOVCX,N2;傳送A2的元素個(gè)數(shù)到CXLEASI,SUM2;傳送SUM2的地址到SICALLARY_SUM;調(diào)用子程序?qū)?shù)組A2求和MOVAH,4CHINT21H
4.6.4子程序設(shè)計(jì)
;子程序名:ARY_SUM;功能:求字型數(shù)組各元素之和。
;入口參數(shù):BX=數(shù)組地址;CX=數(shù)組元素個(gè)數(shù);SI=存和地址
;出口參數(shù):無ARY_SUMPROCNEARPUSHAXXORAX,AX;AX清零
4.6.4子程序設(shè)計(jì)
AGAIN:ADDAX,[BX];對(duì)數(shù)組求和
ADDBX,2LOOPAGAINMOV[SI],AX;存和
POPAXRETARY_SUMENDPCODEENDSENDSTART
4.6.4子程序設(shè)計(jì)
(2)使用存儲(chǔ)單元傳遞參數(shù)數(shù)據(jù)段定義如下:DATASEGMENTA1DW30H,20H,10,30H,6BHN1EQU($-A1)/2;獲得A1數(shù)組元素的個(gè)數(shù)
SUM1DW?A2DW45,12,-4,89,6CH,0DH,35N2EQU($-A2)/2;獲得A2數(shù)組元素的個(gè)數(shù)
SUM2DW?TABLEDW3DUP(?);定義參數(shù)表DATAENDS
4.6.4子程序設(shè)計(jì)
調(diào)用子程序?qū)?shù)組A1求和:LEABX,TABLE;將參數(shù)表地址傳送BXLEA AX,A1;將數(shù)組A1參數(shù)填入?yún)?shù)表
MOV [BX],AXMOV AX,N1MOV [BX+2],AXLEA AX,SUM1MOV [BX+4],AXCALLARY_SUM;調(diào)用子程序?qū)?shù)組A1求和
4.6.4子程序設(shè)計(jì)
;子程序名:ARY_SUM;功能:求字型數(shù)組各元素之和。
;入口參數(shù):BX=參數(shù)表地址;;參數(shù)1=數(shù)組地址;參數(shù)2=元素個(gè)數(shù);參數(shù)3=存和地址
;出口參數(shù):無ARY_SUMPROCNEARPUSHAXPUSHCXPUSHSIMOVSI,[BX];取參數(shù)1到SIMOVCX,[BX+2];取參數(shù)2到CXXORAX,AX
4.6.4子程序設(shè)計(jì)
AGAIN:ADDAX,[SI];對(duì)數(shù)組求和
ADDSI,2LOOPAGAINMOVSI,[BX+4];取參數(shù)3到SIMOV[SI],AX;存和
POPSIPOPCXPOPAXRETARY_SUMENDPCODEENDSENDSTART
4.6.4子程序設(shè)計(jì)
(3)使用堆棧傳遞參數(shù)調(diào)用子程序?qū)?shù)組A1求和:LEAAX,A1;數(shù)組A1的相關(guān)參數(shù)入棧
PUSHAXMOVAX,N1PUSHAXLEAAX,SUM1PUSHAXCALLARY_SUM
4.6.4子程序設(shè)計(jì)
;子程序名:ARY_SUM;功能:求字型數(shù)組各元素之和。
;入口參數(shù):使用堆棧傳遞參數(shù)。;參數(shù)入棧順序:1.數(shù)組地址;2.數(shù)組元素個(gè)數(shù);3.存和地址
;出口參數(shù):無ARY_SUMPROCNEARPUSHAXPUSHCXPUSHSIPUSHBPMOVBP,SPMOVSI,[BP+10];取數(shù)組地址到SIMOVCX,[BP+12];取元素個(gè)數(shù)到CX
XORAX,AXAGAIN:ADDAX,[SI];用循環(huán)語句對(duì)數(shù)組求和
ADDSI,2LOOPAGAINMOVSI,[BP+14];取存和地址到SIMOV[SI],AX;將數(shù)組和存入指定地址
POPBPPOPSIPOPCXPOPAXRET6
4.6.4子程序設(shè)計(jì)
數(shù)組地址數(shù)組元素個(gè)數(shù)存和地址IPAXCXSIBP……SPBPBP+10BP+12BP+14圖4-8取得入口參數(shù)時(shí)堆棧的情形例4-22
基數(shù)轉(zhuǎn)換子程序。將寄存器AX中的16位無符號(hào)二進(jìn)制數(shù)轉(zhuǎn)換為P進(jìn)制數(shù),并將P進(jìn)制數(shù)轉(zhuǎn)換成ASCII碼存放。;子程序名:RADIX;功能:將寄存器AX中的16位無符號(hào)二進(jìn)制數(shù)轉(zhuǎn)換為P進(jìn)制數(shù);入口參數(shù):AX=待轉(zhuǎn)換的數(shù),BX=數(shù)制基P,;SI=存放ASCII碼的字節(jié)數(shù)組地址;出口參數(shù):無4.7
實(shí)用程序設(shè)計(jì)舉例RADIXPROCFARPUSHCXPUSHDXMOVCX,0LOP1:MOVDX,0DIVBX;待轉(zhuǎn)換的數(shù)存放在AX,BX存放要轉(zhuǎn)換
PUSHDX;的數(shù)制基數(shù)P,(AX)除以P,余數(shù)入棧
INCCX;記錄余數(shù)個(gè)數(shù)
ORAX,AXJNELOP1;(AX)不等于0,轉(zhuǎn)LOP1LOP2:POPAX;從堆棧中彈出一位P進(jìn)制數(shù)字
CMPAL,104.7
實(shí)用程序設(shè)計(jì)舉例JBL1ADDAL,7L1:ADDAL,30H;轉(zhuǎn)換成ASCII碼
MOV[SI],AL;保存
INCSIDECCXJNELOP2POPDXPOPCXRETRADIXENDP4.7
實(shí)用程序設(shè)計(jì)舉例例4-23有一個(gè)100個(gè)字節(jié)的數(shù)據(jù)表(有符號(hào)數(shù)),存放在數(shù)據(jù)段中,表內(nèi)各數(shù)已按升序排列好,現(xiàn)給定一元素,試編寫程序從表內(nèi)查找給定元素,若有則結(jié)束,否則將該元素順序插入表中,并修改表長。DATASEGMENTLTHDB100;表長
TABDB02H,12H,14H,...;100個(gè)字節(jié)的升序表
TEMDBX;給定元素DATAENDS4.7
實(shí)用程序設(shè)計(jì)舉例CODESEGMENTASSUMECS:CODE,DS:DATASATRT:MOVAX,DATAMOVDS,AXLEABX,TABMOVAL,TEMMOVCX,LTHLOP:CMPAL,[BX];在表中查找
JESOP;找到則結(jié)束
JLINST;若給定元素小于表內(nèi)元素,轉(zhuǎn)INSTINCBX;大于則取下一個(gè)元素進(jìn)行比較
LOOPLOPMOV[BX],AL;給定元素一直大于表內(nèi)元素
JMPJUST;插入表末INST:MOVAH,[BX];暫存表中元素暫存入AHMOV[BX],AL;表中插入給定元素
MOVAL,AHINCBXLOPI:MOVAH,[BX];暫存表中下一個(gè)元素
MOV[BX],AL;將前一個(gè)暫存的元素存入表中
MOVAL,AHINCBXDECCXJNZLOPIJUST:INCLTH;修改表長SOP:MOVAH,4CHINT21HCODEENDSENDSTART例4-24編程實(shí)現(xiàn):先接受一個(gè)字符串,然后分別統(tǒng)計(jì)其中數(shù)字字符和英文字符的個(gè)數(shù),最后用十進(jìn)制數(shù)的形式顯示它們。
DATASEGMENTBUFFDB255;緩沖區(qū)長度
DB?;鍵入字符實(shí)際長度
DB255DUP(0)MESS0DB0DH,0AH,‘PLEASEINPUT:$’MESS1DB0DH,0AH,‘LENGTH=$’MESS2DB0DH,0AH,‘DIGITAL=$’MESS3DB0DH,0AH,‘CHARACT=$’DATAENDS4.7
實(shí)用程序設(shè)計(jì)舉例CODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVDX,OFFSETMESS0;顯示提示信息0CALLDISPMESSMOVDX,OFFSETBUFF;接收一個(gè)字符串
MOVAH,10INT21HMOVBH,0;清數(shù)字計(jì)數(shù)器
MOVBL,0;清字符計(jì)數(shù)器
MOVCL,BUFF+1;取字符串長度4.7
實(shí)用程序設(shè)計(jì)舉例MOVCH,0JCXZCOK;若長度為0,不統(tǒng)計(jì)
MOVSI,OFFSETBUFF+2;指向字符串首址
AGAIN:MOVAL,[SI]INCSICMPAL,‘0’;判斷是否數(shù)字字符
JBNEXTCMPAL,‘9’JANODECINCBH;字符計(jì)數(shù)器加1JMPSHORTNEXT;提前結(jié)束本次循環(huán)4.7
實(shí)用程序設(shè)計(jì)舉例
NODEC:ORAL,20H;轉(zhuǎn)換為小寫
CMPAL,‘a(chǎn)’;判斷是否英文字母
JBNEXTCMPAL,‘z’JANEXTINCBL;字母計(jì)數(shù)器加1NEXT:LOOPAGAIN
COK:MOVDX,OFFSETMESS1;顯示字符串長度
CALLDISPMESSMOVAL,BUFF+1XORAH,AHCALLDISPL4.7
實(shí)用程序設(shè)計(jì)舉例MOVDX,OFFSETMESS2;顯示數(shù)字字符個(gè)數(shù)
CALLDISPMESSMOVAL,BHXORAH,AHCALLDISPLMOVDX,OFFSETMESS3;顯示字母?jìng)€(gè)數(shù)
CALLDISPMESSMOVAL,BLXORAH,AHCALLDISPLMOVAH,4CH
INT21H4.7
實(shí)用程序設(shè)計(jì)舉例;子程序名:DISPL;功能:8位無符號(hào)二進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù)并顯示;入口參數(shù):AL=待轉(zhuǎn)換的8位數(shù);出口參數(shù):無DISPLPROCPUSHDXPUSHCXMOVDL,10;置除數(shù)
MOVCX,0DISP1:XORAH,AHDIVDLPUSHAX;保存商和余數(shù)
INCCX;統(tǒng)計(jì)除10的次數(shù)4.7
實(shí)用程序設(shè)計(jì)舉例CMPAL,0JNZDISP1DISP2:POPAX;取商和余數(shù)到AXADDAH,30H;將余數(shù)轉(zhuǎn)換成字符并顯示
MOVDL,AHMOVAH,2INT21HLOOPDISP2POPCXPOPDXRETDISPLENDP4.7
實(shí)用程序設(shè)計(jì)舉例;子程序名:DISPMESS;功能:顯示提示信息;入口參數(shù):DX=提示信息地址;出口參數(shù):無
DISPMESSPROCPUSHAXMOVAH,9INT21HPOPAXRETCODEENDSENDSTART4.7
實(shí)用程序設(shè)計(jì)舉例4.8.1上機(jī)開發(fā)過程(1)建立匯編源程序文件(.ASM)用編輯程序,例如
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 采購合同中的家具選購3篇
- 采購合同會(huì)審制度的創(chuàng)新路徑3篇
- 采購合同流程的策略與應(yīng)用3篇
- 采購戰(zhàn)略合同的智能化發(fā)展3篇
- 采購合同框架的設(shè)計(jì)與實(shí)踐3篇
- 采購招標(biāo)會(huì)務(wù)通知發(fā)布3篇
- 采購意向合同書3篇
- 2024年大安市創(chuàng)傷醫(yī)院高層次衛(wèi)技人才招聘筆試歷年參考題庫頻考點(diǎn)附帶答案
- 采購合同預(yù)付款的融資風(fēng)險(xiǎn)管理3篇
- 采購框架協(xié)議年度合同3篇
- 福建省福州市各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名明細(xì)及行政區(qū)劃代碼
- 《高中語文文言斷句》一等獎(jiǎng)優(yōu)秀課件
- 大學(xué)生創(chuàng)新思維教學(xué)課件全套教學(xué)課件
- 教育研究導(dǎo)論首都師范
- (完整版)自動(dòng)感應(yīng)門施工方案
- _ 基本粒子與宏觀物體內(nèi)在聯(lián)系
- 象棋比賽積分編排表
- 工會(huì)新聞的寫作培訓(xùn)講義(共36頁).ppt
- 中藥飲片購進(jìn)驗(yàn)收記錄表格模板
- TCM遠(yuǎn)紅外發(fā)展初析
- [爆笑小品校園劇本7人]爆笑小品校園劇本
評(píng)論
0/150
提交評(píng)論