版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
4.1匯編語言程序格式4.1
匯編語言的程序格式4.2
偽指令4.3
匯編語言程序上機過程4.4
程序設計基本方法4.1匯編語言的程序格式4.1.1匯編語言程序的結構4.1.2匯編語言語句類型及格式4.1.3匯編語言的數(shù)據(jù)與表達式返回1.源程序的一般格式STACKSEGMENT┇STACKENDSDATASEGMENT┇DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:…┇CODEENDSENDSTART例4-1編寫一個兩字相加的程序。DSEGSEGMENT;定義數(shù)據(jù)段DATA1DW1234H;定義被加數(shù)DATA2DW5678H;定義加數(shù)DSEGENDS;數(shù)據(jù)段結束ESEGSEGMENT;定義附加段SUMDW2DUP(?);定義存放結果區(qū)ESEGENDS;附加段結束CSEGSEGMENT;定義代碼段;下面的語句說明程序中定義的各段分別用哪個段寄存器尋址
ASSUMECS:CSEG,DS:DSEG,ES:ESEGSTART:MOVAX,DSEG;START為程序開始執(zhí)行的啟動標號
MOVDS,AX;初始化DSMOVAX,ESEGMOVES,AX;初始化ESLEASI,SUM;存放結果的偏移地址送SIMOVAX,DATA1;取被加數(shù)
ADDAX,DATA2;兩數(shù)相加
MOVES:[SI],AX;和送附加段的SUM單元中
HLTCSEGENDS;代碼段結束
ENDSTART;源程序結束2.源程序的結構特點(1)匯編語言程序通常由若干段組成,段由偽指令SEGMENT與ENDS定義,各段順序任意,段的數(shù)目按需要確定,原則上不受限制。(2)段由若干語句組成,語句以指令為主體而構成。一條語句寫在一行上,書寫時語句的各部分應盡量對齊(3)匯編語言程序中至少要有一個啟動標號,作為程序開始執(zhí)行時目標代碼的入口地址。啟動標號常用START、BEGIN、MAIN等命名。(4)為增加程序的可讀性,可在匯編語言語句“;”后加上注釋。返回4.1.2匯編語言語句類型及格式1.匯編語言語句的類型(1)指令語句是可執(zhí)行語句,在匯編中要產(chǎn)生對應的目標代碼,CPU根據(jù)這些代碼才能執(zhí)行相應的操作。(2)偽指令語句是不可執(zhí)行語句,在匯編中不產(chǎn)生目標代碼,用于指示匯編程序如何匯編源程序,利用它定義和說明常量和變量的屬性及存儲器單元的分配等。(3)宏指令語句是以一個宏名定義的一段指令序列,在匯編中凡是出現(xiàn)宏指令語句的地方,都會有相應的指令語句序列的目標代碼插入。2.語句的格式
[標號:]<指令助記符>[操作數(shù)][;注釋]
[符號名]<偽指令助記符>[操作數(shù)][;注釋]返回4.1.3匯編語言的數(shù)據(jù)與表達式1.常量數(shù)值常量、字符串常量、符號常量2.變量例4-2用數(shù)據(jù)定義偽指令DB、DW、DD定義變量DATASEGMENTDA1DB12H;定義一個字節(jié)數(shù)據(jù)DA2DD0FEDCBA90H;定義一個雙字數(shù)據(jù)DA3DW5678H;定義一個字數(shù)據(jù)DATAENDS3.標號4.表達式和運算符算術運算符、邏輯運算符、關系運算符、數(shù)值返回運算符、(5)修改屬性運算符例題例4-3邏輯運算符的應用MOVAL,NOT10101010B;(AL)←01010101BMOVAL,11110000BAND10111101B;(AL)←10110000BMOVAL,10100000BOR00000101B;(AL)←10100101B例4-4關系運算符的應用MOVAX,5EQ101B;(AX)←0FFFFHMOVBH,10HGT16;(BH)←0例4-5數(shù)值返回運算符的應用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段屬性運算符的應用MOVAX,ES:[BX];用附加段ES取代默認的數(shù)據(jù)段DSMOVBL,DS:[BP];用數(shù)據(jù)段DS取代默認的堆棧段SS例4-7PTR運算符的應用N1DB3,6,9MOVAX,WORDPTRN1;臨時指定N1為字類型,(AX)←0603H例4-8THIS運算符的應用ABCEQUTHISBYTE;從本語句開始變量ABC的類型屬性指定為字節(jié),不管它原來的類型是什么例4-9HIGH和LOW運算符的應用NUMEQU2456HMOVAL,HIGHNUM;等效于MOVAL,34HMOVBL,LOWNUM;等效于MOVBL,56H返回4.2偽指令4.2.1符號定義偽指令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符號定義偽指令1.等值語句例4-10等值語句CREQU0DH;常量TENEQU0AH;常量AAEQUASCII_TABLE;變量VAREQUTEN*2;數(shù)值表達式ADREQUES:[BP+DI+5];地址表達式GOTOEQUJMP;指令助記符2.等號語句例4-11等號語句NUM=488;定義NUM等于488NUM=NUM+1;定義NUM等于489返回4.2.2數(shù)據(jù)定義偽指令例4-12DATADB11H,33H;定義包含兩個元素的字節(jié)變量DATANUMDW100*5+88;定義一個字類型變量NUM,其初值為表達式的值SUMDQ0011223344556677;將4個字存入變量SUM。例4-13STR1DB‘COMPUTER’;定義一個字符串,字符串的首地址為STR1STR2DW‘AA’,‘BC’,‘DE’;給兩個字符組成的字符串分配兩個字節(jié)存儲單元DATADW?,?,?;為DATA預留6個存儲單元例4-14DATA1DB20DUP(?);為變量DATA1分配20個字節(jié)的空間,初值為任意值
DATA2DW?;為變量DATA2分配2個字節(jié)的空間,初值為任意值
DATA3DB20DUP(30H);為變量DATA3分配20個字節(jié)的空間,初值均為30H返回4.2.3段定義偽指令格式:段名SEGMENT定位類型組合類型類別名┇段名ENDS1.段名一個段開始和結尾的段名必須一致,否則會出現(xiàn)語法錯誤2.定位類型(1)BYTE(2)WORD(3)PARA(4)PAGE3.組合類型(1)NONE(2)PUBLIC(3)COMMON(4)STACK(5)MEMORY(6)AT表達式4.類別名返回4.2.4段尋址偽指令格式:ASSUME段寄存器名:段名,段寄存器名:段名,……例4-15求從NUM開始的12個無符號字節(jié)數(shù)的和,結果放在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編寫一個延時50ms的子程序DELAYPROC;定義一個近過程
PUSHBX;保護BX原來的內(nèi)容
PUSHCX;保護CX原來的內(nèi)容
MOVBL,5;外循環(huán)次數(shù)NEXT:MOVCX,2801
;內(nèi)循環(huán)次數(shù)(實現(xiàn)延時10ms)W10MS:LOOPW10MS;(CX)≠0則循環(huán)
DECBL;修改外循環(huán)計數(shù)值
JNZNEXT;(BX)≠0則進行外循環(huán)POPCX;恢復CX原來的內(nèi)容POPBX;恢復BX原來的內(nèi)容
RET;過程返回DELAYENDP;過程結束返回4.2.6模塊定義與連接偽指令1.模塊定義偽指令格式:NAME標識符┇END啟動標號2.模塊連接偽指令(1)全局符號偽指令格式:PUBLIC符號名1,符號名2,…(2)引用偽指令格式:EXTRN符號名1:類型,符號名2:類型,…例題例4-17編程利用乘法模塊計算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;主模塊結束NAMESUBMUL;子模塊CDESGSEGMENTPARA‘CODE’WMULPROCFAR;定義遠過程WMULASSUMECS:CDESGPUBLICWMUL;定義WMUL為全局過程名
CALLMULAB;嵌套調(diào)用
RET;過程返回WMULENDP;過程結束MULABPROC;定義一個近過程MULABMULBXRETMULABENDP;過程結束CDESGENDS;代碼段結束
END;子模塊結束返回4.2.7宏命令偽指令1.宏定義例4-18用宏指令定義兩個字節(jié)數(shù)相加,結果存入RESULT單元的操作。ADDMMACROOPR1,OPR2,RESULTMOVAL,OPR1ADDAL,OPR2MOVRESULT,ALENDM2.宏調(diào)用例4-19將例4-18中的宏定義進行宏調(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和當前位置計數(shù)器值符號$的應用DATASEGMENTORG30HDB1DB12H,34HORG$+20HSTRINGDB‘STRING’┇DATAENDS2.方式選擇偽指令·8086;匯編程序只接受8086/8088的指令,這是默認方式·286;匯編程序接受8086/8088及286的指令·286P;除與·286功能相同之外,匯編程序還接受286保護方式下的指令·386,·386P,·486,·486P含義類推,·586;匯編程序接受8086/8088、286、386、486及586的指令·586P;除與·586功能相同之外,匯編程序還接受586保護方式下的指令3.簡化的段定義偽指令·DOSSEG
;標記簡化段,各段順序由系統(tǒng)安排,用于主模塊前面·MODELSMALL;指明內(nèi)存使用模式,指示數(shù)據(jù)與代碼允許使用的長度·DATA
;定義數(shù)據(jù)段,隱含段名為@DATA·STACK[長度]
;定義堆棧段,隱含段名為@STACK,并形成SS及SP初值·CODE[名字]
;定義代碼段,隱含段名為@CODE·END
;匯編結束返回4.3匯編語言程序上機過程4.3.1建立匯編語言的工作環(huán)境4.3.2上機操作過程4.3.3DEBUG的使用方法返回4.3.1建立匯編語言的工作環(huán)境編輯程序,文件名匯編程序,文件名MASM.EXE連接程序,文件名LINK.EXE調(diào)試程序,文件名DEBUG.EXELIB.EXE,庫管理程序CREF.EXE,符號索引文件處理程序EXE2BIN.EXE,將EXE轉(zhuǎn)換為COM的文件格式轉(zhuǎn)換程序返回4.3.2上機操作過程1.編輯1.對編輯完成的源程序在存盤時擴展名必須加寫.ASM2.一定要嚴格遵守匯編語言書寫格式及段結構的格式來編寫程序2.匯編匯編過程就是將匯編語言源程序轉(zhuǎn)換成機器能夠識別的目標代碼程序,即OBJ的二進制文件。還可生成擴展名為.LST的列表文件,擴展名為.CRF的符號索引文件。3.連接所謂連接是用連接程序LINK.EXE把若干個經(jīng)匯編后產(chǎn)生的.OBJ文件及指定的庫文件連接起來,產(chǎn)生可執(zhí)行的.EXE文件。4.調(diào)試返回4.3.3DEBUG的使用方法1.DEBUG的運行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程序設計基本方法4.4.1程序設計概述4.4.2順序結構程序設計4.4.3分支結構程序設計4.4.4循環(huán)結構程序設計4.4.5子程序設計4.4.6程序設計舉例返回
4.4.1程序設計概述1.程序設計的步驟(1)分析問題(2)建立數(shù)學模型(3)確定算法。(4)繪制流程圖(5)分配內(nèi)存空間(6)編制程序與靜態(tài)檢查。(7)上機調(diào)試(8)試運行和分析結果(9)整理資料投入運行2.返回DOS的方法MOVAH,4CH;功能號送AHINT21H;返回DOS3.程序的基本結構順序結構,分支結構,循環(huán)結構返回4.4.2順序結構程序設計例4-21編寫程序,計算(W-(X*Y+Z-100))/W,其中W、X、Y、Z均為16位帶符號數(shù),計算結果的商存入AX,余數(shù)存入DX。DATASEGMENTWDW268XDW–73YDW48ZDW–85DATAENDSSTACKSEGMENTDW100DUP(?)STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVAX,X;計算X*YIMULYMOVCX,AX;用CX存儲結果低位
MOVBX,DX;用BX存儲結果高位MOVAX,Z;計算X*Y+Z
CWDADDCX,AXADCBX,DXSUBCX,100SBBBX,0MOVAX,WCWDSUBAX,CXSBBDX,BXIDIVWMOVAH,4CHINT21HCODEENDSENDSTART例題例4-22把非壓縮十進制數(shù)DAT1轉(zhuǎn)換為壓縮十進制數(shù)。
DOSSEG·MODELSMALL·STACK64H·DATADAT1DW0908H;非壓縮十進制數(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,壓縮十進制數(shù)98HMOVAH,4CH;返回DOSINT21HENDBEGIN返回4.4.3分支結構程序設計圖4-1兩路分支結構圖T程序段1條件F程序段2圖4-2多路分支結構圖程序段1多路條件程序段2程序段n…1.兩路分支程序設計例4-23用比較指令和條件轉(zhuǎn)移指令實現(xiàn)兩路分支的程序段。…MOVAX,M;假定M和N為有符號數(shù)MOVBX,NCMPAX,BX
;比較M和N的大小,影響標志位,準備條件JGNEXT
;M>N時轉(zhuǎn)移,注意若M、N為無符號數(shù)時用JA指令……;分支程序2JMPDONENEXT:……;分支程序1……DONE:RET例題例4-24已知X是單字節(jié)帶符號數(shù),請設計計算下列表達式的程序。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;準備條件
JNSPLUS;X≥0則轉(zhuǎn)移
NEGAL;X<0則求補
JMPDONEPLUS:ADDAL,20;X≥0時,X+20DONE:MOVY,AL;計算結果送YRET;返回STARTENDPCODEENDSENDSTART;匯編結束2.多路分支程序設計SUB1-LSUB1-HSUB2-LSUB2-HSUB3-LSUB3-H圖4-3地址跳轉(zhuǎn)表表首地址JMPSUB1JMPSUB2圖4-4指令跳轉(zhuǎn)表表首地址例題例4-25假設某企業(yè)有10類人員,對每類人員的工資各有不同的處理方法和計算程序。對于一類人員應執(zhí)行程序段CLASS1,二類人員應執(zhí)行程序段CLASS2,…,十類人員應執(zhí)行程序段CLASS10。TableClass1低位字節(jié)Class1高位字節(jié)Class10高位字節(jié)Class2高位字節(jié)Class10低位字節(jié)Class2低位字節(jié)Table+2Table+18(a)地址跳轉(zhuǎn)表…CLASS10CLASS2CLASS1得到相應的分支程序段求表地址取分類號建立地址跳轉(zhuǎn)表設置程序初始條件開始結束(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)結構循環(huán)體圖4-7先判斷后執(zhí)行循環(huán)結構循環(huán)初始化NY循環(huán)控制部分4.4.4循環(huán)結構程序設計例題例4-26把從BUF單元開始的80個16位無符號數(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子程序設計例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當I/O狀態(tài)端口0378H的Bit1(D1位)為0時,表示外設忙;為1則表示外設可以接收數(shù)據(jù)。試編程根據(jù)外設的狀態(tài)將當前數(shù)據(jù)段中從BUFFER開始的連續(xù)100個字節(jié)的內(nèi)容從I/O數(shù)據(jù)端口03F8輸出到外設SDATAPROCFAR
PUSHAX
PUSHDXPUSHSIPUSHCXLEASI,BUFFERMOVCL,100AGAIN:MOVDX,378H
WAIT:INAL,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025裝修合同的維修期限可以約定
- 2024版外墻內(nèi)保溫勞務分包合同
- 2025掛靠公司資質(zhì)合同
- 2025前臺行政人員聘任合同范本
- 2025年學校水電維修及改造工程合同2篇
- 2025議標、直接委托及合同管理流程
- 2025年度煤炭居間合作合同-能源產(chǎn)業(yè)鏈整合3篇
- 2025年度校園小賣部租賃及配送服務合同2篇
- 二零二五年度黨建合作共建工作實施方案合同6篇
- 2024年網(wǎng)絡金融服務創(chuàng)新合同
- 四人合伙投資協(xié)議書范本
- 成都市農(nóng)貿(mào)市場建設技術要求(2019年版)(完整版)
- 2024-2030年版中國IPVPN服務行業(yè)發(fā)展現(xiàn)狀及投資商業(yè)模式分析報告
- 【7歷期末】安徽省蕪湖市弋江區(qū)2023~2024學年七年級上學期期末考試歷史試卷(含解析)
- 北京市海淀區(qū)2021-2022學年第一學期四年級期末考試語文試卷(含答案)
- 2024-2030年中國企業(yè)大學行業(yè)運作模式發(fā)展規(guī)劃分析報告
- 房地產(chǎn)激勵培訓
- 山東省濟南市2023-2024學年高二上學期期末考試地理試題 附答案
- 期末復習試題1(試題)-2024-2025學年二年級上冊數(shù)學北師大版
- 通用電子嘉賓禮薄
- DNA 親子鑒定書 范本
評論
0/150
提交評論