第10章如何發(fā)揮主機(jī)內(nèi)存各類(lèi)寄存器(位)處理器的功能-匯編語(yǔ)言程序設(shè)計(jì)課件_第1頁(yè)
第10章如何發(fā)揮主機(jī)內(nèi)存各類(lèi)寄存器(位)處理器的功能-匯編語(yǔ)言程序設(shè)計(jì)課件_第2頁(yè)
第10章如何發(fā)揮主機(jī)內(nèi)存各類(lèi)寄存器(位)處理器的功能-匯編語(yǔ)言程序設(shè)計(jì)課件_第3頁(yè)
第10章如何發(fā)揮主機(jī)內(nèi)存各類(lèi)寄存器(位)處理器的功能-匯編語(yǔ)言程序設(shè)計(jì)課件_第4頁(yè)
第10章如何發(fā)揮主機(jī)內(nèi)存各類(lèi)寄存器(位)處理器的功能-匯編語(yǔ)言程序設(shè)計(jì)課件_第5頁(yè)
已閱讀5頁(yè),還剩76頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、10.1 概述10.1.1 匯編語(yǔ)言程序設(shè)計(jì)的一般步驟10.1.2 流程圖返回本章首頁(yè)10.1 概述10.1.1 匯編語(yǔ)言程序設(shè)計(jì)的一般步驟返10.1.1 匯編語(yǔ)言程序設(shè)計(jì)的一般步驟匯編語(yǔ)言程序設(shè)計(jì)一般有以下幾個(gè)步驟:1分析問(wèn)題,確定算法2繪制流程圖3根據(jù)流程圖編制程序10調(diào)試程序返回本節(jié)10.1.1 匯編語(yǔ)言程序設(shè)計(jì)的一般步驟匯編語(yǔ)言程序設(shè)計(jì)一10.1.2 流程圖1流程圖的概念流程圖是由特定的幾何圖形、指向線(xiàn)、文字說(shuō)明來(lái)表示數(shù)據(jù)處理的步驟,形象描述邏輯控制結(jié)構(gòu)以及數(shù)據(jù)流程的示意圖。流程圖具有簡(jiǎn)潔、明了、直觀的特點(diǎn)。2流程圖符號(hào)表示(1)起止框:表示程序的開(kāi)始和結(jié)束。開(kāi)始結(jié)束10.1.2 流程

2、圖1流程圖的概念2流程圖符號(hào)表示開(kāi)始(2)判斷框 條件(3)處理框 YN(10)指向線(xiàn) (2)判斷框 條件(3)處理框 YN(10)指向線(xiàn) 10.2 順序程序設(shè)計(jì)下面舉例說(shuō)明順序程序的設(shè)計(jì)?!纠?0.1】試編寫(xiě)一程序計(jì)算以下表達(dá)式的值。=(v-(*+-5100)/x式中x、v均為有符號(hào)字?jǐn)?shù)據(jù)。設(shè)、的值存放在字變量、V中,結(jié)果存放在雙字變量之中,程序的流程圖如圖10.1所示。10.2 順序程序設(shè)計(jì)下面舉例說(shuō)明順序程序的設(shè)計(jì)。圖10.1 順序運(yùn)算程序流程圖DX圖10.1 順序運(yùn)算程序流程圖DX源程序如下:DATASEGMENTXDW200YDW100ZDW3000VDW10000WDW2 DUP(

3、?)DATAENDSSTACKSEGMENT STACK DB 200 DUP(0)STACKENDSCODESEGMENTASSUME DS:DATA,CS:CODE,SS:STACK源程序如下:START:MOVAX,DATAMOV DS,AX;DATAAXMOV AX,X IMUL Y;(X)*(Y)DX:AXMOV CX,AXMOV BX,DX;(DX:AX)(BX:CX)MOV AX,ZCWD;(Z)符號(hào)擴(kuò)展ADDCX,AXADCBX,DX;(BX:CX)+(DX:AX)(BX:CX)SUBCX,5100SBBBX,0;(BX:CX)-5100(BX:CX)MOVAX,V START

4、:MOVAX,DATACWD;(V)符號(hào)擴(kuò)展SUB AX,CXSBB DX,BX;(DX:AX)-(BX:CX)(DX:AX)IDIV X;(DX:AX)/XMOV W,AX;商WMOV W+2,DX;余數(shù)DXW+2MOV AH,10CHINT21HCODEENDS;退出DOS 狀態(tài)ENDSTARTCWD;(V)符號(hào)擴(kuò)展【例10.2 BX、AL與查表指令】【例10.2】已知某班學(xué)生的英語(yǔ)成績(jī)按學(xué)號(hào)(從1開(kāi)始)從小到大的順序排列在TAB表中,要查的學(xué)生的學(xué)號(hào)放在變量NO中,查表結(jié)果放在變量ENGLISH中。編寫(xiě)程序如下:【例10.2 BX、AL與查表指令】【例10.2】已知某STACKSEGME

5、NT STACKDB 200 DUP(0)STACKENDSDATASEGMENTTABDB 80,85,86,71,79,96 DB 83,56,32,66,78。810NO DB 10ENGLISTDB ?DATAENDSCODESEGMENTSTACKSEGMENT STACK ASSUME DS:DATA,SS:STACK,CS:CODEBEGIN:MOVAX,DATAMOV DS ,AXLEA BX,TAB MOV AL,NODEC ALXLAT TABMOV ENGLISH,ALMOV AH,10CHINT 21HCODEENDSENDBEGIN ASSUME DS:DATA10.

6、3 分支程序設(shè)計(jì)(標(biāo)志寄存器與條件轉(zhuǎn)移指令)返回本章首頁(yè)測(cè)試某一次運(yùn)算的結(jié)果ZF=1 JZ/JESF=1 JSOF=1 JOPF=1 JPCF=1 JC(JB,JNAE)比較兩個(gè)無(wú)符號(hào)數(shù)(ASCII碼)JB=JNAE=JC(借位位)JL=JNGEJNLE=JG測(cè)試CX的值,等于0則轉(zhuǎn)移JCXZ10.3 分支程序設(shè)計(jì)(標(biāo)志寄存器與條件轉(zhuǎn)移指令)返回本10.3 分支程序設(shè)計(jì)(標(biāo)志寄存器與條件轉(zhuǎn)移指令)10.3.1 用條件轉(zhuǎn)移指令實(shí)現(xiàn)程序分支10.3.2 用跳轉(zhuǎn)表實(shí)現(xiàn)多路分支返回本章首頁(yè)10.3 分支程序設(shè)計(jì)(標(biāo)志寄存器與條件轉(zhuǎn)移指令)10.10.3.1 用條件轉(zhuǎn)移指令實(shí)現(xiàn)程序分支【例10.3】編寫(xiě)

7、計(jì)算下面函數(shù)值的程序: 1X0Y= 0X=0 -1X設(shè)輸入數(shù)據(jù)為X、輸出數(shù)據(jù)Y,且皆為字節(jié)變量。程序流程圖如圖10.2所示。程序如下:10.3.1 用條件轉(zhuǎn)移指令實(shí)現(xiàn)程序分支【例10.3】編寫(xiě)圖10.2 分支運(yùn)算程序流程圖圖10.2 分支運(yùn)算程序流程圖DATASEGMENTX DB -10Y DB ?DATAENDSSTACKSEGMENT STACK DB 200 DUP(0)STACKENDSCODESEGMENTASSUME DS:DATA,SS:STACK,CS:CODESTART:MOVAX,DATADATASEGMENT MOVDS,AX CMPX,0;與0進(jìn)行比較 JGEA1;X

8、0轉(zhuǎn)A1 MOVY,-1;X 0時(shí),-1Y JMPEXITA1: JGA2;X0轉(zhuǎn)A2 MOVY,0;X=0時(shí),0Y JMPEXITA2: MOVY,1;X0,1Y EXIT: MOVAH,10CH INT21H CODE ENDS ENDSTART MOVDS,AX圖10.2 分支運(yùn)算程序流程圖X圖10.2 分支運(yùn)算程序流程圖XDATASEGMENTX DB -10Y DB ?DATAENDSSTACKSEGMENT STACK DB 200 DUP(0)STACKENDSCODESEGMENTASSUME DS:DATA,SS:STACK,CS:CODESTART:MOVAX,DATADA

9、TASEGMENT MOVDS,AX CMPX,0 JLEA1 MOVY,1 JMPEXITA1: JLA2 MOVY,0 JMPEXITA2: MOVY,-1 EXIT: MOVAH,10CH INT21H CODE ENDS ENDSTART MOVDS,AX【例10.10】 【例10.10】試編一程序,求三個(gè)帶符號(hào)字?jǐn)?shù)據(jù)中的最大值,并將最大值存入MAX字單元中。設(shè)三個(gè)帶符號(hào)數(shù)分別在三個(gè)字變量X、Y、Z中存儲(chǔ)。程序流程圖如圖10.3所示 【例10.10】 【例10.10】試編一程序,求三個(gè)帶符號(hào)字圖10.3例10.10程序流程圖 圖10.3例10.10程序流程圖 程序如下:STACSEGM

10、ENT STACK DB 200 DUP(0)STACKENDSDATASEGMENTX DW 00ABHY DW 5Z DW 200MAXDW ?DATAENDSCODESEGMENT程序如下: ASSUME DS:DATA,SS:STACK,CS:CODE START: MOVAX,DATA MOVDS,AX MOVAX,X CMPAX,Y;XY? JGL1 MOVAX,Y;YZ? CMPAX,Z JGEXITL2: MOVAX,Z JMPEXIT ASSUME DS:L1:CMPAX,Z;XZ? JLEL2EXIT:MOVMAX,AX MOVAH,10CH INT21HCODEENDS

11、ENDSTART返回本節(jié)L1:CMPAX,Z;XZ?返回本節(jié)10.3.2 用跳轉(zhuǎn)表實(shí)現(xiàn)多路分支(教材177頁(yè))【例10.5】設(shè)某程序有8路分支,試根據(jù)給定的N值(18),將程序的執(zhí)行轉(zhuǎn)移到其中的一路分支。程序流程如圖10.10所示。 10.3.2 用跳轉(zhuǎn)表實(shí)現(xiàn)多路分支(教材177頁(yè))【例10第10章如何發(fā)揮主機(jī)內(nèi)存各類(lèi)寄存器(位)處理器的功能-匯編語(yǔ)言程序設(shè)計(jì)課件程序如下:DATASEGMENTTABDW P1,P2,P3,P10,P5,P6,P7,P8N DB 5DATAENDSSTACKSEGMENT DB 200 DUP(0)STACKENDSCODESEGMENT ASSUME DS:

12、DATA,SS:STACK,CS:CODE 程序如下:START:MOVAX,DATAMOVDS,AXMOVAL,NDECALADDAL,AL ;SHL ALMOVBL,ALMOVBH,0JMPTABBX ;MOV AX,OFFSET TABADD BX,AXMOV AX,BXJMP AXSTART:MOVAX,DATAMOV AX,OFFSP1:JMPEXITP2:JMPEXITP2:JMPEXITP3: P1: JMPEXITP8:EXIT:MOVAH,10CH INT21HCODEENDS ENDSTART上述程序中的無(wú)條件轉(zhuǎn)移指令的轉(zhuǎn)移地址采用的是變址尋址。同理,轉(zhuǎn)移地址也可以用寄存器

13、間接尋址或基址加變址尋址,讀者可自行考慮。返回本節(jié) JMPEXIT返回本節(jié)10.10 循環(huán)程序設(shè)計(jì)10.10.1 循環(huán)程序的結(jié)構(gòu)10.10.2 單重循環(huán)程序設(shè)計(jì)10.10.3 多重循環(huán)程序設(shè)計(jì)返回本章首頁(yè)10.10 循環(huán)程序設(shè)計(jì)10.10.1 循環(huán)程序的結(jié)構(gòu)返10.10.1 循環(huán)程序的結(jié)構(gòu)1初始化部分2循環(huán)體部分3循環(huán)控制部分10.10.1 循環(huán)程序的結(jié)構(gòu)1初始化部分循環(huán)程序的常見(jiàn)結(jié)構(gòu)形式如圖10.5(a)、(b)所示。返回本節(jié)循環(huán)體循環(huán)體循環(huán)程序的常見(jiàn)結(jié)構(gòu)形式如圖10.5(a)、(b)所示。返回本10.10.2 單重循環(huán)程序設(shè)計(jì)1計(jì)數(shù)控制2條件控制10.10.2 單重循環(huán)程序設(shè)計(jì)1計(jì)數(shù)控制1

14、計(jì)數(shù)控制【例10.7】已知有幾個(gè)元素存放在以BUF為首址的字節(jié)存貯區(qū)中,試統(tǒng)計(jì)其中正元素的個(gè)數(shù)。顯然,每個(gè)元素為一個(gè)8位有符號(hào)二進(jìn)制數(shù),統(tǒng)計(jì)其中正元素的個(gè)數(shù)可用循環(huán)程序?qū)崿F(xiàn)。其程序流程圖如圖10.6所示。1計(jì)數(shù)控制【例10.7】已知有幾個(gè)元素存放在以BUF為首址圖10.6 程序流程圖 =0=0Bx圖10.6 程序流程圖 =0=0Bxtitle accountdata segment number db 10,-23,-30,50,9,-105,32,310,20,86 s db 0data endscode segment assume cs:code,ds:data start: mov a

15、x,data mov ds,ax mov bx,offset number mov cx,10 mov al,s 本題為統(tǒng)計(jì)10個(gè)數(shù)值中正數(shù)的個(gè)數(shù)title account本題為統(tǒng)計(jì)10個(gè)數(shù)值中正數(shù)的個(gè)數(shù)do2: mov dl,0 cmp bx,dl jle do1 inc al do1: dec cx cmp cx,0 jle exit inc bx jmp do2 exit: mov s,al mov ah,10ch int 21h code ends end start 本題為統(tǒng)計(jì)10個(gè)數(shù)值中正數(shù)的個(gè)數(shù)do2: mov dl,0本題為統(tǒng)計(jì)10個(gè)數(shù)值中正數(shù)的個(gè)數(shù)data segment m

16、essage db overflow! a db 100 b db 100 c db ?data endscode segment assume cs:code,ds:datastart:mov ax,data mov ds,ax mov al,a mov bl,b add al,bl jo chuli jmp end1 chuli:call yichu end1:mov ah,10ch int 21h data segmentyichu proc mov cx,11 mov si,offset message back:mov dl,si mov ah,2 int 21h dec cx in

17、c si cmp cx,0 ja back ret yichu endp code ends end start yichu proc關(guān)于循環(huán)結(jié)構(gòu)中的串操作指令實(shí)施步驟1、如果串操作要涉及兩個(gè)串,則一個(gè)串應(yīng)在DS中,叫做源串,另一個(gè)應(yīng)在ES中,叫做目標(biāo)串。定義一個(gè)同時(shí)包含這兩個(gè)串的數(shù)據(jù)段,然后把段基址同時(shí)傳送到DS和ES中,用DS:SI(偏移量1)表示源串,用DS:DI(偏移量2)表示目的串。2、在串傳送、比較等操作之前,因?yàn)樵诖膫魉秃捅容^過(guò)程時(shí),系統(tǒng)是逐個(gè)字符進(jìn)行比較的,所以傳送和比較操作需要重復(fù)進(jìn)行多次。因此需要在執(zhí)行之前用CX保存重復(fù)執(zhí)行的次數(shù)。3、用CLD命令置DF=0,使SI,DI

18、自動(dòng)增量進(jìn)行;用STD命令置DF=1,使SI,DI自動(dòng)減量進(jìn)行10、增量可能是1也可能是2,這取決于串處理指令是字節(jié)型還是字類(lèi)型。關(guān)于循環(huán)結(jié)構(gòu)中的串操作指令實(shí)施步驟1、如果串操作要涉及兩個(gè)串將內(nèi)存中10000H單元開(kāi)始存放的“classmates!”的字符串傳送到20000H單元開(kāi)始的區(qū)域title accountdata segment org 1000h db classmates! org 2000h db 11 dup(?) data ends code segment assume cs:code,ds:data,es:data 將內(nèi)存中10000H單元開(kāi)始存放的“classmate

19、s!”將內(nèi)存中10000H單元開(kāi)始存放的“classmates!”的字符串傳送到20000H單元開(kāi)始的區(qū)域start: mov ax,data mov ds,ax mov si,1000h mov ax,data mov es,ax mov di,2000h mov cx,11 cld rep movsb mov ah,10ch int 21hcode ends end start將內(nèi)存中10000H單元開(kāi)始存放的“classmates!”比較“classmate”和”classnate”是否相同title accountdata segment org 1000h db classmate

20、org 2000h db classnatedata endscode segment assume cs:code,ds:data,es:data start: mov ax,data mov ds,ax mov si,1000h mov ax,data mov es,ax 比較“classmate”和”classnate”是否相同t比較“classmate”和”classnate”是否相同 mov di,2000h mov cx,11 cld repe cmpsb cmp cx,0 jnz decision1 mov bx,0 ;equation jmp exitdecision1: mo

21、v bx,1 ;not equationexit: mov ah,10ch int 21h code ends end start比較“classmate”和”classnate”是否相同 【例10.8】 【例10.8】試編寫(xiě)一程序,要求比較兩個(gè)字符串STR1和STR所含字符是否相同,若相同則顯示MATCH!,若不相同則顯示NO MATCH!。(程序略)其流程圖如圖10.7所示。 【例10.8】 【例10.8】試編寫(xiě)一程序,要求比較兩個(gè)字符圖10.7 程序流程圖圖10.7 程序流程圖【例10.9】試編一個(gè)程序?qū)⒆謫卧狟UF中所含1的個(gè)數(shù)存入COUNT單元中。要測(cè)出BUF字單元所含1的個(gè)數(shù),首先

22、將BUF中的數(shù)送給寄存器AX,然后將AX寄存器邏輯左移一次,如果CF=1,則表明AX中的最高位為1,則計(jì)數(shù)器CL計(jì)數(shù)1次,如果CF=0,表明AX最高位為0,這樣依次將最高位移入CF中去測(cè)試。移位之后,判斷AX的值是否為0,如果為0則結(jié)束循環(huán),不為0,則繼續(xù)循環(huán)。其流程圖如圖10.8所示。2條件控制 【例10.9】試編一個(gè)程序?qū)⒆謫卧狟UF中所含1的個(gè)數(shù)存入C第10章如何發(fā)揮主機(jī)內(nèi)存各類(lèi)寄存器(位)處理器的功能-匯編語(yǔ)言程序設(shè)計(jì)課件程序如下:STACKSEGMENT STACK DB 200 DUP(0)STACKEDNSDATASEGMENTBUFDW 0011110010101011BCOU

23、NTDB ?DATAENDSCODESEGMENT ASSUME DS:DATA,CS:CODE,SS:STACK 程序如下:START:MOVAX,DATAMOVDS,AXMOVAX,BUFMOVCL,0;計(jì)數(shù)器為0COPA:ANDAX,AXJEEXIT;(AX)=0,結(jié)束循環(huán)SHLAX,1;AX 左移一位JNCLOPAINCCL;產(chǎn)生進(jìn)位,(CL)+1CLJMPLOPAEXIT:MOVCOUNT,CLMOVAH,10CHINT21HCODEENDSENDSTART返回本節(jié)START:MOVAX,DATA返回本節(jié)10.10.3 多重循環(huán)程序設(shè)計(jì)【例10.10】在以BUF為首址的字存儲(chǔ)區(qū)中存放

24、有N個(gè)有符號(hào)數(shù),現(xiàn)需將它們按大到小的順序排列在BUF存儲(chǔ)區(qū)中,試編寫(xiě)其程序。我們采用冒泡排序算法從第一個(gè)數(shù)開(kāi)始依次對(duì)相鄰兩個(gè)數(shù)進(jìn)行比較,如次序?qū)?,則不交換兩數(shù)位置;如次序不對(duì)則使這兩個(gè)數(shù)交換位置??梢钥闯?,第一遍需比較(N-1)次,此時(shí),最小的數(shù)已經(jīng)放到了最后;第二遍比較只需考慮剩下的(N-1)個(gè)數(shù),即只需比較(N-2)次;第三遍只需比較(N-3)次,整個(gè)排序過(guò)程最多需(N-1)遍。如下面的10個(gè)數(shù)即是采用冒泡排序比較的例子。10.10.3 多重循環(huán)程序設(shè)計(jì)【例10.10】在以BUF數(shù)108169032第一遍101690328第二遍169032108第三遍903216108程序流程圖如圖10.

25、9所示。數(shù)108169032第10章如何發(fā)揮主機(jī)內(nèi)存各類(lèi)寄存器(位)處理器的功能-匯編語(yǔ)言程序設(shè)計(jì)課件程序如下:DATASEGMENTBUFDW 3,-10,6,7,9,2,0,-8,-9,-10,20N=(-BUF)/2DATAENDSSTACKSEGNMENT STACKDB 200 DUP(0)STACKENDSCODESEGMENTASSUME CS:CODE,DS:DATA,SS:STACK程序如下:START:MOVAX,DATAMOVDS,AXMOVCX,NDECCXLOOP1:MOVDX,CXMOVBX,0LOOP2:MOVAX,BUFBXCMPAX,BUFBX+2JGELXC

26、HGAX,BUFBX+2MOVBUFBX,AXSTART:MOVAX,DATAL:ADDBX,2DECCXJNELOOP2MOVCX,DXLOOPLOOP1MOVAH,10CHINT21HCODEENDSENDSTARTL:ADDBX,2程序運(yùn)行后,BUF區(qū)中的內(nèi)容如下:20,9,7,6,3,2,0,-10,-8,-9,-10若要對(duì)N個(gè)無(wú)符號(hào)數(shù)按由大到小的順序排列,只需將指令“JGE L”改為“JAE L”即可。 返回本節(jié)程序運(yùn)行后,BUF區(qū)中的內(nèi)容如下:返回本節(jié)10.5 子程序設(shè)計(jì)10.5.1 子程序的概念10.5.2 子程序的定義10.5.3 子程序設(shè)計(jì)方法10.5.10 子程序應(yīng)用舉例返

27、回本章首頁(yè)10.5 子程序設(shè)計(jì)10.5.1 子程序的概念返回本章首10.5.1 子程序的概念在程序設(shè)計(jì)中,我們會(huì)發(fā)現(xiàn)一些多次無(wú)規(guī)律重復(fù)的程序段或語(yǔ)句序列。解決此類(lèi)問(wèn)題一個(gè)行之有效的方法就是將它們?cè)O(shè)計(jì)成可供反復(fù)調(diào)用的獨(dú)立的子程序結(jié)構(gòu),以便在需要時(shí)調(diào)用。在匯編語(yǔ)言中,子程序又稱(chēng)過(guò)程。調(diào)用子程序的程序稱(chēng)為主調(diào)程序或主程序。 返回本節(jié)10.5.1 子程序的概念在程序設(shè)計(jì)中,我們會(huì)發(fā)現(xiàn)一些多10.5.2 子程序的定義子程序的定義是由過(guò)程定義偽指令PROC和ENDP來(lái)完成的。其格式如下:過(guò)程名 PROC NEAR/FAR 過(guò)程名 ENDP其中PROC表示過(guò)程定義開(kāi)始,ENDP表示過(guò)程定義結(jié)束。過(guò)程名是過(guò)程

28、入口地址的符號(hào)表示。一般過(guò)程名同標(biāo)號(hào)一樣,具有三種屬性,即段屬性、偏移地址屬性以及類(lèi)型屬性。 返回本節(jié)10.5.2 子程序的定義子程序的定義是由過(guò)程定義偽指令P10.5.3 子程序設(shè)計(jì)方法1信息的保護(hù)與恢復(fù)2主程序與子程序參數(shù)傳遞方式10.5.3 子程序設(shè)計(jì)方法1信息的保護(hù)與恢復(fù)1信息的保護(hù)與恢復(fù)例如:若子程序PROG中改變了寄存器AX,BX,CX,DX的值,則可采用如下方法保護(hù)和恢復(fù)現(xiàn)場(chǎng)。PROGPROCPUSHAXPUSHBX PUSHCX;保護(hù)現(xiàn)場(chǎng)PUSHDX 1信息的保護(hù)與恢復(fù)例如:若子程序PROG中改變了寄存器AX POPDXPOPCXPOPBX;恢復(fù)現(xiàn)場(chǎng)POPAXRET;返回?cái)帱c(diǎn)處

29、PROCENDP 2主程序與子程序參數(shù)傳遞方式(1)寄存器法(2)約定單元法(3)堆棧法返回本節(jié)2主程序與子程序參數(shù)傳遞方式(1)寄存器法返回本節(jié)10.5.10 子程序應(yīng)用舉例【例10.12】將一個(gè)給定的二進(jìn)制數(shù)按位轉(zhuǎn)換成相應(yīng)的ASCII碼字符串,送到指定的存儲(chǔ)單元并顯示。如二進(jìn)制數(shù)10010011轉(zhuǎn)換成字符串為10010011。要求將轉(zhuǎn)換過(guò)程寫(xiě)成子程序,且子程序應(yīng)具有較好的通用性,而必須能實(shí)現(xiàn)對(duì)8倍和16倍二進(jìn)制數(shù)的轉(zhuǎn)換。10.5.10 子程序應(yīng)用舉例【例10.12】將一個(gè)給定的入口參數(shù):DX存放待轉(zhuǎn)換的二進(jìn)制數(shù)CX存放待轉(zhuǎn)換數(shù)的位數(shù)(8位或16位)DI存放ASCII碼首地址出口參數(shù):轉(zhuǎn)換后

30、的字符串存放在以DI作指針的字節(jié)存貯區(qū)中程序如下:DATASEGMENTNUM8DB93HNUM16DW0ABCDHASCBUFDB20DUP(0)DATAENDS入口參數(shù):DX存放待轉(zhuǎn)換的二進(jìn)制數(shù)CODESEGMENTASSUME DS:DATA,CS:CODE, SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVDX,0MOVDL,NUM8;轉(zhuǎn)換二進(jìn)制數(shù)送DXMOVCX,8;置位數(shù)8LEADI,ASCBUF;字符串首址DICALLBTASC;調(diào)用子程序BTASCMOVDI,BYTE PTR 0DHMOVDI+1,BYTE PTR 0AHCODESEGMENT MOVDI+2,BYTE PTR $LEADX,ASCBUFMOVAH,9INT21HMOVDX,NUM16MOVCX,16;置位數(shù)16LEADI,ASCBUFCALLBTASC MOVDL,BYTE PTR 0DHMOVDL+1,BYTE PTR 0AHMOVDL+2,BYTE PTR ; 顯示轉(zhuǎn)換后的字符串LEADX, ASCBUF MOVAH,9 INT21H MOVDI+2,BYTE PTR $BTASCPROCPUSHAX;保存AXMOVAL,0CMPCX,8;比較8位數(shù)JNEL1

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論