微機(jī)原理與接口技術(shù)第四章_第1頁
微機(jī)原理與接口技術(shù)第四章_第2頁
微機(jī)原理與接口技術(shù)第四章_第3頁
微機(jī)原理與接口技術(shù)第四章_第4頁
微機(jī)原理與接口技術(shù)第四章_第5頁
已閱讀5頁,還剩135頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

微機(jī)原理及接口技術(shù)第四章匯編語言程序設(shè)計(jì)匯編語言和匯編語言程序格式偽指令匯編語言程序設(shè)計(jì)及舉例微機(jī)原理及接口技術(shù)一、三種語言1.機(jī)器語言:計(jì)算機(jī)執(zhí)行的指令一組二進(jìn)制代碼最原始編寫程序的方式2.匯編語言:利用指令的助記符、符號、地址、

標(biāo)號來編寫的語言。說明:面向機(jī)器的語言,和機(jī)器硬件密切相關(guān)。3.高級語言:獨(dú)立于機(jī)器第一節(jié)匯編語言和匯編語言程序格式微機(jī)原理及接口技術(shù)源程序匯編程序目標(biāo)程序源程序編譯程序目標(biāo)程序微機(jī)原理及接口技術(shù)4.比較(1)機(jī)器語言:不易記憶和理解,使用和修改麻煩但程序效率高,執(zhí)行最快。(2)匯編語言:執(zhí)行速度與機(jī)器語言相當(dāng)比機(jī)器語言易理解仍不能獨(dú)立于機(jī)器多用于實(shí)時控制,實(shí)時通信程序(3)高級語言:易學(xué)習(xí),使用方便,通用性強(qiáng)源程序較短,但目標(biāo)程序大執(zhí)行時間比較長,效率低微機(jī)原理及接口技術(shù)二、匯編語言程序格式源程序分段,若干段形成一個源程序,每段由若干語句行組成。NAME1SEGMENT

;段開始

語句NAME1ENDS

;段結(jié)束NAME2SEGMENT…NAME2ENDS…END<標(biāo)號>微機(jī)原理及接口技術(shù)三、語句行的構(gòu)成語句行:由標(biāo)記(Token)及分隔符按一定規(guī)則組織起來的。標(biāo)記符號表達(dá)式語句微機(jī)原理及接口技術(shù)1.標(biāo)記

宏匯編源程序的最小的,有意義的單位。(1)字符集

1)字母:大小寫英文字母

2)數(shù)字:0--9

3)特殊字符:+-*/=…可打印字符制表符,回車等不可打印字符(2)界符(Delimiters)

界符為特殊字符,表明某個標(biāo)記的結(jié)束。如:,;<-?/微機(jī)原理及接口技術(shù)(3)常量

1)數(shù)字(整數(shù))常量:二進(jìn)制以B結(jié)束十進(jìn)制十六進(jìn)制以H結(jié)束

2)字符串常量:單引號內(nèi)的ASCII字符構(gòu)成‘A’(4)標(biāo)識符(Identifiers)

程序員建立的有意義的字符序列,如SUM。最多為32個字母,數(shù)字,特殊字符(?@-$),不能是數(shù)字打頭。微機(jī)原理及接口技術(shù)(5)保留字(Reservedwords)1)指令助記符,如:ADD,SUB,MOV2)寄存器名,如:AX,AL,SP3)偽指令,如:SEGMENT,END

4)其它保留字,如:BYTE,WORD(6)注釋(Comment)

;后的任意字符序列,直至行末。返回微機(jī)原理及接口技術(shù)2.符號符號用來代替存儲單元、寄存器、數(shù)據(jù)、表達(dá)式等,是一種標(biāo)識符。(1)寄存器(Registers)

代表某一操作數(shù),為8位或16位。(2)變量(Variable)

存放在存儲單元中的操作數(shù),程序中出現(xiàn)的是存儲單元地址。

1)段值(SEGMENT):段地址的高16位,低四位為02)偏移量(OFFSET):段內(nèi)偏移量16位

3)類型(TYPE):字節(jié)(BYTE),字(WORD),雙字DWORD微機(jī)原理及接口技術(shù)(3)標(biāo)號(Lable)

某條指令所存放單元的地址。屬性:(1)段值

(2)偏移量

(3)類型:NEAR近,只改變IPFAR遠(yuǎn),改變CS和IP(4)數(shù)

常數(shù)也以符號的形式出現(xiàn),便于修改。如:COUNTEQU100(5)其它符號返回微機(jī)原理及接口技術(shù)3.表達(dá)式表達(dá)式由標(biāo)志、符號通過運(yùn)算符組合起來。一個表達(dá)式由操作數(shù)和運(yùn)算符組成。(1)操作數(shù)(Operands)

一個操作數(shù),代表一個數(shù)據(jù),或一個寄存器名,一個存儲單元地址。

1)常量操作數(shù):如100,COUNT2)存儲器操作數(shù):為標(biāo)識符,分為標(biāo)號和變量。微機(jī)原理及接口技術(shù)(2)運(yùn)算符(Operators)

一個運(yùn)算符取一個或多個操作數(shù)的值,形成一個新值。

1)算術(shù)運(yùn)算符:如+-*/MOD

對地址的運(yùn)算如:加,減

2)邏輯運(yùn)算符:如AND、OR、XOR、NOT微機(jī)原理及接口技術(shù)3)關(guān)系運(yùn)算符相等EQ(Equal)

不等NE(NotEqual)

小于LT(LessThan)

大于GT(GreaterThan)

小于或等于LE(LessThanorEqual)

大于或等于GE(GreatThanorEqual)

說明:①兩個操作數(shù),或都為數(shù)字,或是同一段的存儲單元地址,結(jié)果總是一個數(shù)值。②關(guān)系是假,數(shù)值為0

關(guān)系是真,數(shù)值為全1微機(jī)原理及接口技術(shù)

例1:MOVBX,PORT_VALLT51)若PORT_VAL<5關(guān)系為真,匯編后產(chǎn)生語句為

MOVBX,0FFFFH2)若PORT_VAL≥5關(guān)系為假,匯編后產(chǎn)生語句為

MOVBX,0

例2:與邏輯運(yùn)算符結(jié)合用MOVBX,((PORT_VALLT5)AND20)OR((PORT_VALGE5)AND30)1)PORT_VAL<5為:MOVBX,202)PORT_VAL≥5為:MOVBX,30微機(jī)原理及接口技術(shù)4)分析運(yùn)算符存儲器單元地址段地址偏移量類型分解成5)合成運(yùn)算符

由已存在的存儲器操作數(shù)生成一個段值和偏移量相同,而類型不同的新的存儲器操作數(shù)。返回微機(jī)原理及接口技術(shù)4.語句

(1)指令型語句

即指令,匯編程序把它們翻譯成機(jī)器代碼。如:

MOV、ADD、JMP(2)指示型語句即偽指令,匯編程序并不把它們翻譯成機(jī)器代碼。偽指令用來為匯編程序提供某些信息,讓匯編程序在匯編中執(zhí)行某些特定功能。如:規(guī)定一個程序的數(shù)據(jù)段從哪里開始;分配存儲單元。微機(jī)原理及接口技術(shù)(3)宏指令語句一條宏指令是一系列語句的縮寫,可以是指令、指示性指令或宏指令。匯編程序?qū)⑺忉尀槎鄠€語句,然后匯編成機(jī)器代碼。微機(jī)原理及接口技術(shù)說明:

1)指令格式標(biāo)號:助記符參數(shù),…參數(shù);注釋

偽指令格式名字命令參數(shù),…參數(shù);注釋注意:指令標(biāo)號后有冒號,偽指令后沒有。

2)

指令的標(biāo)號與指令的地址相聯(lián),可作為JMP和CALL指令的目標(biāo)操作數(shù)。偽指令的名字與指令的地址毫無關(guān)系,絕不能轉(zhuǎn)向它。18微機(jī)原理及接口技術(shù)四、匯編語言程序的開發(fā)匯編語言程序的開發(fā)過程:

1.源程序的編輯建立.ASM文件。

2.源程序的匯編用匯編器MASM.EXE匯編源程序,建立.OBJ文件。

3.目標(biāo)文件的連接用連接器LINK.EXE將一個或多個目標(biāo)文件與庫文件進(jìn)行連接,生成.EXE可執(zhí)行文件。微機(jī)原理及接口技術(shù)4.可執(zhí)行文件的運(yùn)行匯編和連接后,生成的.EXE可執(zhí)行文件可以直接運(yùn)行。在命令行下鍵入文件即可。

5.可執(zhí)行文件的調(diào)試用調(diào)試器對可執(zhí)行文件進(jìn)行調(diào)試,來發(fā)現(xiàn)錯誤。

DEBUG是最簡單的調(diào)試器。

CodeView是多窗口、全屏幕的調(diào)試工具。微機(jī)原理及接口技術(shù)第二節(jié)偽指令二、數(shù)據(jù)定義語句一、符號定義語句三、段定義語句四、過程定義語句五、結(jié)束語句六、宏指令微機(jī)原理及接口技術(shù)一、符號定義語句(Symbol)1.等值語句格式:NAMEEQUEXPRESSION

功能:用來給變量,標(biāo)號,常數(shù),指令,表達(dá)式等定義一個符號。例:NUMBEREQU100常數(shù)賦給符號名表達(dá)式賦給符號NEW_PORTEQU PORT_VAL+1A1 EQU [BX+SI]B1 EQU OFFSETA1COUNT EQU CX存儲單元內(nèi)容賦給符號偏移地址賦給符號COUNT定義為CX的同義語微機(jī)原理及接口技術(shù)2.等號語句格式:NAME=EXPRESSION功能:與EQU的功能相同,區(qū)別在于EQU的左邊標(biāo)號不能重新定義,而=語句可以。例:

EMP=6EMP=EMP+1A1=BX+SIMOVAX,[A1];[BX+SI]單元內(nèi)容→AXB1=ADDA1=BXMOVCX,[A1];[BX]單元內(nèi)容→CX微機(jī)原理及接口技術(shù)3.解除語句格式:PURGE符號1,符號2,...

功能:已經(jīng)用EQU定義的符號,不用了可用

PURGE語句來解除。例:

PURGENEW_PORTNEW_PORTEQUPORT_VAL+10

解除后的符號又可用EQU來重新定義了。返回微機(jī)原理及接口技術(shù)二、數(shù)據(jù)定義語句(Data)1.定義存儲單元:DB,DW,DD,DQ,DT功能:DB定義字節(jié),DW定義字,

DD定義雙字,DQ定義4個字,

DT定義10個字節(jié)。

在MASM6.X中DB、DW、DD、DQ、DT可分別寫作BYTE、WORD、DWORD、QWORD、TBYTE。微機(jī)原理及接口技術(shù)例:THINGDB25存儲單元THING處存放25安排存儲單元BUF1,內(nèi)容不定BUF2單元開始留出9個單元,內(nèi)容不定42H放BUF3單元,41H放BUF3+1單元BUF4單元開始留出4個字單元,內(nèi)容不定()中為值,內(nèi)容不定BUF1DB?BUF2DB9DUP(?)BUF3DW4142HBUF4DW4DUP(?)重復(fù)次數(shù)微機(jī)原理及接口技術(shù)BIGGEST_THINGDD12345678H雙字,定義4個字節(jié)IN_PORTDBPORT_VAL初始值為表達(dá)式,PORT_VAL已賦值BUF5DB6DUP(0)BUF6DB4DUP(1,2DUP(20H))BUF5開始的6個單元,初始值為0DUP嵌套外重復(fù)次數(shù)內(nèi)重復(fù)次數(shù)20H,20H重復(fù)四次

1,20H,20HLITTLE_CYCLEDWCYCLECYCLE的段內(nèi)偏移放入LITTLE_CYCLE,LITTLE_CYCLE+1BIG_CYCLEDDCYCLECYCLE段地址和偏移,4個字節(jié)POWERS_2DB1,2,4,6,16參數(shù)為一個表,5個字節(jié)EXAM1 DB‘THISISAEXAMPLE’定義了字符串COUNT DT?定義了10個字節(jié),內(nèi)容不定微機(jī)原理及接口技術(shù)說明:(1)定義數(shù)據(jù)是使匯編程序在匯編時為數(shù)據(jù)分配存儲單元。(2)?表示內(nèi)容不定,但保留存儲單元。(3)DUP后的()中給出一個初值(或一組初值),前面的數(shù)字為初值的重復(fù)次數(shù)。微機(jī)原理及接口技術(shù)例:設(shè)有下列數(shù)據(jù)段定義:

data segment d1 db -1,?,3*2 db 2dup(2dup(?),5),14h n equ 10 d2 dw -1,?,3462h,n d3 db ‘ABC’ d4 dd 0abcdh data ends(1)EQU不占用內(nèi)存空間。(2)

變量d1的偏移地址為0。(3)對d3的定義等價于d3 db ‘A’,‘B’,‘C’19微機(jī)原理及接口技術(shù)2.分析運(yùn)算符功能:把存儲器單元地址分解成它的組

成部分,如段地址、偏移量和類型。運(yùn)算符:SEG段地址

OFFSET偏移地址

TYPE類型

LENGTH單元數(shù)

SIZE字節(jié)總數(shù)微機(jī)原理及接口技術(shù)若在一個程序的數(shù)據(jù)段定義:DATA_TABLESSEGMENTBUFFER1DB100DUP(0)BUFFER2DW200DUP(20H)BUFFER3DD100DUP(13)DATA_TABLESENDS微機(jī)原理及接口技術(shù)(1)

段地址SEG

格式:SEG

變量或標(biāo)號功能:返回變量或標(biāo)號的段地址

例:MOVAX,SEGBUFFER1;數(shù)據(jù)段地址→AXMOVDS,AX(2)偏移地址

OFFSET

格式:OFFSET

變量或標(biāo)號功能:返回變量或標(biāo)號的偏移地址

例:MOVBX,OFFSETBUFFER1MOVSI,OFFSETBUFFER2微機(jī)原理及接口技術(shù)(3)

類型

TYPE

格式:TYPE

存儲器操作數(shù)功能:返回存儲器操作數(shù)的類型

存儲器操作數(shù)類型數(shù)據(jù)字節(jié)1

數(shù)據(jù)字2

數(shù)據(jù)雙字4NEAR指令單元-1FAR指令單元-2注意:(1)字節(jié)、字、雙字類型分別是它們所占字節(jié)數(shù)。

(2)指令單元的類型沒有實(shí)際的物理意義。

微機(jī)原理及接口技術(shù)(4)LENGTH格式:LENGTH

變量功能:返回一個與存儲器地址操作數(shù)相聯(lián)系的單元數(shù)(字節(jié),字,雙字)。

注意:存儲區(qū)必須用DUP()定義,否則返回1

例:

MOVCX,LENGTHBUFFER1;100→CXMOVBX,LENGTHBUFFER2;200→BX微機(jī)原理及接口技術(shù)(5)SIZE

格式:SIZE

變量功能:返回該變量包含的總字節(jié)數(shù)。

SIZE=TYPE×LENGTH

例:

SIZEBUFFER1=100SIZEBUFFER2=400SIZEBUFFER3=400MOVBX,SIZEBUFFER2;400→BX微機(jī)原理及接口技術(shù)3.合成運(yùn)算符(1)PTR

格式:類型/距離

PTR

變量或標(biāo)號功能:將左邊的類型屬性賦給右邊的變

量或標(biāo)號。

注意:(1)PTR本身不分配存儲單元,僅給已分配的存儲單元賦予新的屬性,以保證運(yùn)算時操作數(shù)類型匹配。

(2)常與類型BYTE,WORD,DWORD,

NEAR,F(xiàn)AR連用。微機(jī)原理及接口技術(shù)例1:TWO_BYTEDW?分配存儲單元賦予新屬性,但不分配存儲單元ONE_BYTEEQUBYTEPTRTWO_BYTE(1)TWO_BYTE定義類型是字。(2)PTR建立一個新的存儲器操作數(shù)ONE_BYTE,由PTR左邊的BYTE規(guī)定了類型為字節(jié)。(3)這樣TWO_BYTE只能用于字操作,如:

MOVTWO_BYTE,AXONE_BYTE只能用于字節(jié)操作,如:

MOVAL,ONE_BYTE微機(jī)原理及接口技術(shù)例2:MOV[BX],6

用PTR指明送入的是字節(jié)還是字。

MOVBYTEPTR[BX],6MOVWORDPTR[BX],6

第一條指令是06H→[BX]

第二條指令是0006H→[BX+1][BX]例3:JMPFARPTRINCHES;段間轉(zhuǎn)移微機(jī)原理及接口技術(shù)(2)THIS

格式:變量/標(biāo)號EQUTHIS

類型/距離

功能:將EQU右邊的類型/距離屬性賦給左邊的變量/標(biāo)號,左邊的變量/標(biāo)號的段地址和偏移與下一存儲單元的地址相同。

注意:THIS和PTR一樣,也不分配存儲單元。微機(jī)原理及接口技術(shù)例1:DATA_TABLESSEGMENTWBUFFER1EQUTHISWORDBUFFER1DB100DUP(0)BBUFFER2EQUTHISBYTEBUFFER2DW200DUP(20H)DWBUFFER3EQUTHISWORDBUFFER3DD100DUP(13)DATA_TABLESENDS(1)WBUFFER1用THIS指定,其段地址和偏移與BUFFER1相等,區(qū)別是WBUFFER1為字,BUFFER1為字節(jié)。(3)DWBUFFER3是字,BUFFER3是雙字。(2)BBUFFER2是字節(jié),BUFFER2是字。返回微機(jī)原理及接口技術(shù)1.ORG

格式:ORG<表達(dá)式>

功能:指定段內(nèi)程序和數(shù)據(jù)存放的起始地址。例:ORG0100H;定位于偏移地址0100HORG$+20

定位于當(dāng)前地址后的20個字節(jié)處,$指本條指令的第一個字節(jié)地址。三、段定義語句(Segment)微機(jī)原理及接口技術(shù)例:數(shù)據(jù)段:

S01 DB 12H,34H ORG$+4S02 DW 2,0ABCDH12H34HS01S0202H00HcdHabH微機(jī)原理及接口技術(shù)2.SEGMENT…ENDS

格式:段名SEGMENT定位類型,組合類型,‘分類名’

邏輯段內(nèi)容段名ENDS

功能:將一個邏輯段定義成一個整體。段名:邏輯段標(biāo)識符,不可省略。SEGMENT…ENDS:段定義的偽指令助記符,成對出現(xiàn),右邊三個參數(shù)一般可省略。微機(jī)原理及接口技術(shù)3.ASSUME

格式:

ASSUMECS:段名,DS:段名,SS:段名,ES:段名功能:定義4個邏輯段。注意:段寄存器的值程序中要賦給。說明:可用ASSUMENOTHING取消前面的定義,如

ASSUMEDS:NOTHING微機(jī)原理及接口技術(shù)例:如何使用SEGMRNT,ENDS,ASSUMEMY_DATASEGMENT;定義數(shù)據(jù)段XDB?YDW?ZDD?MY_DATAENDSMY_EXTRASEGMENT;定義附加數(shù)據(jù)段ALPHADB?BETADW?GAMMADD?MY_EXTRAENDS微機(jī)原理及接口技術(shù)MY_STACKSEGMENT;定義堆棧段

DW100DUP(?)TOPEQUTHISWORDMY_STACKENDS微機(jī)原理及接口技術(shù)MY_CODESEGMENT;定義代碼段

ASSUMECS:MY_CODE,DS:MY_DATAASSUMEES:MY_EXTRA,SS:MY_STACKSTART:MOVAX,SEGXMOVDS,AXMOVAX,SEGALPHAMOVES,AXMOVAX,MY_STACKMOVSS,AXMOVSP,OFFSETTOPMY_CODEENDSENDSTART返回20微機(jī)原理及接口技術(shù)例:設(shè)有下列數(shù)據(jù)段定義:

data segment org 100h buf1 db 10h,20h,30h,40h,50h buf2 dw buf1 buf3 dd buf1 count equ buf2–buf1 buf4 dw buf2–buf1 data ends

設(shè)data的值是1200H,請圖示各數(shù)據(jù)在內(nèi)存的存放方式。微機(jī)原理及接口技術(shù)四、過程定義語句(Procedure)

過程也稱子程序,常用的子程序獨(dú)立編寫,用過程定義語句定義。格式:過程名PROC屬性

過程內(nèi)容

RET

過程名ENDP說明:(1)過程名:不可缺少,是主程序CALL

的目標(biāo)操作數(shù)。

(2)PROC….ENDP:過程定義偽指令。

(3)RET:至少有一條RET。微機(jī)原理及接口技術(shù)例:一個過程定義的例子SEGX SEGMENTSUBT PROCFARSUBCX,1RETSUBT ENDPSTART:…... CALLSUBT…... CALLSUBT……SEGX ENDS ENDSATRT返回微機(jī)原理及接口技術(shù)五、結(jié)束語句(Termination)

1.SEGMENT…ENDS段結(jié)束

2.PROC…ENDP過程結(jié)束3.源程序結(jié)束語句END格式:END<表達(dá)式>功能:告訴匯編程序,整個源程序結(jié)束。表達(dá)式通常是程序第一條指令前的標(biāo)號。返回微機(jī)原理及接口技術(shù)六、宏指令(Macro)

宏是源程序中一段有獨(dú)立功能的語句序列,它只要在程序中定義一次,就可以多次調(diào)用。調(diào)用時用一條宏指令語句即可。匯編器將一個宏展開為它所表示的語句,然后匯編這些新的語句。微機(jī)原理及接口技術(shù)1.

宏定義、宏調(diào)用和宏展開

宏定義由一對偽指令MACRO與ENDM實(shí)現(xiàn)。宏指令名MACRO[形式參數(shù)表]…;宏體

ENDM

宏指令名在同一源文件中不能重復(fù)出現(xiàn),宏體可以是任意語句序列,可選的形式參數(shù)表以逗號分隔的若干參數(shù)名。微機(jī)原理及接口技術(shù)

宏調(diào)用:

宏指令名

[實(shí)在參數(shù)表]

其中,實(shí)在參數(shù)表的類型和順序應(yīng)與宏定義時的形式參數(shù)表一致。當(dāng)源程序被匯編時,MASM用相應(yīng)的宏體取代每個宏調(diào)用,并用實(shí)在參數(shù)按位置替換宏定義中的形式參數(shù),稱為宏展開。微機(jī)原理及接口技術(shù)例:定義一個宏ADD2,將兩個數(shù)相加,和存入AX。宏定義宏體ADD2MACRONBR1,NBR2MOVAX,NBR1ADDAX,NBR2ENDM宏調(diào)用:ADD2VALUE1,VALUE2宏展開:MOVAX,VALUE1ADDAX,VALUE2微機(jī)原理及接口技術(shù)例:宏定義。宏定義宏體SHIFTMACROX,Y,ZMOVCL,XYZ,CLENDM宏調(diào)用:SHIFT4,SHL,AX宏展開:MOVCL,4SHLAX,CL微機(jī)原理及接口技術(shù)2.

跟宏有關(guān)的偽指令

(1)LOCAL偽指令

LOCAL偽指令用來定義宏內(nèi)部局部符號。

LOCAL符號名,…,符號名

LOCAL偽指令必須是宏體內(nèi)的第一條語句。宏展開時,MASM將源文件中的所有局部符號統(tǒng)一按出現(xiàn)次序替換為唯一的標(biāo)識符(??0000~??FFFF)。21微機(jī)原理及接口技術(shù)例:宏定義。ABSOLMACROOPERLOCALNEXT CMPOPER,0JGENEXTNEGOPERNEXT:…ENDM宏調(diào)用:

…ABSOLVAR…ABSOLBX宏展開第一個宏:+

CMPVAR,0+

JGE??0000+

NEGVAR+??0000:第二個宏:+

CMPBX,0+

JGE??0001+

NEGBX+??0001:微機(jī)原理及接口技術(shù)

(2)EXITM偽指令

EXITM偽指令用來立即終止宏展開,通常與條件匯編結(jié)合使用。

MASM忽略EXITM與ENDM之間的所有語句。例:宏定義。BytesmacroCountifCounteq0dbCountexitmendifdbCountdup(0)endm宏調(diào)用Bytes0;時在匯編時被展開為db0Bytes10;時在匯編時被展開為db10dup(0)微機(jī)原理及接口技術(shù)七、其它1.NAME

格式:NAME

程序名功能:為源程序目標(biāo)模塊賦名字,放在

程序開始。微機(jī)原理及接口技術(shù)2.LABEL格式:名稱LABEL

類型屬性功能:給已定義的變量或標(biāo)號另取一個名字,重新定義類型屬性。名稱為LABEL語句下一行所使用的語句中的變量或標(biāo)號取的別名。微機(jī)原理及接口技術(shù)(1)與變量連用例1:DATBLABELBYTEDATWDW3031H,3032HMOVAL,DATB[0]MOVBX,DATW[1]DATB為DATW的別名31H→AL3032H→BX注意:

變量DATB類型為字節(jié),變量DATW類型為字。微機(jī)原理及接口技術(shù)例2:堆棧段中常用LABELSTACKSEGMENTSTACK‘STACK’DW100DUP(?)TOPLABELWORDSTACKENDS100個字堆棧TOP為棧頂?shù)拿C(jī)原理及接口技術(shù)(2)與標(biāo)號連用例:

DISFLABELFARDISN:MOVAX,[SI]DISF為DISN的別名DISF的屬性為FAR微機(jī)原理及接口技術(shù)第三節(jié)匯編語言程序設(shè)計(jì)及舉例概述順序結(jié)構(gòu)分支程序循環(huán)程序字符串處理程序碼轉(zhuǎn)換程序DOS系統(tǒng)功能調(diào)用子程序設(shè)計(jì)微機(jī)原理及接口技術(shù)一、概述1.編寫步驟

(1)分析問題,抽象出數(shù)學(xué)模型

(2)確定算法

(3)畫程序流程圖工作框判斷調(diào)子程序

(4)分配內(nèi)存工作單元和寄存器。

(5)按程序流程圖編制程序。

(6)上機(jī)調(diào)試,排錯。起始框終止框微機(jī)原理及接口技術(shù)2.程序質(zhì)量判斷

(1)執(zhí)行時間

(2)占用內(nèi)存空間

(3)語句行數(shù)3.程序結(jié)構(gòu)順序分支循環(huán)子程序返回微機(jī)原理及接口技術(shù)二、順序結(jié)構(gòu)例4-1:P.105,兩個8位無符號數(shù)x和y,分別存放在BUF和BUF+1單元中,計(jì)算x-y的值,結(jié)果存回BUF單元。微機(jī)原理及接口技術(shù)SSEG SEGMENT STACK‘STACK’STA DW 100DUP(?)SSEG ENDSDSEG SEGMENT‘DATA’BUF DB 82,60DSEG ENDSCSEG SEGMENT‘CODE’ ASSUME CS:CSEG,DS:DSEG,SS:SSEGSTART: … … …CSEG ENDS

END START堆棧段源程序結(jié)束代碼段數(shù)據(jù)段微機(jī)原理及接口技術(shù)說明:(2)數(shù)據(jù)段DSEG SEGMENTBUF DB 82,60DSEG ENDS(1)堆棧段SSEG SEGMENT STACK ‘STACK’STA DW 100DUP(?)SSEG ENDS數(shù)據(jù)段定義減數(shù)被減數(shù)微機(jī)原理及接口技術(shù)(3)碼段CSEG SEGMENT ASSUMECS:CSEG,DS:DSEG,SS:SSEG … … …CSEG ENDSASSUME語句指明了哪些段是碼段、數(shù)據(jù)段、堆棧段和附加段微機(jī)原理及接口技術(shù)

1)

給DS賦值START:MOV AX,DSEG MOV DS,AX2)減法

MOV AL,BUFSUB AL,BUF+1MOVBUF,AL3)返回DOSMOVAH,4CHINT21H返回微機(jī)原理及接口技術(shù)三、分支程序例4-2:字節(jié)變量CHAR1放小寫字母字符,化為大寫。大轉(zhuǎn)NEXT與a的ASCII碼比較小轉(zhuǎn)NEXT與z的ASCII碼比較CODE1SEGMENT MOVAL,CHAR1CMPAL,’a’JBNEXTCMPAL,’z’JANEXT SUBCHAR1,20HNEXT:…CODE1ENDS化為大寫微機(jī)原理及接口技術(shù)(1)數(shù)據(jù)段DW定義的字變量XDW定義的字變量YDATA1 SEGMENTX DW ?Y DW ?DATA1 ENDS例4-3:P.106計(jì)算函數(shù)值Y,變量X和Y是帶符號的字變量。微機(jī)原理及接口技術(shù)(2)代碼段X>10建立條件<00<=X<=10存結(jié)果 MOVAX,X CMPAX,0

JGECASE23 ADDAX,10 JMPRESULTCASE23: CMPAX,10

JG CASE3 MOVBX,30 IMULBX JMPRESULTCASE3: SUBAX,190RESULT:MOVY,AX …返回22微機(jī)原理及接口技術(shù)四、循環(huán)程序組成:

(1)初始化(2)循環(huán)體(3)修改參數(shù)(4)循環(huán)控制結(jié)構(gòu)形式:微機(jī)原理及接口技術(shù)1.用計(jì)數(shù)器控制循環(huán)

(1)減1計(jì)數(shù)器

LOOP/LOOPE/LOOPNE(2)加1計(jì)數(shù)器微機(jī)原理及接口技術(shù)

例4-4:P.109分類統(tǒng)計(jì)字?jǐn)?shù)組data中正數(shù)負(fù)數(shù)零的個數(shù),放至指定的存儲單元,數(shù)組元素個數(shù)存在其第一個字中。存正數(shù)個數(shù)11個字,第一個為長度存零個數(shù)(1)數(shù)據(jù)段DATA1SEGMENTDATADW10,X1,…X10POSITIONDW0NEGATIVEDW0ZERODW0DATA1ENDS存負(fù)數(shù)個數(shù)微機(jī)原理及接口技術(shù)CODE1SEGMENTASSUMECS:CODE1,DS:DATA1START

:MOV AX,DATA1MOV DS,AXXOR AX,AXXOR BX,BXXOR DX,DX MOV CX,DATA JCXZ SAVE LEA SI,data+2清零CX:減1計(jì)數(shù)器(2)代碼段CX=0結(jié)束SI地址指針(3)

循環(huán)初始化給DS賦值微機(jī)原理及接口技術(shù)AGAIN: CMPWORDPTR[SI],0

JL LOWER

JE EQUAL INC AX

JMP LOOP1LOWER: INC BX

JMP LOOP1EQUAL: INC DXLOOP1: ADD SI,2

LOOP AGAIN(4)循環(huán)體與0比較0,轉(zhuǎn)EQUAL負(fù),轉(zhuǎn)LOWER(5)

修改參數(shù),指針加2(6)循環(huán)控制CX-1→CX為0結(jié)束正,AX+1負(fù),BX+10,DX+1微機(jī)原理及接口技術(shù)SAVE:

MOV POSITION,AX

MOV NEGATION,BX MOV ZERO,DX MOV AX,4C00H INT 21HCODE1 ENDS END START存?zhèn)€數(shù)微機(jī)原理及接口技術(shù)

2.條件控制循環(huán)循環(huán)次數(shù)不確定,根據(jù)循環(huán)過程中某個特定條件是否滿足來控制循環(huán)繼續(xù)還是退出。例4-5:P.111計(jì)算數(shù)組score的平均整數(shù),并存入內(nèi)存字變量Average中,數(shù)組以-1為結(jié)束標(biāo)志。微機(jī)原理及接口技術(shù)存平均數(shù)數(shù)據(jù),以-1結(jié)束(1)數(shù)據(jù)段DATA1SEGMENTdataDW90,95,…,50,-1Average DW0DATA1ENDS23微機(jī)原理及接口技術(shù)CODE1SEGMENTASSUMECS:CODE1,DS:DATA1START

:MOV AX,DATA1MOV DS,AXXOR AX,AXXOR DX,DXXOR CX,CX LEA SI,data清零(2)代碼段SI地址指針(3)

循環(huán)初始化微機(jī)原理及接口技術(shù)

AGAIN:MOV BX,[SI] CMPBX,0

JL over ADDAX,BXADCDX,0 INC CXADDSI,2

JMP AGAINover:

JCXZexit

DIVCXMOVAverage,AXexit:MOV AX,4C00HINT 21HCODE1ENDSENDSTART(4)循環(huán)體負(fù),轉(zhuǎn)over退出循環(huán)(5)

修改參數(shù),指針加2(6)循環(huán),無條件跳個數(shù)為0,退出求和(DXAX)個數(shù)加1計(jì)算平均值,保存微機(jī)原理及接口技術(shù)

3.用開關(guān)變量控制循環(huán)一個循環(huán)體中有兩個循環(huán)支路,設(shè)一個開關(guān)變量,控制進(jìn)入哪個循環(huán)支路。例4-6:數(shù)據(jù)采集系統(tǒng)。采到的前5個數(shù)用一種函數(shù)(FUN1)處理,開關(guān)=0。采到的后7個數(shù)用另一種函數(shù)(FUN2)處理,開關(guān)=1。微機(jī)原理及接口技術(shù)說明:(1)數(shù)據(jù):datasegmentbufferdw5,5,5,5,5,5,5,5,5,5,5,5blockdw12dup(?)count1equ5count2equ7dataends12個數(shù)據(jù)個數(shù)存結(jié)果微機(jī)原理及接口技術(shù)(2)初始化:

源數(shù)據(jù)指針buffer→bx

處理后數(shù)據(jù)指針block→sicount1+1,count2+1→cx

開關(guān)0→dx(3)循環(huán)主體:

判開關(guān)量dx=0?dx=0callfun15個數(shù)據(jù)處理完后dx=1,cx=count2+1dx=1callfun2

每處理完一個數(shù),修改指針bx,si微機(jī)原理及接口技術(shù)

mov dx,0 mov cx,count1+1 lea bx,buffer

lea si,blockagain:mov ax,[bx] cmp dx,0 jne anoth call fun1 loop next mov dx,1 mov cx,count2+1 jmp againnext:

mov [si],ax inc bx inc bx inc si inc si jmp againanoth:call fun2 loop next(1)循環(huán)初始化開關(guān)dx=0cx為計(jì)數(shù)器bx源指針si目的指針(2)循環(huán)主體開關(guān)量轉(zhuǎn)為1為0,函數(shù)1處理處理后保存(3)修改參數(shù)函數(shù)2處理(4)循環(huán)控制開關(guān)不為0轉(zhuǎn)anoth微機(jī)原理及接口技術(shù)3.多重循環(huán)

一個循環(huán)中包含另一個循環(huán),稱多重循環(huán)。如:二維數(shù)組處理,二重循環(huán)。注意:

(1)各重循環(huán)的初始控制條件及實(shí)現(xiàn)。

(2)內(nèi)循環(huán)可嵌套在外循環(huán)中,也可幾個內(nèi)循環(huán)并列在外循環(huán)中,可從內(nèi)循環(huán)跳到外循環(huán),不可從外循環(huán)中直接跳進(jìn)內(nèi)循環(huán)。

(3)要防止出現(xiàn)死循環(huán)。

微機(jī)原理及接口技術(shù)例4-7:延時程序,多重循環(huán)實(shí)現(xiàn)軟件延時。DELAY:MOVDX,3FFH

TIME:MOVAX,0FFFFH

TIME1:NOPDECAXJNETIME1DECDX

JNETIMERET

內(nèi)循環(huán)控制變量AX,初值=FFFFH

外循環(huán)控制變量DX,初值=3FFH返回微機(jī)原理及接口技術(shù)

子程序技術(shù)是解決重復(fù)性問題的設(shè)計(jì)方法,在匯編語言中又稱為過程。1.

子程序調(diào)用格式:CALL子程序名分近調(diào)用(NEAR)和遠(yuǎn)調(diào)用(FAR)。五、子程序設(shè)計(jì)微機(jī)原理及接口技術(shù)2.參數(shù)傳遞技術(shù)入口參數(shù)出口參數(shù)傳遞參數(shù)的方法:

寄存器存儲器堆棧微機(jī)原理及接口技術(shù)(1)寄存器傳送參數(shù)例4-8P.115統(tǒng)計(jì)字符串中相同字符的個數(shù),個數(shù)最多的字符存CMORE單元。

CL字符串長度

AL當(dāng)前字符

BX當(dāng)前字符地址

DL當(dāng)前字符個數(shù)

DH重復(fù)字符最多個數(shù)

CALLCPP

子程序CPP統(tǒng)計(jì)當(dāng)前字符的重復(fù)次數(shù)放DL,當(dāng)前字符放AL。微機(jī)原理及接口技術(shù)主程序:LEA BX,CSTRN MOV CL,50 MOV DX,0 MOV AL,[BX] MOV CMORE,ALLP: MOV AL,[BX]

CALL CPP CMP DH,DL JNC NEXT MOV DH,DL MOV CMORE,ALNEXT:INC BX DEC CL JNZ LP 調(diào)統(tǒng)計(jì)重復(fù)字符數(shù)子程序BX:字符串首地址CL:字符串長度DH:重復(fù)個數(shù)(最多)DL:重復(fù)個數(shù)(當(dāng)前)當(dāng)前字符個數(shù)多,保存AL:當(dāng)前字符修改參數(shù),控制循環(huán)微機(jī)原理及接口技術(shù)CPP

PROC XORDL,DL MOVCH,CLMOVSI,BX INC SILP1:CMPAL,[SI] JNZ NEXT1INC DLNEXT1:INC SIDEC CHJNZ LP1RETCPP ENDP統(tǒng)計(jì)當(dāng)前字符的重復(fù)次數(shù)AL:當(dāng)前字符SI:串地址CH:串長度DL:重復(fù)次數(shù)重復(fù)次數(shù)清0判重復(fù)?重復(fù)計(jì)數(shù)DL修改參數(shù)長度、地址送CH、SI未完繼續(xù)子程序微機(jī)原理及接口技術(shù)(2)存儲單元傳送參數(shù)數(shù)據(jù)多,放在存儲器中,傳遞存儲地址。例4-9P.116統(tǒng)計(jì)字符串中數(shù)字字符、字母、其它字符的個數(shù),存BX、CX、DI中,字符串首地址DS:DX(以字符0結(jié)束)。微機(jī)原理及接口技術(shù)COUNTPROC PUSHAX PUSH SIXORBX,BX XOR CX,CXXOR DI,DI MOV SI,DXagain:MOV AL,[SI]INC SICMP AL,0JE overCMP AL,’0’JL otherCMP AL,’9’保護(hù)現(xiàn)場<‘0’轉(zhuǎn)other數(shù)字字符計(jì)數(shù)清0其它字符JG nextINC BXJMP againnext:CALL UPPERCMP AL,’A’JL otherCMP AL,’Z’JG otherINC CXJMP againother:INC DIJMP againover:POP SIPOP AXRETCOUNTENDP<‘A’>’Z’other字母恢復(fù)現(xiàn)場字符0結(jié)束24微機(jī)原理及接口技術(shù)(3)堆棧傳送參數(shù)數(shù)據(jù)定義:

STRINGDB‘……’LENGTH1DW$-STRINGKEYDB‘x’主程序中將數(shù)據(jù)壓入堆棧。

LEABX,STRINGLEACX,LENGTH1PUSHBX;壓入?yún)?shù)1

PUSHCX;壓入?yún)?shù)2CALLDELCHAR子程序中取出堆棧中數(shù)據(jù)。STRHSTRLLENGHLENGL返回H返回LSP高微機(jī)原理及接口技術(shù)子程序:DELCHAR:PUSHBPSTRHSTRLLENGHLENGL返回H返回LBP(SP)BPHBPLSPSPSPMOVBP,SPMOVSI,[BP+4];取LENGTH1地址MOVDI,[BP+6];取STRING地址

……POPBPRET4再彈出4個字節(jié)微機(jī)原理及接口技術(shù)例4-10:P.117,從一個字符串中刪去一個字符。說明:字符串要刪的字符長度(1)數(shù)據(jù)段

DATASEGMENT

STRING

DB‘…’

LENGTH1DW$-STRINGKEYDB‘x’DATAENDS微機(jī)原理及接口技術(shù)(2)參數(shù)傳送采用堆棧,主程序中:

LEABX,TRINGLEACX,LENGTH1PUSHBX;壓入STRING地址

PUSHCX;壓入LENGTH1地址

MOVAL,KEYCALLDELCHAR;調(diào)用刪字符子程序微機(jī)原理及接口技術(shù)(3)子程序DELCHAR:刪一個字符

1)取出參數(shù)DELCHARPROCPUSHBPMOVBP,SPPUSHSIPUSHDIPUSHCXCLDMOVSI,[BP+4];取LENGTH1地址→SIMOVCX,[SI];得到長度

MOVDI,[BP+6];取STRING地址→DI微機(jī)原理及接口技術(shù)

2)刪去一個字符

REPNESCASBJNEDONEMOVSI,[BP+4]DECWORDPTR[SI]MOVSI,DIDECDIREPMOVSB掃描字符串找到刪字符未找到退出SI串長度地址串長度減1依次向前移DIDISIxSTRING微機(jī)原理及接口技術(shù)

3)子程序返回

DONE:POPCXPOPDIPOPSIPOPBPRET4DELCHARENDPCODEENDSENDSTART返回25微機(jī)原理及接口技術(shù)六、碼轉(zhuǎn)換程序十六進(jìn)制、二進(jìn)制、BCD碼、ASCII碼轉(zhuǎn)換方法:(1)算術(shù)和邏輯運(yùn)算指令,軟件實(shí)現(xiàn);(2)查表指令;(3)硬件譯碼。微機(jī)原理及接口技術(shù)1.十六進(jìn)制→ASCII例4-11:有一個二進(jìn)制數(shù)碼串,把每一個字節(jié)中的二進(jìn)制轉(zhuǎn)換為兩位十六進(jìn)制數(shù)的ASCII碼,高四位的ASCII碼放在地址高的單元。串中的第一個字節(jié)為位串的長度。微機(jī)原理及接口技術(shù)說明:

(1)十六進(jìn)制:0~9A~FASCII碼:30H~39H41H~46H

對0~9,加上30H

對A~F,加上‘A’-10(2)地址指針:源(十六進(jìn)制)bx

目的(ASCII)si(3)cx=L1=2,每次循環(huán)轉(zhuǎn)換一個字節(jié)兩位十六進(jìn)制數(shù):低位與高位拆開:1)AND AL,0FH2)MOV CL,4SHR AL,CL低四位原高四位→低四位微機(jī)原理及接口技術(shù)

數(shù)據(jù)段data segmentl1 dw 2string db 14h,9Ahl2 dw ?buffer db 2*2dup(?)data ends串長度l1放串長度l2十六進(jìn)制數(shù)放ASCII微機(jī)原理及接口技術(shù)code segmentassumecs:code,ds:data,es:datastart:movax,datamovds,axmoves,axmovcx,l1leabx,stringleasi,buffermovax,cxsalcx,1movl2,cxmovcx,ax存ASCII碼串長度源串長度→CXbx:源地址指針si:目的地址指針

代碼段微機(jī)原理及接口技術(shù)again:moval,[bx]movdl,alandal,0fh

callchangemoval,dlpushcxmovcl,4shral,clpopcx

callchangeincbx

loopagainmovah,4chint21h取十六進(jìn)制數(shù)低四位→ASCII高四位→ASCII微機(jī)原理及接口技術(shù)一位十六進(jìn)制數(shù)ASCII碼子程序:

change proc cmpal,10 jladd_0

addal,’A’-’0’-10add_0: addal,’0’ mov[si],al incsi retchange endpcode ends endstart0~9轉(zhuǎn)add_0A~F0~9微機(jī)原理及接口技術(shù)2.ASCII→壓縮BCD說明:(1)對非壓縮BCD碼,只要將ASCII的高4位屏蔽(AND)即可。

(2)對壓縮BCD碼,要處理兩個ASCII碼,先為低位BCD碼,后為高位BCD碼,組合起來。

微機(jī)原理及接口技術(shù)datasegmentl2dw4bufferdb34h,33h,38h,39hl1dw?stringdb2dup(?)dataendsstacksegmentstack’stack’db100dup(?)stackendsASCII存BCD碼微機(jī)原理及接口技術(shù)

codesegment

assumecs:code,ds:data,es:data,ss:stackstart

:movax,datamovds,axmoves,ax微機(jī)原理及接口技術(shù)

movcx,l2shrcx,1movl1,cxleabx,bufferleasi,stringagain:moval,[bx]

andal,0fhmovdl,alincbxmoval,[bx]

andal,0fhBCD碼區(qū)長度取ASCII碼化為BCD碼取下一個ASCII碼化為BCD碼微機(jī)原理及接口技術(shù)

pushcxmovcl,4shlal,cl

popcx

oral,dl

mov[si],al

incbxincsiloopagainmovah,4ch

溫馨提示

  • 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

提交評論