《微機原理匯編語言》教學(xué)課件_第1頁
《微機原理匯編語言》教學(xué)課件_第2頁
《微機原理匯編語言》教學(xué)課件_第3頁
《微機原理匯編語言》教學(xué)課件_第4頁
《微機原理匯編語言》教學(xué)課件_第5頁
已閱讀5頁,還剩117頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

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

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

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

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

例:計算M-N+P52.匯編語言源程序格式.MODELSMALLep11)簡化例:顯示10行HELLODATASEGMENTMESGDB'HELLO!',0AH,0DH,'$'DATAENDSSTACKSEGMENTSTACKDB100DUP(?)STACKENDSCODESEGMENT

ASSUMECS:CODE,DS:DATA,SS:STACKBEG:MOVAX,STACK MOVSS,AX MOVSP,1002)完整格式1(.EXE)6例:顯示10行HELLO2)完整格式1(.EXE)6

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

MOVAH,4CH INT21HCODEENDS

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

assumecs:code,ds:data

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

retmainendpcodeendsendmainep383)完整格式2(.EXE)例:計算100+99+98+…4〕簡化格式

(.COM).modeltiny;微型存儲模式.code;只有代碼段.startup;程序起始點=ORG100Hmovdx,offsetstringmovah,9;顯示信息int21hmovah,01h;等待按鍵int21hmovah,02h;響鈴movdl,07hint21h.exit0;程序完畢點,返回DOSStringdb‘Pressanykeytocontinue!$’end;匯編完畢Ep494〕簡化格式

(.COM).modeltiny;5〕完整格式(.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 INT21H105〕完整格式(.COM)C_SEGSEGMENT10

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

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

利用一個標識符表達的一個數(shù)值。例:DWriteCharequ2162)常數(shù)常數(shù)表示一個固定的數(shù)值163)運算符算術(shù)運算符邏輯運算符關(guān)系運算符分析運算符綜合運算符173)運算符算術(shù)運算符17+〔加〕-〔減〕*〔乘〕/〔除〕MOD〔求?!尝偎阈g(shù)運算符②邏輯運算符AND〔與〕OR〔或〕XOR〔異或〕NOT〔非〕18+〔加〕①算術(shù)運算符②邏輯運算符AND〔與〕18EQ(相等)NE(不等)LT(小于)GT(大于)LE(小于或等于)GE(大于或等于)③關(guān)系運算符④分析運算符OFFSETSEGTYPELENGTHSIZE19EQ(相等)③關(guān)系運算符④分析運算符OFFSET19OFFSET格式:OFFSET變量或標號功能:取其后變量或標號的偏移地址。例如:MOVBX,OFFSETBUFSEG格式:SEG變量或標號功能:取其后變量或標號所在段的段首址。例如:

MOV AX,SEGABCMOVDS,AX20OFFSET20PTRTHIS⑤綜合運算符例如:moval,byteptrw_var ;

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

或者是:NEAR/FAR21PTR⑤綜合運算符例如:moval,byteptrw2.偽指令1)處理器選擇偽指令2)等值偽指令3)定義存儲單元偽指令4)段定義偽指令5)過程定義偽指令6)源程序完畢偽指令222.偽指令1)處理器選擇偽指令221)處理器選擇偽指令.8086.386.386P.586.586P231)處理器選擇偽指令.8086232)等值偽指令EQU功能:給符號名定義一個值,或別的符號名。格式:符號名EQU表達式例:PORT1EQU100PORT2EQUPORT1+10COUNTEQUCXADEQUADD特點:不能重復(fù)定義。不分配存儲單元。242)等值偽指令EQU功能:給符號名定義一個值,或別的符號名。3)定義存儲單元偽指令DB,DW,DD,DQ,DT。格式:

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

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

①TINY②SMALL③COMPACT④MEDIUM

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

(查表法)364.3根本構(gòu)造程序設(shè)計舉例.modelsmall例1:實.code.startupmovbx,offsetASCIImoval,hexandal,0fhxlatmovdl,almovah,2int21h.exit0end37.code37例2:編寫計算下面函數(shù)值的程序。1 X>0Y=0 X=0-1 X38例2:編寫計算下面函數(shù)值的程序。38DATASEGMENTX DB-10Y DB?DATAENDSCODESEGMENT ASSUMEDS:DATA,CS:CODESTART:MOV AX,DATA MOV DS,AX39DATASEGMENT39

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 START40 CMP X,0 40例3:編程統(tǒng)計BUF字單元中1的個數(shù)。41例3:編程統(tǒng)計BUF字單元中1的個數(shù)。41DATA SEGMENTBUF DW0011110010101011BCOUNT DB?DATA ENDSCODE SEGMENTASSUMEDS:DATA,CS:CODESTART: MOV AX,DATA MOV DS,AXMOV AX,BUFMOVCL,042DATA SEGMENT42LOPA: AND AX,AX JZ EXIT SHL AX,1 JNC LOPA INC CL JMP LOPAEXIT: MOV COUNT,CL MOV AH,4CH INT 21HCODE ENDS END START43LOPA: AND AX,AX43例4:編程實現(xiàn)將BUF字單元的二進制數(shù)以十六

進制形式顯示在屏幕上。DATASEGMENTBUFDW2468HDATAENDSCODESEGMENTMAINPROCFAR ASSUMECS:CODE,DS:DATA PUSHDS SUBAX,AX PUSHAX44例4:編程實現(xiàn)將BUF字單元的二進制數(shù)以十六

進制形式

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 ENDMAIN45 MOVAX,DATA ADDAL,07H4例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 846例5:在以BUF為首址的字存儲區(qū)中存放有N個有符號數(shù),現(xiàn)需將DATASEGMENTBUFDW3,-4,6,7,9,2,0DW-8,-9,-10,20NEQU〔$-BUF〕/2DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA47DATASEGMENT47START: 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],AX48START: MOV AX,DATA48L: ADD BX,2 DEC CX JNE LOOP2 MOV CX,DX LOOP LOOP1 MOV AH,4CH INT 21HCODE ENDS END START49L: ADD BX,2494.4子程序構(gòu)造程序設(shè)計舉例例:十進制到十六進制轉(zhuǎn)換的程序。程序要求從鍵盤取得一個十進制數(shù),然后把該數(shù)以十六進制的形式在屏幕上顯示出來。開始調(diào)用DECIBIN調(diào)用CRLF調(diào)用BINIHEX調(diào)用CRLF結(jié)束從鍵盤取得十進制數(shù),保存到BX中顯示回車和換行用十六進制形式顯示BX中的數(shù)504.4子程序構(gòu)造程序設(shè)計舉例例:十進制到十六進制轉(zhuǎn)換的程DecihexsegmentMainprocfarassumecs:Decihexpushdsxorax,axpushax

calldecibincallcrlfcallbinihexcallcrlf

retMainendp

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

xchgax,bxmovcx,10mulcxxchgax,bxaddbx,ax

jmpnewcharExit:retDecibinendp

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

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

DOS系統(tǒng)功能調(diào)用的方法:①設(shè)置的入口參數(shù)。②功能號AH。③INT21H指令自動轉(zhuǎn)入中斷子程序入口。④中斷子程序運行完畢,獲得出口參數(shù)。542〕DOS系統(tǒng)功能調(diào)用單字符輸入〔1〕DOS系統(tǒng)功能調(diào)字符串輸入〔功號為10〕功能:從鍵盤接收字符串到內(nèi)存緩沖區(qū)。要求:先定義一個緩沖區(qū):第一字節(jié):指出緩沖區(qū)能容納字符個數(shù)。第二字節(jié):保存以用作填寫輸入字符數(shù)。第三字節(jié):開場存放接收字符。DS:DX指向緩沖區(qū)。55字符串輸入〔功號為10〕55例:反向顯示輸入的字符串。DATASEGMENTINFO1DB0DH,0AH,‘INPUTSTRING:$’INFO2DB0DH,0AH,‘OUTPUTSTRING:$’BUFADB80 DB?DB 80DUP〔0〕BUFBDB81DUP〔0〕DATAENDS56例:反向顯示輸入的字符串。DATASEGMENT56CODESEGMENTASSUME DS:DATA,SS:STACK,CS:CODESTART: MOV AX,DATA MOV DS,AX LEA DX,INFO1 MOV AH,9 INT 21H LEA DX,BUFA MOV AH,10 INT 21H57CODESEGMENT57 LEA SI,BUFA+1 MOV CH,0;取字符長度→CX MOV CL,[SI] ADD SI,CX;SI指向字符串尾部 LEA DI,BUFB NEXT: MOV AL,[SI] MOV [DI],AL DEC SI INC DI LOOPNEXT58 LEA SI,BUFA+158

MOV BYTEPTR[DI],‘$’ LEA DX,INFO2 MOV AH,9 INT 21H LEADX,BUFB MOVAH,9;反向顯示字符串 INT 21H MOVAH,4CH INT 21HCODE ENDS ENDSTARTep659 MOV BYTEPTR[DI2.BIOS根本輸入輸出系統(tǒng)PC機系統(tǒng)板上地址為0FE000H開場的8KB為BIOSROM。BIOS提供了系統(tǒng)加電自檢、引導(dǎo)裝入以及對I/O接口控制等功能。通過中斷調(diào)用指令實現(xiàn)對BIOS的調(diào)用。中斷類型號:10H~1FH調(diào)用方法:給出入口參數(shù)、功能號中斷指令例如:中斷號10H;顯示器中斷

中斷號16H;鍵盤中斷602.BIOS根本輸入輸出系統(tǒng)PC機系統(tǒng)板上地址為0FE000小結(jié)匯編語言程序的開發(fā)過程;.EXE文件的匯編格式:簡化格式、完整格式1、完整格式2。匯編語言的根本語法:標號與變量、常數(shù)、運算符;偽指令:處理器選擇偽指令、等值偽指令、定義存儲單元偽指令、段定義偽指令、過程定義偽指令、源程序完畢偽指令。根本構(gòu)造程序設(shè)計舉例;子程序構(gòu)造程序設(shè)計舉例;DOS系統(tǒng)功能調(diào)用。61小結(jié)匯編語言程序的開發(fā)過程;.EXE文件的匯編格式:簡化格式第4章匯編語言程序設(shè)計4.1匯編語言程序格式及開發(fā)過程4.2匯編語言的根本語法和偽指令4.3根本構(gòu)造程序設(shè)計舉例4.4子程序構(gòu)造程序設(shè)計舉例4.5BIOS和DOS中斷62第4章匯編語言程序設(shè)計4.1匯編語言程序格式及開發(fā)4.1匯編語言程序格式及開發(fā)過程匯編語言——用指令的助記符、符號地址、標號等符號書寫程序的語言。源程序——用匯編語言編寫的程序。匯編——把源程序翻譯成機器語言程序的過程。匯編程序——完成匯編任務(wù)的程序。634.1匯編語言程序格式及開發(fā)過程匯編語言——用指令的助記符匯編語言語句

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

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

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

例:計算M-N+P662.匯編語言源程序格式.MODELSMALLep11)簡化例:顯示10行HELLODATASEGMENTMESGDB'HELLO!',0AH,0DH,'$'DATAENDSSTACKSEGMENTSTACKDB100DUP(?)STACKENDSCODESEGMENT

ASSUMECS:CODE,DS:DATA,SS:STACKBEG:MOVAX,STACK MOVSS,AX MOVSP,1002)完整格式1(.EXE)67例:顯示10行HELLO2)完整格式1(.EXE)6

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

MOVAH,4CH INT21HCODEENDS

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

assumecs:code,ds:data

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

retmainendpcodeendsendmainep3693)完整格式2(.EXE)例:計算100+99+98+…4〕簡化格式

(.COM).modeltiny;微型存儲模式.code;只有代碼段.startup;程序起始點=ORG100Hmovdx,offsetstringmovah,9;顯示信息int21hmovah,01h;等待按鍵int21hmovah,02h;響鈴movdl,07hint21h.exit0;程序完畢點,返回DOSStringdb‘Pressanykeytocontinue!$’end;匯編完畢Ep4704〕簡化格式

(.COM).modeltiny;5〕完整格式(.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 INT21H715〕完整格式(.COM)C_SEGSEGMENT10

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

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

利用一個標識符表達的一個數(shù)值。例:DWriteCharequ2772)常數(shù)常數(shù)表示一個固定的數(shù)值163)運算符算術(shù)運算符邏輯運算符關(guān)系運算符分析運算符綜合運算符783)運算符算術(shù)運算符17+〔加〕-〔減〕*〔乘〕/〔除〕MOD〔求?!尝偎阈g(shù)運算符②邏輯運算符AND〔與〕OR〔或〕XOR〔異或〕NOT〔非〕79+〔加〕①算術(shù)運算符②邏輯運算符AND〔與〕18EQ(相等)NE(不等)LT(小于)GT(大于)LE(小于或等于)GE(大于或等于)③關(guān)系運算符④分析運算符OFFSETSEGTYPELENGTHSIZE80EQ(相等)③關(guān)系運算符④分析運算符OFFSET19OFFSET格式:OFFSET變量或標號功能:取其后變量或標號的偏移地址。例如:MOVBX,OFFSETBUFSEG格式:SEG變量或標號功能:取其后變量或標號所在段的段首址。例如:

MOV AX,SEGABCMOVDS,AX81OFFSET20PTRTHIS⑤綜合運算符例如:moval,byteptrw_var ;

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

或者是:NEAR/FAR82PTR⑤綜合運算符例如:moval,byteptrw2.偽指令1)處理器選擇偽指令2)等值偽指令3)定義存儲單元偽指令4)段定義偽指令5)過程定義偽指令6)源程序完畢偽指令832.偽指令1)處理器選擇偽指令221)處理器選擇偽指令.8086.386.386P.586.586P841)處理器選擇偽指令.8086232)等值偽指令EQU功能:給符號名定義一個值,或別的符號名。格式:符號名EQU表達式例:PORT1EQU100PORT2EQUPORT1+10COUNTEQUCXADEQUADD特點:不能重復(fù)定義。不分配存儲單元。852)等值偽指令EQU功能:給符號名定義一個值,或別的符號名。3)定義存儲單元偽指令DB,DW,DD,DQ,DT。格式:

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

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

①TINY②SMALL③COMPACT④MEDIUM

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

(查表法)974.3根本構(gòu)造程序設(shè)計舉例.modelsmall例1:實.code.startupmovbx,offsetASCIImoval,hexandal,0fhxlatmovdl,almovah,2int21h.exit0end98.code37例2:編寫計算下面函數(shù)值的程序。1 X>0Y=0 X=0-1 X99例2:編寫計算下面函數(shù)值的程序。38DATASEGMENTX DB-10Y DB?DATAENDSCODESEGMENT ASSUMEDS:DATA,CS:CODESTART:MOV AX,DATA MOV DS,AX100DATASEGMENT39

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 START101 CMP X,0 40例3:編程統(tǒng)計BUF字單元中1的個數(shù)。102例3:編程統(tǒng)計BUF字單元中1的個數(shù)。41DATA SEGMENTBUF DW0011110010101011BCOUNT DB?DATA ENDSCODE SEGMENTASSUMEDS:DATA,CS:CODESTART: MOV AX,DATA MOV DS,AXMOV AX,BUFMOVCL,0103DATA SEGMENT42LOPA: AND AX,AX JZ EXIT SHL AX,1 JNC LOPA INC CL JMP LOPAEXIT: MOV COUNT,CL MOV AH,4CH INT 21HCODE ENDS END START104LOPA: AND AX,AX43例4:編程實現(xiàn)將BUF字單元的二進制數(shù)以十六

進制形式顯示在屏幕上。DATASEGMENTBUFDW2468HDATAENDSCODESEGMENTMAINPROCFAR ASSUMECS:CODE,DS:DATA PUSHDS SUBAX,AX PUSHAX105例4:編程實現(xiàn)將BUF字單元的二進制數(shù)以十六

進制形式

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 ENDMAIN106 MOVAX,DATA ADDAL,07H4例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 8107例5:在以BUF為首址的字存儲區(qū)中存放有N個有符號數(shù),現(xiàn)需將DATASEGMENTBUFDW3,-4,6,7,9,2,0DW-8,-9,-10,20NEQU〔$-BUF〕/2DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA108DATASEGMENT47START: 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],AX109START: MOV AX,DATA48L: ADD BX,2 DEC CX JNE LOOP2 MOV CX,DX LOOP LOOP1 MOV AH,4CH INT 21HCODE ENDS END START110L: ADD BX,2494.4子程序構(gòu)造程序設(shè)計舉例例:十進制到十六進制轉(zhuǎn)換的程序。程序要求從鍵盤取得一個十進制數(shù),然后把該數(shù)以十六進制的形式在屏幕上顯示出來。開始調(diào)用DECIBIN調(diào)用CRLF調(diào)用BINIHEX調(diào)用CRLF結(jié)束從鍵盤取得十進制數(shù),保存到BX中顯示回車和換行用十六進制形式顯示BX中的數(shù)1114.4子程序構(gòu)造程序設(shè)計舉例例:十進制到十六進制轉(zhuǎn)換的程DecihexsegmentMainprocfarassumecs:Decihexpushdsxorax,axpushax

calldecibincallcrlfcallbinihexcallcrlf

retMainendp

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

xchgax,bxmovcx,10mulcxxchgax,bxaddbx,ax

jmpnewcharExit:retDecibinendp

112DecihexsegmentDecibinBinihexprocnearmovch,4Rotate:movcl,4rolbx,clmovdl,blanddl,0fhadddl,

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論