微機(jī)原理匯編語言_第1頁
微機(jī)原理匯編語言_第2頁
微機(jī)原理匯編語言_第3頁
微機(jī)原理匯編語言_第4頁
微機(jī)原理匯編語言_第5頁
已閱讀5頁,還剩58頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1第4章匯編語言程序設(shè)計4.1匯編語言程序格式及開發(fā)過程4.2匯編語言的基本語法和偽指令4.3基本結(jié)構(gòu)程序設(shè)計舉例4.4子程序結(jié)構(gòu)程序設(shè)計舉例4.5BIOS和DOS中斷24.1匯編語言程序格式及開發(fā)過程匯編語言——用指令的助記符、符號地址、標(biāo)號等符號書寫程序的語言。源程序——用匯編語言編寫的程序。匯編——把源程序翻譯成機(jī)器語言程序的過程。匯編程序——完成匯編任務(wù)的程序。3匯編語言語句

三種基本語句:指令語句(指令性語句):

在匯編時產(chǎn)生一個目標(biāo)代碼。偽指令語句(指示性語句):

無目標(biāo)代碼,為匯編程序服務(wù)。宏指令語句4編輯文本編輯器,如EDIT.COM連接連接程序,如LINK.EXE調(diào)試調(diào)試程序,如DEBUG.EXE應(yīng)用程序錯誤錯誤源程序:文件名.asm目標(biāo)模塊:文件名.obj可執(zhí)行文件:文件名.exe匯編匯編程序,如MASM.EXE錯誤錯誤錯誤1.匯編語言程序的開發(fā)過程52.匯編語言源程序格式.MODELSMALL.STACK256.DATAMDB30HNDB20HPDB40H.CODE.STARTUPMOVBL,MMOVAL,BLSUBAL,NADDAL,P.EXIT0ENDep11)簡化格式(.EXE)

例:計算M-N+P6例:顯示10行HELLODATASEGMENTMESGDB'HELLO!',0AH,0DH,'$'DATAENDSSTACKSEGMENTSTACKDB100DUP(?)STACKENDSCODESEGMENT

ASSUMECS:CODE,DS:DATA,SS:STACKBEG:MOVAX,STACK MOVSS,AX MOVSP,1002)完整格式1(.EXE)7

MOVAX,DATA MOVDS,AX MOVCX,10LAST:MOVAH,9 MOVDX,OFFSETMESG INT21H LOOPLAST

MOVAH,4CH INT21HCODEENDS

ENDBEGep283)完整格式2(.EXE)例:計算100+99+98+…+2+1datasegmentsumdw?dataendscodesegmentmainprocfar

assumecs:code,ds:data

pushdssubax,axpushaxmovax,datamovds,axxorax,ax movcx,100again:addax,cxloopagainmovsum,ax

retmainendpcodeendsendmainep394)簡化格式

(.COM).modeltiny;微型存儲模式.code;只有代碼段.startup;程序起始點=

ORG100Hmovdx,offsetstringmovah,9;顯示信息int21hmovah,01h;等待按鍵int21hmovah,02h;響鈴movdl,07hint21h.exit0;程序結(jié)束點,返回DOSStringdb‘Pressanykeytocontinue!$’end;匯編結(jié)束Ep4105)完整格式(.COM)C_SEGSEGMENT ASSUMECS:C_SEG,DS:C_SEG,ES:C_SEG ORG100HBEGIN: JMPSTARTMAN DB?WOMAN DB?NUM DW6START: MOVCX,NUM MOVDX,0INPUT: MOVAH,1 INT21H11

CMPAL,'1' JZMANCNT CMPAL,'0' JZWOMANCNT JMPINPUTMANCNT:INCDL JMPNEXTWOMANCNT:INCDHNEXT:LOOPINPUT MOVMAN,DLMOVWOMAN,DH MOVAH,4CH INT21HC_SEGENDS ENDBEGINep5124.2匯編語言的基本語法和偽指令1.匯編語言的基本語法1)標(biāo)號與變量標(biāo)號:是一條指令語句的符號地址??勺鳛檗D(zhuǎn)移類指令的操作數(shù),即轉(zhuǎn)移地址。變量:存放在某些存儲單元中的值。13①段屬性標(biāo)號和變量對應(yīng)存儲單元的段地址②偏移屬性標(biāo)號和變量對應(yīng)存儲單元的偏移地址③類型屬性標(biāo)號的類型可以是NEAR和FAR,分別表示段內(nèi)或段間變量的類型可以是BYTE、WORD和DWORD等地址屬性標(biāo)號和變量具有三種屬性14變量、標(biāo)號的命名一般最多由31個字母、數(shù)字及規(guī)定的特殊符號(.、_、$、?、@)組成,不能以數(shù)字開頭.只能位于名字首$、?不能單獨作為名字不區(qū)別標(biāo)識符中的字母大小寫不能使用匯編語言的保留字15保留字保留字(ReservedWord)是匯編程序已經(jīng)利用的標(biāo)識符,主要有:指令助記符——例如:MOV、ADD偽指令助記符——例如:DB、EQU運(yùn)算符——例如:OFFSET、PTR寄存器名——例如:AX、CS預(yù)定義符號——例如:@data162)常數(shù)常數(shù)表示一個固定的數(shù)值數(shù)值常數(shù)字符串常數(shù)

用引號括起來的單個字符或多個字符,其數(shù)值是每個字符對應(yīng)的ASCII碼的值。符號常數(shù)

利用一個標(biāo)識符表達(dá)的一個數(shù)值。例:DWriteCharequ2173)運(yùn)算符算術(shù)運(yùn)算符邏輯運(yùn)算符關(guān)系運(yùn)算符分析運(yùn)算符綜合運(yùn)算符18+(加)-(減)*(乘)/(除)MOD(求模)①算術(shù)運(yùn)算符②邏輯運(yùn)算符AND(與)

OR(或)

XOR(異或)

NOT(非)19EQ(相等)NE(不等)LT(小于)GT(大于)LE(小于或等于)GE(大于或等于)③關(guān)系運(yùn)算符④分析運(yùn)算符OFFSETSEGTYPELENGTHSIZE20OFFSET格式:OFFSET變量或標(biāo)號功能:取其后變量或標(biāo)號的偏移地址。例如:MOVBX,OFFSETBUFSEG格式:SEG變量或標(biāo)號功能:取其后變量或標(biāo)號所在段的段首址。例如:

MOV AX,SEGABCMOVDS,AX21PTRTHIS⑤綜合運(yùn)算符例如:moval,byteptrw_var ;

jmpfarptrn_label ;類型名PTR名字/標(biāo)號使名字或標(biāo)號具有指定的類型類型名可以是:BYTE/WORD/DWORD

或者是:NEAR/FAR222.偽指令1)處理器選擇偽指令2)等值偽指令3)定義存儲單元偽指令4)段定義偽指令5)過程定義偽指令6)源程序結(jié)束偽指令231)處理器選擇偽指令.8086.386.386P.586.586P242)等值偽指令EQU功能:給符號名定義一個值,或別的符號名。格式:符號名EQU表達(dá)式例:

PORT1EQU100PORT2EQUPORT1+10COUNTEQUCXADEQUADD特點:不能重復(fù)定義。不分配存儲單元。253)定義存儲單元偽指令DB,DW,DD,DQ,DT。格式:

[變量名]偽指令助記符表達(dá)式[,…]功能:定義內(nèi)存數(shù)據(jù)存儲區(qū),類型由偽指令助記符確定,初值由表達(dá)式給定。26DB——定義字節(jié)偽指令DW——定義字偽指令DD——定義雙字偽指令DQ——定義4字偽指令DT——定義10字節(jié)偽指令27數(shù)值表達(dá)式字符串表達(dá)式地址表達(dá)式(適用DW和DD偽指令)?表達(dá)式帶DUP的表達(dá)式表達(dá)式的形式28data segment X db'a',-5 db2dup(100),?Y db'ABC'data endsmoval,XdecX+1movY,al29data segment count dw8000h,?,'AB'number dw64harray dw2dup(0)data ends304)段定義偽指令完整段定義偽指令段名 segment定位組合使用'類別' ... ;語句序列段名 endsSEGMENT定義一個邏輯段的開始ENDS表示一個段的結(jié)束4個關(guān)鍵字用于確定段的各種屬性31段寄存器說明偽指令指定的段寄存器來尋址對應(yīng)的邏輯段ASSUME段寄存器:段名[,段寄存器名:段名,...]注意:沒有為段寄存器設(shè)定初值。32

存儲模式和簡化段定義偽指令存儲模式偽指令.MODEL存儲模式.model必須位于所有段定義語句之前存儲模式?jīng)Q定一個程序的規(guī)模,確定進(jìn)行子程序調(diào)用、指令轉(zhuǎn)移和數(shù)據(jù)訪問的缺省屬性MASM的存儲模式

①TINY②SMALL③COMPACT④MEDIUM

⑤LARGE⑥HUGE⑦FLAT33簡化段定義偽指令.STACK[大小] ;堆棧段開始。參數(shù)指定字節(jié)數(shù),默認(rèn)是1KB.DATA ;數(shù)據(jù)段開始.CODE[段名] ;代碼段開始一個邏輯段的開始,自動結(jié)束前面的一個段段名稱使用MASM預(yù)定義符號例如:@data表示由.data定義的數(shù)據(jù)段的段名345)過程定義偽指令過程調(diào)用語句:CALL過程名過程返回語句:RETPROC_NAMEPROC[NEAR]/FAR...RETPROC_NAMEENDP356)源程序結(jié)束偽指令END[標(biāo)號]指示匯編程序結(jié)束匯編過程源程序的最后必須為END標(biāo)號用于指定程序開始執(zhí)行點,連接程序?qū)?jù)此設(shè)置CS:IP值采用.startup不用“end標(biāo)號”,而使用“end”。364.3基本結(jié)構(gòu)程序設(shè)計舉例.modelsmall.stack256.dataASCIIdb30h,31h,32h,33h,34h,35hdb36h,37h,38h,39hdb41h,42h,43h,44h,45h,46hHexdb0bh例1:實現(xiàn)一位16進(jìn)制數(shù)轉(zhuǎn)換為ASCII碼顯示。

(查表法)37.code.startupmovbx,offsetASCIImoval,hexandal,0fhxlatmovdl,almovah,2int21h.exit0end38例2:編寫計算下面函數(shù)值的程序。

1 X>0Y=0 X=0-1 X39DATASEGMENTX DB-10Y DB?DATAENDSCODESEGMENT ASSUMEDS:DATA,CS:CODESTART:MOV AX,DATA MOV DS,AX40

CMP X,0 JGE A1 MOV Y,-1 JMP EXITA1:JG A2 MOV Y,0 JMP EXITA2:MOV Y,1 EXIT:MOV AH,4CHINT 21HCODEENDSEND START41

例3:編程統(tǒng)計BUF字單元中1的個數(shù)。42DATA SEGMENTBUF DW0011110010101011BCOUNT DB?DATA ENDSCODE SEGMENTASSUMEDS:DATA,CS:CODESTART: MOV AX,DATA MOV DS,AXMOV AX,BUFMOVCL,043LOPA: AND AX,AX JZ EXIT SHL AX,1 JNC LOPA INC CL JMP LOPAEXIT: MOV COUNT,CL MOV AH,4CH INT 21HCODE ENDS END START44

例4:編程實現(xiàn)將BUF字單元的二進(jìn)制數(shù)以十六

進(jìn)制形式顯示在屏幕上。DATASEGMENTBUFDW2468HDATAENDSCODESEGMENTMAINPROCFAR ASSUMECS:CODE,DS:DATA PUSHDS SUBAX,AX PUSHAX45

MOVAX,DATA MOVDS,AX MOVBX,BUF MOVCH,4RT: MOVCL,4 ROLBX,CL MOVAL,BL ANDAL,0FH ADDAL,30H CMPAL,3AH JLPRT

ADDAL,07HPRT: MOVDL,AL MOVAH,2 INT21H DECCH JNZRT RETMAINENDPCODEENDS ENDMAIN46例5:在以BUF為首址的字存儲區(qū)中存放有N個有符號數(shù),現(xiàn)需將它們按大到小的順序排列在BUF存儲區(qū)中,試編寫其程序。數(shù) 10 8 16 90 32第一遍 10 16 90 32 8第二遍 16 90 32 10 8第三遍 90 32 16 10 847DATASEGMENTBUFDW3,-4,6,7,9,2,0DW-8,-9,-10,20NEQU($-BUF)/2DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA48START: MOV AX,DATA MOV DS,AX MOV CX,N DEC CXLOOP1: MOV DX,CX MOV BX,0LOOP2: MOV AX,BUF[BX] CMP AX,BUF[BX+2] JGE L XCHGAX,BUF[BX+2] MOV BUF[BX],AX49L: ADD BX,2 DEC CX JNE LOOP2 MOV CX,DX LOOP LOOP1 MOV AH,4CH INT 21HCODE ENDS END START504.4子程序結(jié)構(gòu)程序設(shè)計舉例例:十進(jìn)制到十六進(jìn)制轉(zhuǎn)換的程序。程序要求從鍵盤取得一個十進(jìn)制數(shù),然后把該數(shù)以十六進(jìn)制的形式在屏幕上顯示出來。開始調(diào)用DECIBIN調(diào)用CRLF調(diào)用BINIHEX調(diào)用CRLF結(jié)束從鍵盤取得十進(jìn)制數(shù),保存到BX中顯示回車和換行用十六進(jìn)制形式顯示BX中的數(shù)51DecihexsegmentMainprocfarassumecs:Decihexpushdsxorax,axpushax

calldecibincallcrlfcallbinihexcallcrlf

retMainendp

Decibinprocnearmovbx,0Newchar:movah,1int21hsubal,30hjlexitcmpal,9jgexitcbw

xchgax,bxmovcx,10mulcxxchgax,bxaddbx,ax

jmpnewcharExit:retDecibinendp

52Binihexprocnearmovch,4Rotate:movcl,4rolbx,clmovdl,blanddl,0fhadddl,30hcmpdl,3ahjlprintadddl,7hPrint:movah,2int21hdecchjnzrotateretBinihexendpCrlfprocnear

movah,2movdl,0dhint21hmovdl,0ahint21hretCrlfendpDecihexendsendMain534.5BIOS和DOS中斷DOS有一百多個子程序,可供調(diào)用,包含:磁盤的讀寫、管理;內(nèi)存管理;基本輸入輸出管理。用軟中斷指令調(diào)用。類型號:20~27H系統(tǒng)功能調(diào)用:INT21H1.DOS中斷和DOS系統(tǒng)功能調(diào)用1)DOS中斷542)DOS系統(tǒng)功能調(diào)用單字符輸入(1)單字符顯示(2)顯示字符串(9)字符串輸入(10)結(jié)束調(diào)用(4CH)

DOS系統(tǒng)功能調(diào)用的方法:①設(shè)置的入口參數(shù)。②功能號

AH。③INT21H指令自動轉(zhuǎn)入中斷子程序入口。④中斷子程序運(yùn)行完畢,獲得出口參數(shù)。55字符串輸入(功號為10)功能:從鍵盤接收字符串到內(nèi)存緩沖區(qū)。要求:先定義一個緩沖區(qū):第一字節(jié):指出緩沖區(qū)能容納字符個數(shù)。第二字節(jié):保留以用作填寫輸入字符數(shù)。第三字節(jié):開始存放接收字符。

DS:DX指向緩沖區(qū)。56例:反向顯示輸入的字符串。DATASEGMENTINFO1DB0DH,0AH,‘INPUTSTRING:$’INFO2DB0DH,0AH,‘OUTPUTSTRING:$’BUFADB80 DB?

DB 80DUP(0)BUFBDB81DUP(0)DATAENDS57COD

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論