微機原理第4章_第1頁
微機原理第4章_第2頁
微機原理第4章_第3頁
微機原理第4章_第4頁
微機原理第4章_第5頁
已閱讀5頁,還剩120頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第4章

匯編語言程序設(shè)計1主要內(nèi)容匯編語言源程序的結(jié)構(gòu)匯編語言語句格式偽指令功能調(diào)用匯編語言程序設(shè)計2§4.1匯編語言源程序了解:匯編語言源程序的結(jié)構(gòu)匯編語言語句類型及格式3計算機的語言1.機器語言用二進制碼表示指令和數(shù)據(jù)的語言。計算機能直接識別和執(zhí)行。2.匯編語言用指令助記符、符號地址、標(biāo)號和偽指令等來書寫程序。3.高級語言接近人類的語言4一、匯編語言源程序結(jié)構(gòu)51.匯編語言源程序與匯編程序匯編語言源程序匯編程序用助記符編寫匯編程序匯編語言源程序機器語言目標(biāo)程序源程序的翻譯程序62.匯編語言程序設(shè)計與執(zhí)行過程輸入?yún)R編語言源程序(EDIT)匯編(MASM)鏈接(LINK)調(diào)試(TD,DEBUG)源文件.ASM目標(biāo)文件.OBJ可執(zhí)行文件.EXE最終程序73.匯編語言源程序結(jié)構(gòu)數(shù)據(jù)段名SEGMENT…數(shù)據(jù)段名ENDS附加段名SEGMENT…附加段名ENDS堆棧段名SEGMENT…堆棧段名ENDS代碼段名SEGMENT…代碼段名ENDS

END

8匯編語言源程序結(jié)構(gòu)一個源程序由多個邏輯段組成??梢杂卸鄠€代碼段、多個數(shù)據(jù)段、附加段和堆棧段。一個源程序模塊只能可以有一個代碼段,一個數(shù)據(jù)段,一個附加段,一個堆棧段。源程序的結(jié)構(gòu)框架:9段名1SEGMENT段名1ENDS段名2SEGMENT段名2ENDS段名NSEGMENT段名NENDS10二、匯編語言語句類型及格式111.匯編語言語句類型指令性語句指示性語句CPU執(zhí)行的語句,能夠生成目標(biāo)代碼CPU不執(zhí)行,而由匯編程序執(zhí)行的語句,不生成目標(biāo)代碼12指示性語句稱:偽指令偽操作語句132.匯編語言語句格式

指令性語句:[標(biāo)號:][前綴]助記符[操作數(shù)][,操作數(shù)]][;注釋]指令的符號地址標(biāo)號后要有冒號操作碼注釋前加分號14指示性語句格式[名字]偽指令助記符操作數(shù)[,操作數(shù),…][;注釋]變量的符號地址其后不加冒號指示性語句中至少有一個操作數(shù)153.標(biāo)號、名字標(biāo)號后有冒號,在指令性語句前;名字后不加冒號,在指示性語句前。由英文字母、數(shù)字及專用字符組成,最大長度不能超過31個,且不能由數(shù)字打頭,不能用保留字(如寄存器名,指令助記符,偽指令)。 164.操作碼指令碼偽指令助記符指示匯編程序要完成的操作。作用:定義變量分配存儲單元指示程序開始和結(jié)束等命令CPU要完成的操作175.注釋用分號作為注釋的開始;用于說明程序或語句的功能,以便于閱讀和理解186.操作數(shù)寄存器存儲器單元常量變量或標(biāo)號數(shù)據(jù)項表達式19三.數(shù)據(jù)項及表達式201、常量數(shù)字常量,可用不同進制表示:B,D,H.字符串常量例:‘A’MOVAL,’A’例:’ABCD’匯編時被譯成對應(yīng)的ASCII碼41H,42H,43H,44H用單引號引起的字符或字符串212、變量代表內(nèi)存中的數(shù)據(jù)區(qū),程序中視為存儲器操作數(shù)變量的屬性:變量所在段的段地址變量單元地址與段首地址之間的位移量。字節(jié)型、字型和雙字型等段值偏移量類型223、標(biāo)號代表一條指令的存儲單元的符號地址。具有三種屬性:段屬性、偏移屬性、類型(NEARFAR)。234、表達式求值的計算交給匯編程序完成

244、表達式算術(shù)運算邏輯運算關(guān)系運算取值運算和屬性運算其它運算25算術(shù)運算和邏輯運算符算術(shù)運算符+,-,*,/,MOD邏輯運算符AND,OR,NOT,XOR例:MOVAL,8AND4MOVAL,8+4-126問題(1)變量和標(biāo)號各有那三種屬性?匯編語言有那幾種語句類型?27關(guān)系運算符表示關(guān)系是否成立的運算符參與關(guān)系運算的必須是兩個數(shù)值關(guān)系成立,結(jié)果=FFFFH關(guān)系不成立,結(jié)果=0。運算符:EQ,NE,LT,GT,LE,GE例:MOVAL,3LT428取值運算符取得其后變量或標(biāo)號的偏移地址取得其后變量或標(biāo)號的段地址

用于分析存儲器操作數(shù)的屬性O(shè)FFSETSEG29取值運算符例

MOVAX,SEGDATAMOVDS,AXMOVBX,OFFSETDATA

LEABX,DATA等價于30屬性運算符用于指定其后存儲器操作數(shù)的類型運算符:PTR例:

MOVBYTEPTR[BX],12HCALLDWORDPTR[BX]

(改變變量的屬性)31其它運算符方括號:存儲器操作數(shù)[]段重設(shè)符

段寄存器名:[]方括號中內(nèi)容為操作數(shù)的偏移地址用于修改默認(rèn)的段基地址32§4.2

偽指令掌握:偽指令的格式及實現(xiàn)的操作偽指令的應(yīng)用33偽指令由匯編程序執(zhí)行的指令,CPU不執(zhí)行。作用:定義變量;分配存儲區(qū)定義邏輯段;指示程序開始和結(jié)束;定義過程等。34常用偽指令數(shù)據(jù)定義偽指令符號定義偽指令段定義偽指令結(jié)束偽指令過程定義偽指令宏命令偽指令35一、數(shù)據(jù)定義偽指令用于定義數(shù)據(jù)區(qū)中變量的類型及大小格式:

[變量名]偽指令助記符操作數(shù),…;[注釋]表示符號地址定義變量類型定義變量值及區(qū)域大小361.數(shù)據(jù)定義偽指令助記符DB

定義的變量為字節(jié)型DW

定義的變量為字類型(雙字節(jié))DD

定義的變量為雙字型(4字節(jié))DQ定義的變量為4字型(8字節(jié))DT定義的變量為10字節(jié)型37數(shù)據(jù)定義偽指令例DATA1DB11H,22H,33H,44HDATA2DW11H,22H,3344HDATA3DD22H,33445566H以上變量在內(nèi)存中的存放形式38數(shù)據(jù)定義偽指令的幾點說明偽指令的性質(zhì)決定所定義變量的屬性;定義字符串必須用DB偽指令,DW最多兩個字符。例:

DATA1DB‘ABCD’,66H‘A’‘B’‘C’‘D’41H42H43H44H66H392.重復(fù)操作符DUP作用:為一個數(shù)據(jù)區(qū)的各單元設(shè)置相同的初值目的:常用于聲明一個數(shù)據(jù)區(qū)格式:

[變量名]偽指令助記符nDUP(初值,…)n為重復(fù)次數(shù),圓括號中為重復(fù)內(nèi)容??汕短住@?/p>

DW20DUP(0)

403.“?”的作用表示隨機值,用于預(yù)留存儲空間MEM1DB34H,’A’,?DW20DUP(?)預(yù)留40個字節(jié)單元,每單元為隨機值隨機數(shù)占1個字節(jié)單元41數(shù)據(jù)定義偽指令例M1DB‘Howareyou?’M2DW3DUP(11H),3344H

DB4DUP(?)M3DB3DUP(22H,11H,?)變量在內(nèi)存中的分區(qū)42數(shù)據(jù)定義偽指令例M1‘H’‘o’‘w’‘‘‘a(chǎn)’M211H11H00H44H33H‘r’‘e’‘‘‘y’‘o’‘u’‘?’11H00H00H隨機數(shù)M311H22H11H22H11H22HXXXXXXXXXXXXXX43二、符號定義偽指令1.格式:

符號名EQU 表達式操作:用符號名取代后邊的表達式,不可重新定義例:

CONSTANT EQU 100

VAREQU30H+99HEQU說明的表達式不占用內(nèi)存空間44二、符號定義偽指令2.符號名=表達式可對同一符號重新定義。45三、段定義偽指令說明邏輯段的起始和結(jié)束;說明不同程序模塊中同類邏輯段之間的聯(lián)系形態(tài)源程序由許多邏輯段組成,段定義偽指令定義邏輯段。46段定義偽指令格式段名SEGMENT[定位類型][組合類型][’類別’]

┇段名ENDS說明邏輯段的起點說明不同模塊中同名段的組合和連接方式47定位類型(了解)PARA:段的起點從節(jié)邊界開始(16個字節(jié)為1節(jié))BYTE:段的起點從存儲器任何地址開始WORD:段的起點從偶地址開始PAGE:段的起點從頁邊界開始(256個字節(jié)為1頁)48組合類型(了解)與其它模塊中的同名段在滿足定位類型的前提下具有的組合方式:NONE:不組合PUBLIC:依次連接(順序由LINK程序確定)COMMON:覆蓋連接STACK:堆棧段的依次連接AT表達式:段定義在表達式值為段基的節(jié)邊界MEMORY:相應(yīng)段在同名段的最高地址處。第1個為MEMORY,其他為COMMON49類別(了解)不同模塊連接時將相同類別的段放在連續(xù)的內(nèi)存區(qū)域中50段定義偽指令例DATASEGMENTPUBLIC‘CODE’MEM1DB11H,22HDATAENDSPUBLIC依次連接51四、設(shè)定段寄存器偽指令說明所定義邏輯段的性質(zhì),段名與段寄存器聯(lián)系起來.格式:

ASSUME段寄存器名:段名[,段寄存器名:段名,…]52段寄存器的初始化除CS自動裝入外,其他由用戶裝入段地址。53五、結(jié)束偽指令表示源程序結(jié)束格式:

END[標(biāo)號]54五、結(jié)束偽指令標(biāo)號表示程序執(zhí)行的開始。END將標(biāo)號的段地址和偏移地址分別裝入CS和IP中。55一個完整源程序結(jié)構(gòu)例DSEGSEGMENTDATA1DB1,2,DATA2DW1234HDSEGENDSESEGSEGMENTDB20DUP(?)ESEGENDSSSEGSEGMENTSTACK‘STACK’DB200DUP(?)SSEGENDS56一個完整源程序結(jié)構(gòu)例

CSEGSEGMENTASSUMECS:CSEG,DS:DSEG,ES:ESEG,SS:SSEG

START:MOVAX,DSEGMOVDS,AXMOVAX,ESEGMOVES,AXMOVAX,SSEGMOVSS,AX┇CSEGENDS

ENDSTART源程序代碼57六、過程定義偽指令用于定義一個過程體格式:

過程名PROC[NEAR/FAR]┇RET

過程名ENDPNEAR是默認(rèn)類型,可以省略??梢郧短?。P162例過程入口的符號地址58嵌套NAME1PROCFAR………..CALLNAME2…….RETNAME2PROC……RETNAME2ENDPNAME1ENDP59例4-6編寫1個10ms延時的子程序。程序段:DELAY

PROC

PUSHBXPUSHCXMOVBL,260例4-6NEXT:MOVCX,4167W10MS:LOOPW10MSDECBLJNZNEXTPOPCXPOPBXRETDELAY

ENDP61問題:程序1)功能

?1)

DATASEGMENTARTDW87H,18H,26H,34H,66H,……….SUMDW?

DATAENDS

CODESEGMENTASSUMECS:CODE,DS:DATA

START:MOVAX,DATA;MOVDS,AX;MOVCX,0032H;62程序1)功能?MOVBX,OFFSETART;MOVAX,0;NEXT:ADDAX,[BX];INCBX;INCBX;

LOOPNEXT;MOVSUM,AX;

CODEENDSENDSTART該程序的功能什么。63程序2)功能?

2)DATASEGMENTBUFFDW100DUP(?)BUFF2DW100DUP(?)

DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,ES:DATA64程序2)功能?STARTPROCFAR

PUSHDS;返回DOS做準(zhǔn)備MOVAX,0PUSHAXMOVAX,DATAMOVDS,AXMOVES,AX65程序2)功能?L1:LEASI,BUFFLEADI,BUFF2CLDMOVCX,100

REPMOVSWSTARTENDP

CODEENDSENDSTART66七、宏命令偽指令

源程序中由匯編程序識別的具有獨立功能的一段程序代碼格式:

宏命令名MACRO<形式參數(shù)>

┇ENDM宏體P163例宏67例4-7p163兩個數(shù)的和的宏定義和宏調(diào)用。宏定義:DADDMARCOX,Y,ZMOVAX,XADDAX,YMOVZ,AXENDM68例4-7調(diào)用:DADDDATA1,DATA2,SUM宏展開:MOVAX,DATA1ADDAX,DATA2MOVSUM,AX宏調(diào)用與過程調(diào)用的差別:替換、不節(jié)省內(nèi)存、執(zhí)行速度快。69八、其它偽指令

段內(nèi)程序代碼或變量的起始偏移地址格式:

ORG表達式例:

ORG2000H計算值為非負(fù)常數(shù)ORG70ORGDATASEGMENT

ORG100HARTDB12H,34H,67HDATAENDSMOVBX,OFFSETART

BX=?71其它偽指令(了解)NAME為目標(biāo)程序設(shè)定一個名字格式:

NAME模塊名TITLE為程序清單指定打印標(biāo)題格式:

TITLE標(biāo)題名可以缺省72完整程序結(jié)構(gòu)的例4--8DATASEGMENTTABLEDB12H,23H,34H,45H,56HDB67H,78H,89H,9AH,0FDHSUMDW?DATAENDS;CODESEGMENT73例4-8ASSUMECS:CODE,DS:DATA,ES:DATASTART:MOVAX,DATAMOVDS,AXMOVES,AXLEASI,TABLEMOVCX,10XORAX,AX

74例4-8NEXT:ADDAL,[SI]ADCAH,0INCSI

LOOPNEXTMOVESUM,AXHLTCODEENDSENDSTART75作業(yè)4.14.24.1576§4.3功能調(diào)用DOS功能調(diào)用BIOS功能調(diào)用用軟中斷指令I(lǐng)NTn來實現(xiàn)。77DOS功能調(diào)用包含多個子功能的功能包,用軟中斷指令調(diào)用,中斷類型碼固定為21H;各子功能采用功能號來區(qū)分。附錄D78DOS功能調(diào)用設(shè)備管理目錄管理文件管理其它79DOS功能調(diào)用調(diào)用格式:

MOVAH,功能號<置相應(yīng)參數(shù)>

INT21H80一、單字符輸入功能號為1、7、8(7、8無回顯)調(diào)用方法:

MOVAH,01INT21H輸入的字符在AL中81單字符輸入例GET_KEY:

MOV AH,1

INT 21H

CMP AL,’Y’ JZ YES CMP AL,’N’ JZ NO JNZ GET_KEY

YES:┇ NO: ┇交互式應(yīng)答程序82二、字符串輸入注意問題:調(diào)用格式字符輸入緩沖區(qū)的定義831.調(diào)用格式

功能號OAH字符串的輸入緩沖區(qū)存放地址INT21HAHDS:DX842.定義字符緩沖區(qū)用戶自定義緩沖區(qū)格式:N1N2整個緩沖區(qū)最大可鍵入字符數(shù)實際鍵入字符數(shù)存放鍵入的字符存放字符個數(shù):≤6553385輸入字符串程序段DAT1DB20,?,20DUP(?)┇

LEADX,DAT1MOVAH,0AHINT21H在數(shù)據(jù)段中定義86輸入緩沖區(qū)14H?20個字節(jié)定義后的輸入緩沖區(qū)初始狀態(tài):87三、單字符顯示輸出功能號O2H、06H待輸出字符INT21HAHDL88單字符顯示輸出例MOV AH,02MOV DL,41HINT 21H

執(zhí)行結(jié)果:屏幕顯示A89四、字符串輸出顯示

功能號O9H待輸出字符串的偏移地址INT21HAHDS:DX90字符串輸出顯示被顯示的字符串必須以‘$’結(jié)束,且所顯示的內(nèi)容不應(yīng)出現(xiàn)非可見的ASCII碼.字符串結(jié)束前可加回車與換行的ASCII碼0DH與OAH。91字符串輸出顯示例DATA SEGMENTMESS1DB‘InputString:’0DH,0AH,’$’DATAENDSCODESEGMENT

┇MOV AH,09MOV DX,OFFSETMESS1INT 21H

┇92§4.4匯編語言程序設(shè)計設(shè)計步驟:根據(jù)實際問題抽象出數(shù)學(xué)模型確定算法畫程序流程圖分配內(nèi)存工作單元和寄存器程序編碼調(diào)試93程序流程圖符號起始:功能:判斷:子過程:94問題(3)說明程序段功能并說明程序段完成什么功能。

SORTPROCFARPUSHDXPUSHAXMOVDX,08EAHCOM1:INAL,DX95說明程序段功能問題TESTAL,80H

JZCOM1;b7=0MOVDX,08E8H;b7=1INAX,DXMOVBUFF,ALPOPAXPOPDXRETSORTENDP96匯編語言程序結(jié)構(gòu)順序結(jié)構(gòu).P172例4--14循環(huán)結(jié)構(gòu).P176先判定型后判定型分枝結(jié)構(gòu).P173單分枝多分枝子程序結(jié)構(gòu).P17897順序結(jié)構(gòu)例4—14(1)編寫計算S=86H*34H-21H的程序。三個操作數(shù)是無符號數(shù),結(jié)果是字類型。DATASEGMENTNUMDB86H,34H,21H;三個操作數(shù)RESULTDW?;存結(jié)果DATAENDS98例4—14(2)CODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXLEASI,NUMLEADI,RESULT99例4—14(3)MOVAL,[SI]MOVBL,[SI+1]MULBL;AX86H*34HMOVBL,[SI+2]MOVBH,0;BX21HSUBAX,BXMOV[DI],AXMOVAH,4CH;返回DOSINT21HCODEENDSENDSTART100分枝結(jié)構(gòu)根據(jù)不同的條件轉(zhuǎn)移到不同的程序段執(zhí)行?;窘Y(jié)構(gòu)P174圖4--5101例4—16(1)

以BUFFER為首地址的100個字節(jié)清零。DATASEGMENTBUFFERDB100DUP(?) COUNTDW100;數(shù)據(jù)區(qū)長度DATAENDS;STACKSEGMENTDW32DUP(?)STACKENDS

102例4—16(2)CODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATA;裝填DS,SSMOVDS,AXMOVAX,STACKMOVSS,AXMOVCX,COUNT

LEABX,BUFFER

ADDCX,BX103例4—16(3)AGAIN:MOVBYTEPTR[BX],0;清0INCBXCMPBX,CX

JBAGAIN;BX<CXMOVAH,4CH;BX=CXINT21HCODEENDSENDSTART104循環(huán)結(jié)構(gòu)由三部分組成:循環(huán)初始化、循環(huán)體、循環(huán)控制。兩種類型:1.先執(zhí)行循環(huán)體,再判斷條件

2.先檢查條件,再是否執(zhí)行循環(huán)體。

P176圖4--6105例4--18100個無符號數(shù)從小到大排列。是一個雙重循環(huán)程序。106例4—18(1)DSEGSEGMENTMEMDW100DUP(?)DSEGENDS;107例4—18(2)CSEGSEGMENTASSUMECS:CSEG,DS:DSEGSTART:MOVAX,DSEGMOVDS,AX

LEADI,MEMMOVBL,99108例4—18(3)外循環(huán)開始NEXT1:MOVSI,DIMOVCL,BL109例4—18(4)內(nèi)循環(huán)開始NEXT2:MOVAX,[SI]ADDSI,2CMPAX,[SI]JNCNEXT3;大于,不交換MOVDX,[SI];交換MOV[SI-2],DXMOV[SI],AXNEXT3:DECCLJNZNEXT2內(nèi)循環(huán)完110例4—18(5)DECBLJNZNEXT1外循環(huán)完MOVAH,4CHINT21HCSEGENDSENDSTART111子程序設(shè)計注意三點:參數(shù)的傳遞。相應(yīng)寄存器的內(nèi)容的保護。子程序可以嵌套。112例4—19(1)從一個字符串中刪除一個字符。利用堆棧的方式實現(xiàn)參數(shù)的傳遞$是地址計數(shù)器,當(dāng)前位置。DATASEGMENTSTRINGDB‘EXXPERINCE’LENGDW$-STRINGKEYDB‘X’DATAENDS113例4—19(2)CODESEGMENTASSUMECS:CODE,DS:DATA,ES:DATAMAINPROCFARSTART:MOVAX,DATAMOVDS,AXMOVES,AX

LEABX,STRINGLEACX,LENG114例4—19(3)

PUSHBXPUSHCXMOVAL,KEY

CALLDELCHARMOVAH,4CHINT21HMAINEND115例4—19(4)

DELCHARPROC

PUSHBPMOVBP,SP;BP指向棧頂

PUSHSIPUSHDICLDMOVSI,[BP+4]116例4—19(5)MOVCX,[SI];取串長MOVDI,[BP+6];STRING的地址

REPNESCASB;找字符

JNE

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論