第04章匯編語(yǔ)言程序設(shè)計(jì)0.2m版_第1頁(yè)
第04章匯編語(yǔ)言程序設(shè)計(jì)0.2m版_第2頁(yè)
第04章匯編語(yǔ)言程序設(shè)計(jì)0.2m版_第3頁(yè)
第04章匯編語(yǔ)言程序設(shè)計(jì)0.2m版_第4頁(yè)
第04章匯編語(yǔ)言程序設(shè)計(jì)0.2m版_第5頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余34頁(yè)可下載查看

下載本文檔

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

文檔簡(jiǎn)介

4.1匯編語(yǔ)言程序格式4.1

匯編語(yǔ)言的程序格式4.2

偽指令4.3

匯編語(yǔ)言程序上機(jī)過程4.4

程序設(shè)計(jì)基本方法4.1匯編語(yǔ)言的程序格式4.1.1匯編語(yǔ)言程序的結(jié)構(gòu)4.1.2匯編語(yǔ)言語(yǔ)句類型及格式4.1.3匯編語(yǔ)言的數(shù)據(jù)與表達(dá)式返回1.源程序的一般格式STACKSEGMENT┇STACKENDSDATASEGMENT┇DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:…┇CODEENDSENDSTART例4-1編寫一個(gè)兩字相加的程序。DSEGSEGMENT;定義數(shù)據(jù)段DATA1DW1234H;定義被加數(shù)DATA2DW5678H;定義加數(shù)DSEGENDS;數(shù)據(jù)段結(jié)束ESEGSEGMENT;定義附加段SUMDW2DUP(?);定義存放結(jié)果區(qū)ESEGENDS;附加段結(jié)束CSEGSEGMENT;定義代碼段;下面的語(yǔ)句說明程序中定義的各段分別用哪個(gè)段寄存器尋址

ASSUMECS:CSEG,DS:DSEG,ES:ESEGSTART:MOVAX,DSEG;START為程序開始執(zhí)行的啟動(dòng)標(biāo)號(hào)

MOVDS,AX;初始化DSMOVAX,ESEGMOVES,AX;初始化ESLEASI,SUM;存放結(jié)果的偏移地址送SIMOVAX,DATA1;取被加數(shù)

ADDAX,DATA2;兩數(shù)相加

MOVES:[SI],AX;和送附加段的SUM單元中

HLTCSEGENDS;代碼段結(jié)束

ENDSTART;源程序結(jié)束2.源程序的結(jié)構(gòu)特點(diǎn)(1)匯編語(yǔ)言程序通常由若干段組成,段由偽指令SEGMENT與ENDS定義,各段順序任意,段的數(shù)目按需要確定,原則上不受限制。(2)段由若干語(yǔ)句組成,語(yǔ)句以指令為主體而構(gòu)成。一條語(yǔ)句寫在一行上,書寫時(shí)語(yǔ)句的各部分應(yīng)盡量對(duì)齊(3)匯編語(yǔ)言程序中至少要有一個(gè)啟動(dòng)標(biāo)號(hào),作為程序開始執(zhí)行時(shí)目標(biāo)代碼的入口地址。啟動(dòng)標(biāo)號(hào)常用START、BEGIN、MAIN等命名。(4)為增加程序的可讀性,可在匯編語(yǔ)言語(yǔ)句“;”后加上注釋。返回4.1.2匯編語(yǔ)言語(yǔ)句類型及格式1.匯編語(yǔ)言語(yǔ)句的類型(1)指令語(yǔ)句是可執(zhí)行語(yǔ)句,在匯編中要產(chǎn)生對(duì)應(yīng)的目標(biāo)代碼,CPU根據(jù)這些代碼才能執(zhí)行相應(yīng)的操作。(2)偽指令語(yǔ)句是不可執(zhí)行語(yǔ)句,在匯編中不產(chǎn)生目標(biāo)代碼,用于指示匯編程序如何匯編源程序,利用它定義和說明常量和變量的屬性及存儲(chǔ)器單元的分配等。(3)宏指令語(yǔ)句是以一個(gè)宏名定義的一段指令序列,在匯編中凡是出現(xiàn)宏指令語(yǔ)句的地方,都會(huì)有相應(yīng)的指令語(yǔ)句序列的目標(biāo)代碼插入。2.語(yǔ)句的格式

[標(biāo)號(hào):]<指令助記符>[操作數(shù)][;注釋]

[符號(hào)名]<偽指令助記符>[操作數(shù)][;注釋]返回4.1.3匯編語(yǔ)言的數(shù)據(jù)與表達(dá)式1.常量數(shù)值常量、字符串常量、符號(hào)常量2.變量例4-2用數(shù)據(jù)定義偽指令DB、DW、DD定義變量DATASEGMENTDA1DB12H;定義一個(gè)字節(jié)數(shù)據(jù)DA2DD0FEDCBA90H;定義一個(gè)雙字?jǐn)?shù)據(jù)DA3DW5678H;定義一個(gè)字?jǐn)?shù)據(jù)DATAENDS3.標(biāo)號(hào)4.表達(dá)式和運(yùn)算符算術(shù)運(yùn)算符、邏輯運(yùn)算符、關(guān)系運(yùn)算符、數(shù)值返回運(yùn)算符、(5)修改屬性運(yùn)算符例題例4-3邏輯運(yùn)算符的應(yīng)用MOVAL,NOT10101010B;(AL)←01010101BMOVAL,11110000BAND10111101B;(AL)←10110000BMOVAL,10100000BOR00000101B;(AL)←10100101B例4-4關(guān)系運(yùn)算符的應(yīng)用MOVAX,5EQ101B;(AX)←0FFFFHMOVBH,10HGT16;(BH)←0例4-5數(shù)值返回運(yùn)算符的應(yīng)用K1DB30H,31H,32HK2DW4041H,4043HK3DW20HDUP(0)K4DD50515253HMOVAL,TYPEK1;等效于MOVAL,1MOVAH,TYPEK2;等效于MOVAH,2MOVAL,LENGTHK3;(AL)←20H,返回DUP前面的數(shù)值MOVCL,LENGTHK4;(CL)←01HMOVBL,SIZEK3;(BL)←40HMOVDL,SIZEK4;(DL)←04H例題例4-6段屬性運(yùn)算符的應(yīng)用MOVAX,ES:[BX];用附加段ES取代默認(rèn)的數(shù)據(jù)段DSMOVBL,DS:[BP];用數(shù)據(jù)段DS取代默認(rèn)的堆棧段SS例4-7PTR運(yùn)算符的應(yīng)用N1DB3,6,9MOVAX,WORDPTRN1;臨時(shí)指定N1為字類型,(AX)←0603H例4-8THIS運(yùn)算符的應(yīng)用ABCEQUTHISBYTE;從本語(yǔ)句開始變量ABC的類型屬性指定為字節(jié),不管它原來的類型是什么例4-9HIGH和LOW運(yùn)算符的應(yīng)用NUMEQU2456HMOVAL,HIGHNUM;等效于MOVAL,34HMOVBL,LOWNUM;等效于MOVBL,56H返回4.2偽指令4.2.1符號(hào)定義偽指令4.2.2數(shù)據(jù)定義偽指令4.2.3段定義偽指令4.2.4段尋址偽指令4.2.5過程定義偽指令4.2.6模塊定義與連接偽指令4.2.7宏命令偽指令4.2.8其它偽指令4.2.1符號(hào)定義偽指令1.等值語(yǔ)句例4-10等值語(yǔ)句CREQU0DH;常量TENEQU0AH;常量AAEQUASCII_TABLE;變量VAREQUTEN*2;數(shù)值表達(dá)式ADREQUES:[BP+DI+5];地址表達(dá)式GOTOEQUJMP;指令助記符2.等號(hào)語(yǔ)句例4-11等號(hào)語(yǔ)句NUM=488;定義NUM等于488NUM=NUM+1;定義NUM等于489返回4.2.2數(shù)據(jù)定義偽指令例4-12DATADB11H,33H;定義包含兩個(gè)元素的字節(jié)變量DATANUMDW100*5+88;定義一個(gè)字類型變量NUM,其初值為表達(dá)式的值SUMDQ0011223344556677;將4個(gè)字存入變量SUM。例4-13STR1DB‘COMPUTER’;定義一個(gè)字符串,字符串的首地址為STR1STR2DW‘AA’,‘BC’,‘DE’;給兩個(gè)字符組成的字符串分配兩個(gè)字節(jié)存儲(chǔ)單元DATADW?,?,?;為DATA預(yù)留6個(gè)存儲(chǔ)單元例4-14DATA1DB20DUP(?);為變量DATA1分配20個(gè)字節(jié)的空間,初值為任意值

DATA2DW?;為變量DATA2分配2個(gè)字節(jié)的空間,初值為任意值

DATA3DB20DUP(30H);為變量DATA3分配20個(gè)字節(jié)的空間,初值均為30H返回4.2.3段定義偽指令格式:段名SEGMENT定位類型組合類型類別名┇段名ENDS1.段名一個(gè)段開始和結(jié)尾的段名必須一致,否則會(huì)出現(xiàn)語(yǔ)法錯(cuò)誤2.定位類型(1)BYTE(2)WORD(3)PARA(4)PAGE3.組合類型(1)NONE(2)PUBLIC(3)COMMON(4)STACK(5)MEMORY(6)AT表達(dá)式4.類別名返回4.2.4段尋址偽指令格式:ASSUME段寄存器名:段名,段寄存器名:段名,……例4-15求從NUM開始的12個(gè)無符號(hào)字節(jié)數(shù)的和,結(jié)果放在SUM字單元中。DATASEGMENTNUMDB95H,83H,36H,2DHDB33H,22H,1AH,34HDB62H,45H,75H,49HSUMDW?DATAENDSSTACKSEGMENTDB100DUP(?)STACKENDSCODESEGMENT

ASSUMECS:CODE,DS:DATA,ES:DATA,SS:STACK

BEGIN:MOVAX,DATAMOVDS,AXMOVES,AXMOVAX,STACKMOVSS,AX

LEASI,NUM

MOVCX,12

XORAX,AX

NEXT:ADDAL[SI]

ADCAH,0

INCSI

LOOPNEXT

MOVSUM,AXHLTCODEENDSENDBEGIN返回4.2.5過程定義偽指令格式:過程名PROC[NEAR/FAR]┇[RET] ┇RET

過程名ENDP例4-16編寫一個(gè)延時(shí)50ms的子程序DELAYPROC;定義一個(gè)近過程

PUSHBX;保護(hù)BX原來的內(nèi)容

PUSHCX;保護(hù)CX原來的內(nèi)容

MOVBL,5;外循環(huán)次數(shù)NEXT:MOVCX,2801

;內(nèi)循環(huán)次數(shù)(實(shí)現(xiàn)延時(shí)10ms)W10MS:LOOPW10MS;(CX)≠0則循環(huán)

DECBL;修改外循環(huán)計(jì)數(shù)值

JNZNEXT;(BX)≠0則進(jìn)行外循環(huán)POPCX;恢復(fù)CX原來的內(nèi)容POPBX;恢復(fù)BX原來的內(nèi)容

RET;過程返回DELAYENDP;過程結(jié)束返回4.2.6模塊定義與連接偽指令1.模塊定義偽指令格式:NAME標(biāo)識(shí)符┇END啟動(dòng)標(biāo)號(hào)2.模塊連接偽指令(1)全局符號(hào)偽指令格式:PUBLIC符號(hào)名1,符號(hào)名2,…(2)引用偽指令格式:EXTRN符號(hào)名1:類型,符號(hào)名2:類型,…例題例4-17編程利用乘法模塊計(jì)算X*Y。NAMEMAINCALL;主模塊

EXTRNWMUL:FARSTACKSEGMENTPARASTACK‘STACK’DB100DUP(?)STACKENDSDATASEGMENTPARA‘DATA’XDW3355HYDW8866HDATAENDSCODESEGMENTPARA‘CODE’MAINPROCFARASSUMECS:CODE,DS:DATA,SS:STACKPUSHDSMOVAX,0PUSHAXMOVAX,DATAMOVDS,AXMOVAX,XMOVBX,YCALLWMUL;調(diào)用外部過程WMULRETMAINENDPCODEENDSENDMAIN;主模塊結(jié)束NAMESUBMUL;子模塊CDESGSEGMENTPARA‘CODE’WMULPROCFAR;定義遠(yuǎn)過程WMULASSUMECS:CDESGPUBLICWMUL;定義WMUL為全局過程名

CALLMULAB;嵌套調(diào)用

RET;過程返回WMULENDP;過程結(jié)束MULABPROC;定義一個(gè)近過程MULABMULBXRETMULABENDP;過程結(jié)束CDESGENDS;代碼段結(jié)束

END;子模塊結(jié)束返回4.2.7宏命令偽指令1.宏定義例4-18用宏指令定義兩個(gè)字節(jié)數(shù)相加,結(jié)果存入RESULT單元的操作。ADDMMACROOPR1,OPR2,RESULTMOVAL,OPR1ADDAL,OPR2MOVRESULT,ALENDM2.宏調(diào)用例4-19將例4-18中的宏定義進(jìn)行宏調(diào)用、宏展開操作如下:┇ADDM88,36,SUM┇ADDMBR,TAB,SUM3.宏展開:┇+MOVAL,88+ADDAL,36+MOVSUM,AL┇ +MOVAL,BR+ADDAL,TAB+MOVSUM,AL┇4.宏的取消PURGE

返回4.2.8其它偽指令1.定位偽指令例4-20偽指令ORG和當(dāng)前位置計(jì)數(shù)器值符號(hào)$的應(yīng)用DATASEGMENTORG30HDB1DB12H,34HORG$+20HSTRINGDB‘STRING’┇DATAENDS2.方式選擇偽指令·8086;匯編程序只接受8086/8088的指令,這是默認(rèn)方式·286;匯編程序接受8086/8088及286的指令·286P;除與·286功能相同之外,匯編程序還接受286保護(hù)方式下的指令·386,·386P,·486,·486P含義類推,·586;匯編程序接受8086/8088、286、386、486及586的指令·586P;除與·586功能相同之外,匯編程序還接受586保護(hù)方式下的指令3.簡(jiǎn)化的段定義偽指令·DOSSEG

;標(biāo)記簡(jiǎn)化段,各段順序由系統(tǒng)安排,用于主模塊前面·MODELSMALL;指明內(nèi)存使用模式,指示數(shù)據(jù)與代碼允許使用的長(zhǎng)度·DATA

;定義數(shù)據(jù)段,隱含段名為@DATA·STACK[長(zhǎng)度]

;定義堆棧段,隱含段名為@STACK,并形成SS及SP初值·CODE[名字]

;定義代碼段,隱含段名為@CODE·END

;匯編結(jié)束返回4.3匯編語(yǔ)言程序上機(jī)過程4.3.1建立匯編語(yǔ)言的工作環(huán)境4.3.2上機(jī)操作過程4.3.3DEBUG的使用方法返回4.3.1建立匯編語(yǔ)言的工作環(huán)境編輯程序,文件名匯編程序,文件名MASM.EXE連接程序,文件名LINK.EXE調(diào)試程序,文件名DEBUG.EXELIB.EXE,庫(kù)管理程序CREF.EXE,符號(hào)索引文件處理程序EXE2BIN.EXE,將EXE轉(zhuǎn)換為COM的文件格式轉(zhuǎn)換程序返回4.3.2上機(jī)操作過程1.編輯1.對(duì)編輯完成的源程序在存盤時(shí)擴(kuò)展名必須加寫.ASM2.一定要嚴(yán)格遵守匯編語(yǔ)言書寫格式及段結(jié)構(gòu)的格式來編寫程序2.匯編匯編過程就是將匯編語(yǔ)言源程序轉(zhuǎn)換成機(jī)器能夠識(shí)別的目標(biāo)代碼程序,即OBJ的二進(jìn)制文件。還可生成擴(kuò)展名為.LST的列表文件,擴(kuò)展名為.CRF的符號(hào)索引文件。3.連接所謂連接是用連接程序LINK.EXE把若干個(gè)經(jīng)匯編后產(chǎn)生的.OBJ文件及指定的庫(kù)文件連接起來,產(chǎn)生可執(zhí)行的.EXE文件。4.調(diào)試返回4.3.3DEBUG的使用方法1.DEBUG的運(yùn)行2.DEBUG的主要命令D,顯示內(nèi)存單元內(nèi)容;U,反匯編命令;R,顯示與修改寄存器內(nèi)容;E,修改內(nèi)存單元內(nèi)容;A,匯編命令;T、P,單步執(zhí)行指令;G,連續(xù)執(zhí)行指令;N,指定裝入文件名或?qū)懭胛募?;L,裝入N指定的文件;W,將指定內(nèi)容寫入N指定的文件;Q,退出DEBUG程序,返回操作系統(tǒng)狀態(tài)。返回4.4程序設(shè)計(jì)基本方法4.4.1程序設(shè)計(jì)概述4.4.2順序結(jié)構(gòu)程序設(shè)計(jì)4.4.3分支結(jié)構(gòu)程序設(shè)計(jì)4.4.4循環(huán)結(jié)構(gòu)程序設(shè)計(jì)4.4.5子程序設(shè)計(jì)4.4.6程序設(shè)計(jì)舉例返回

4.4.1程序設(shè)計(jì)概述1.程序設(shè)計(jì)的步驟(1)分析問題(2)建立數(shù)學(xué)模型(3)確定算法。(4)繪制流程圖(5)分配內(nèi)存空間(6)編制程序與靜態(tài)檢查。(7)上機(jī)調(diào)試(8)試運(yùn)行和分析結(jié)果(9)整理資料投入運(yùn)行2.返回DOS的方法MOVAH,4CH;功能號(hào)送AHINT21H;返回DOS3.程序的基本結(jié)構(gòu)順序結(jié)構(gòu),分支結(jié)構(gòu),循環(huán)結(jié)構(gòu)返回4.4.2順序結(jié)構(gòu)程序設(shè)計(jì)例4-21編寫程序,計(jì)算(W-(X*Y+Z-100))/W,其中W、X、Y、Z均為16位帶符號(hào)數(shù),計(jì)算結(jié)果的商存入AX,余數(shù)存入DX。DATASEGMENTWDW268XDW–73YDW48ZDW–85DATAENDSSTACKSEGMENTDW100DUP(?)STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVAX,X;計(jì)算X*YIMULYMOVCX,AX;用CX存儲(chǔ)結(jié)果低位

MOVBX,DX;用BX存儲(chǔ)結(jié)果高位MOVAX,Z;計(jì)算X*Y+Z

CWDADDCX,AXADCBX,DXSUBCX,100SBBBX,0MOVAX,WCWDSUBAX,CXSBBDX,BXIDIVWMOVAH,4CHINT21HCODEENDSENDSTART例題例4-22把非壓縮十進(jìn)制數(shù)DAT1轉(zhuǎn)換為壓縮十進(jìn)制數(shù)。

DOSSEG·MODELSMALL·STACK64H·DATADAT1DW0908H;非壓縮十進(jìn)制數(shù)0908H·CODE BEGIN:MOVAX,@DATAMOVDS,AX MOVAX,DAT1;AX←0908HMOVCL,4;CL←4SALAH,CL;09字節(jié)左移4位,AH=90HROLAX,CL;9008H字循環(huán)左移4位,AX=0089HROLAL,CL;89字節(jié)循環(huán)左移4位,AL=98HMOVBYTEPTRDAT1,AL

;DAT1←98H,壓縮十進(jìn)制數(shù)98HMOVAH,4CH;返回DOSINT21HENDBEGIN返回4.4.3分支結(jié)構(gòu)程序設(shè)計(jì)圖4-1兩路分支結(jié)構(gòu)圖T程序段1條件F程序段2圖4-2多路分支結(jié)構(gòu)圖程序段1多路條件程序段2程序段n…1.兩路分支程序設(shè)計(jì)例4-23用比較指令和條件轉(zhuǎn)移指令實(shí)現(xiàn)兩路分支的程序段?!璏OVAX,M;假定M和N為有符號(hào)數(shù)MOVBX,NCMPAX,BX

;比較M和N的大小,影響標(biāo)志位,準(zhǔn)備條件JGNEXT

;M>N時(shí)轉(zhuǎn)移,注意若M、N為無符號(hào)數(shù)時(shí)用JA指令……;分支程序2JMPDONENEXT:……;分支程序1……DONE:RET例題例4-24已知X是單字節(jié)帶符號(hào)數(shù),請(qǐng)?jiān)O(shè)計(jì)計(jì)算下列表達(dá)式的程序。Y= 程序如下:DATASEGMENTXDB?YDB?DATAENDSCODESEGMENT;代碼段START:PROCFARASSUMECS:CODE,DS:DATAPUSHDS;保存返回地址

MOVAX,0

X+20(X≥0)|X|(X<0)PUSHAXMOVAX,DATA;初始化DSMOVDS,AXMOVAL,X;取數(shù)XCMPAL,0;準(zhǔn)備條件

JNSPLUS;X≥0則轉(zhuǎn)移

NEGAL;X<0則求補(bǔ)

JMPDONEPLUS:ADDAL,20;X≥0時(shí),X+20DONE:MOVY,AL;計(jì)算結(jié)果送YRET;返回STARTENDPCODEENDSENDSTART;匯編結(jié)束2.多路分支程序設(shè)計(jì)SUB1-LSUB1-HSUB2-LSUB2-HSUB3-LSUB3-H圖4-3地址跳轉(zhuǎn)表表首地址JMPSUB1JMPSUB2圖4-4指令跳轉(zhuǎn)表表首地址例題例4-25假設(shè)某企業(yè)有10類人員,對(duì)每類人員的工資各有不同的處理方法和計(jì)算程序。對(duì)于一類人員應(yīng)執(zhí)行程序段CLASS1,二類人員應(yīng)執(zhí)行程序段CLASS2,…,十類人員應(yīng)執(zhí)行程序段CLASS10。TableClass1低位字節(jié)Class1高位字節(jié)Class10高位字節(jié)Class2高位字節(jié)Class10低位字節(jié)Class2低位字節(jié)Table+2Table+18(a)地址跳轉(zhuǎn)表…CLASS10CLASS2CLASS1得到相應(yīng)的分支程序段求表地址取分類號(hào)建立地址跳轉(zhuǎn)表設(shè)置程序初始條件開始結(jié)束(b)程序DATASEGMENTTABLEDWCLASS1,CLASS2,CLASS3,CLASS4,CLASS5DWCLASS6,CLASS7,CLASS8,CLASS9,CLASS10NUMDB?DATAENDSSTACKSEGMENTSTACK

DW100DUP(?)STACKENDSCODESEGMENTMAINPROCFAR

ASSUMECS:CODE,DS:DATA,SS:STACKSTART:PUSHDS

SUBAX,AXPUSHAXMOVAX,DATAMOVDS,AXMOVAL,NUMMOVAH,0SHLAXSUBAX,2LEABX,TABLEADDBX,AXJMP[BX]CLASS1:

……CLASS2:……CLASS10:……RETMAINENDPCODEENDSENDSTART返回循環(huán)初始化循環(huán)體N循環(huán)控制部分Y圖4-6先執(zhí)行后判斷循環(huán)結(jié)構(gòu)循環(huán)體圖4-7先判斷后執(zhí)行循環(huán)結(jié)構(gòu)循環(huán)初始化NY循環(huán)控制部分4.4.4循環(huán)結(jié)構(gòu)程序設(shè)計(jì)例題例4-26把從BUF單元開始的80個(gè)16位無符號(hào)數(shù)按從大到小的順序排列。

DSEGSEGMENTBUFDW80DUP(?)

DSEGENDSCSEGSEGMENTASSUMECS:CSEG,DS:DSEGSTART:MOVAX,DSEGMOVDS,AXLEADI,MEM

MOVBL,79

LOOP1:MOVSI,DI

MOVCL,BLLOOP2:MOVAX,[SI]ADDSI,2CMPAX,[SI]

JNCNEXT

MOVDX,[SI]MOV[SI-2],DXMOV[SI],AXNEXT:DECCL

JNZLOOP2DECBL

JNZLOOP1MOVAH,4CHINT21HCSEGENDSENDSTART返回4.4.5子程序設(shè)計(jì)例4-27通過寄存器傳遞參數(shù),將數(shù)據(jù)塊BUF1中的內(nèi)容傳遞到數(shù)據(jù)塊BUF2中DATASEGMENTBUF1DB11,22,33,……,99CUNTEQU$-BUF1BUF2DBCUNTDUP(?)

DATAENDSSTACKSEGMENTTOSDW128HDUP(?)

STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVAX,STACK

MOVSS,AXMOVSP,OFFSET

┇LEASI,BUF1

LEADI,BUF2

MOVCX,CUNT

CALLSUB1

┇SUB1PROCDON:MOVAL,[SI]MOV[DI],ALINCSIINCDILOOPDON

RETSUB1ENDPMOVAH,4CHINT21HCODEENDSENDSTART例題例4-28當(dāng)I/O狀態(tài)端口0378H的Bit1(D1位)為0時(shí),表示外設(shè)忙;為1則表示外設(shè)可以接收數(shù)據(jù)。試編程根據(jù)外設(shè)的狀態(tài)將當(dāng)前數(shù)據(jù)段中從BUFFER開始的連續(xù)100個(gè)字節(jié)的內(nèi)容從I/O數(shù)據(jù)端口03F8輸出到外設(shè)SDATAPROCFAR

PUSHAX

PUSHDXPUSHSIPUSHCXLEASI,BUFFERMOVCL,100AGAIN:MOVDX,378H

WAIT:INAL,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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)論