版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
微機原理及接口技術(shù)第四章匯編語言程序設(shè)計匯編語言和匯編語言程序格式偽指令匯編語言程序設(shè)計及舉例微機原理及接口技術(shù)一、三種語言1.機器語言:計算機執(zhí)行的指令一組二進制代碼最原始編寫程序的方式2.匯編語言:利用指令的助記符、符號、地址、
標(biāo)號來編寫的語言。說明:面向機器的語言,和機器硬件密切相關(guān)。3.高級語言:獨立于機器第一節(jié)匯編語言和匯編語言程序格式微機原理及接口技術(shù)源程序匯編程序目標(biāo)程序源程序編譯程序目標(biāo)程序微機原理及接口技術(shù)4.比較(1)機器語言:不易記憶和理解,使用和修改麻煩但程序效率高,執(zhí)行最快。(2)匯編語言:執(zhí)行速度與機器語言相當(dāng)比機器語言易理解仍不能獨立于機器多用于實時控制,實時通信程序(3)高級語言:易學(xué)習(xí),使用方便,通用性強源程序較短,但目標(biāo)程序大執(zhí)行時間比較長,效率低微機原理及接口技術(shù)二、匯編語言程序格式源程序分段,若干段形成一個源程序,每段由若干語句行組成。NAME1SEGMENT
;段開始
語句NAME1ENDS
;段結(jié)束NAME2SEGMENT…NAME2ENDS…END<標(biāo)號>微機原理及接口技術(shù)三、語句行的構(gòu)成語句行:由標(biāo)記(Token)及分隔符按一定規(guī)則組織起來的。標(biāo)記符號表達式語句微機原理及接口技術(shù)1.標(biāo)記
宏匯編源程序的最小的,有意義的單位。(1)字符集
1)字母:大小寫英文字母
2)數(shù)字:0--9
3)特殊字符:+-*/=…可打印字符制表符,回車等不可打印字符(2)界符(Delimiters)
界符為特殊字符,表明某個標(biāo)記的結(jié)束。如:,;<-?/微機原理及接口技術(shù)(3)常量
1)數(shù)字(整數(shù))常量:二進制以B結(jié)束十進制十六進制以H結(jié)束
2)字符串常量:單引號內(nèi)的ASCII字符構(gòu)成‘A’(4)標(biāo)識符(Identifiers)
程序員建立的有意義的字符序列,如SUM。最多為32個字母,數(shù)字,特殊字符(?@-$),不能是數(shù)字打頭。微機原理及接口技術(shù)(5)保留字(Reservedwords)1)指令助記符,如:ADD,SUB,MOV2)寄存器名,如:AX,AL,SP3)偽指令,如:SEGMENT,END
4)其它保留字,如:BYTE,WORD(6)注釋(Comment)
;后的任意字符序列,直至行末。返回微機原理及接口技術(shù)2.符號符號用來代替存儲單元、寄存器、數(shù)據(jù)、表達式等,是一種標(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微機原理及接口技術(shù)(3)標(biāo)號(Lable)
某條指令所存放單元的地址。屬性:(1)段值
(2)偏移量
(3)類型:NEAR近,只改變IPFAR遠,改變CS和IP(4)數(shù)
常數(shù)也以符號的形式出現(xiàn),便于修改。如:COUNTEQU100(5)其它符號返回微機原理及接口技術(shù)3.表達式表達式由標(biāo)志、符號通過運算符組合起來。一個表達式由操作數(shù)和運算符組成。(1)操作數(shù)(Operands)
一個操作數(shù),代表一個數(shù)據(jù),或一個寄存器名,一個存儲單元地址。
1)常量操作數(shù):如100,COUNT2)存儲器操作數(shù):為標(biāo)識符,分為標(biāo)號和變量。微機原理及接口技術(shù)(2)運算符(Operators)
一個運算符取一個或多個操作數(shù)的值,形成一個新值。
1)算術(shù)運算符:如+-*/MOD
對地址的運算如:加,減
2)邏輯運算符:如AND、OR、XOR、NOT微機原理及接口技術(shù)3)關(guā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微機原理及接口技術(shù)
例1:MOVBX,PORT_VALLT51)若PORT_VAL<5關(guān)系為真,匯編后產(chǎn)生語句為
MOVBX,0FFFFH2)若PORT_VAL≥5關(guān)系為假,匯編后產(chǎn)生語句為
MOVBX,0
例2:與邏輯運算符結(jié)合用MOVBX,((PORT_VALLT5)AND20)OR((PORT_VALGE5)AND30)1)PORT_VAL<5為:MOVBX,202)PORT_VAL≥5為:MOVBX,30微機原理及接口技術(shù)4)分析運算符存儲器單元地址段地址偏移量類型分解成5)合成運算符
由已存在的存儲器操作數(shù)生成一個段值和偏移量相同,而類型不同的新的存儲器操作數(shù)。返回微機原理及接口技術(shù)4.語句
(1)指令型語句
即指令,匯編程序把它們翻譯成機器代碼。如:
MOV、ADD、JMP(2)指示型語句即偽指令,匯編程序并不把它們翻譯成機器代碼。偽指令用來為匯編程序提供某些信息,讓匯編程序在匯編中執(zhí)行某些特定功能。如:規(guī)定一個程序的數(shù)據(jù)段從哪里開始;分配存儲單元。微機原理及接口技術(shù)(3)宏指令語句一條宏指令是一系列語句的縮寫,可以是指令、指示性指令或宏指令。匯編程序?qū)⑺忉尀槎鄠€語句,然后匯編成機器代碼。微機原理及接口技術(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微機原理及接口技術(shù)四、匯編語言程序的開發(fā)匯編語言程序的開發(fā)過程:
1.源程序的編輯建立.ASM文件。
2.源程序的匯編用匯編器MASM.EXE匯編源程序,建立.OBJ文件。
3.目標(biāo)文件的連接用連接器LINK.EXE將一個或多個目標(biāo)文件與庫文件進行連接,生成.EXE可執(zhí)行文件。微機原理及接口技術(shù)4.可執(zhí)行文件的運行匯編和連接后,生成的.EXE可執(zhí)行文件可以直接運行。在命令行下鍵入文件即可。
5.可執(zhí)行文件的調(diào)試用調(diào)試器對可執(zhí)行文件進行調(diào)試,來發(fā)現(xiàn)錯誤。
DEBUG是最簡單的調(diào)試器。
CodeView是多窗口、全屏幕的調(diào)試工具。微機原理及接口技術(shù)第二節(jié)偽指令二、數(shù)據(jù)定義語句一、符號定義語句三、段定義語句四、過程定義語句五、結(jié)束語句六、宏指令微機原理及接口技術(shù)一、符號定義語句(Symbol)1.等值語句格式:NAMEEQUEXPRESSION
功能:用來給變量,標(biāo)號,常數(shù),指令,表達式等定義一個符號。例:NUMBEREQU100常數(shù)賦給符號名表達式賦給符號NEW_PORTEQU PORT_VAL+1A1 EQU [BX+SI]B1 EQU OFFSETA1COUNT EQU CX存儲單元內(nèi)容賦給符號偏移地址賦給符號COUNT定義為CX的同義語微機原理及接口技術(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微機原理及接口技術(shù)3.解除語句格式:PURGE符號1,符號2,...
功能:已經(jīng)用EQU定義的符號,不用了可用
PURGE語句來解除。例:
PURGENEW_PORTNEW_PORTEQUPORT_VAL+10
解除后的符號又可用EQU來重新定義了。返回微機原理及接口技術(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。微機原理及接口技術(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ù)微機原理及接口技術(shù)BIGGEST_THINGDD12345678H雙字,定義4個字節(jié)IN_PORTDBPORT_VAL初始值為表達式,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)容不定微機原理及接口技術(shù)說明:(1)定義數(shù)據(jù)是使匯編程序在匯編時為數(shù)據(jù)分配存儲單元。(2)?表示內(nèi)容不定,但保留存儲單元。(3)DUP后的()中給出一個初值(或一組初值),前面的數(shù)字為初值的重復(fù)次數(shù)。微機原理及接口技術(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微機原理及接口技術(shù)2.分析運算符功能:把存儲器單元地址分解成它的組
成部分,如段地址、偏移量和類型。運算符:SEG段地址
OFFSET偏移地址
TYPE類型
LENGTH單元數(shù)
SIZE字節(jié)總數(shù)微機原理及接口技術(shù)若在一個程序的數(shù)據(jù)段定義:DATA_TABLESSEGMENTBUFFER1DB100DUP(0)BUFFER2DW200DUP(20H)BUFFER3DD100DUP(13)DATA_TABLESENDS微機原理及接口技術(shù)(1)
段地址SEG
格式:SEG
變量或標(biāo)號功能:返回變量或標(biāo)號的段地址
例:MOVAX,SEGBUFFER1;數(shù)據(jù)段地址→AXMOVDS,AX(2)偏移地址
OFFSET
格式:OFFSET
變量或標(biāo)號功能:返回變量或標(biāo)號的偏移地址
例:MOVBX,OFFSETBUFFER1MOVSI,OFFSETBUFFER2微機原理及接口技術(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ù)(4)LENGTH格式:LENGTH
變量功能:返回一個與存儲器地址操作數(shù)相聯(lián)系的單元數(shù)(字節(jié),字,雙字)。
注意:存儲區(qū)必須用DUP()定義,否則返回1
例:
MOVCX,LENGTHBUFFER1;100→CXMOVBX,LENGTHBUFFER2;200→BX微機原理及接口技術(shù)(5)SIZE
格式:SIZE
變量功能:返回該變量包含的總字節(jié)數(shù)。
SIZE=TYPE×LENGTH
例:
SIZEBUFFER1=100SIZEBUFFER2=400SIZEBUFFER3=400MOVBX,SIZEBUFFER2;400→BX微機原理及接口技術(shù)3.合成運算符(1)PTR
格式:類型/距離
PTR
變量或標(biāo)號功能:將左邊的類型屬性賦給右邊的變
量或標(biāo)號。
注意:(1)PTR本身不分配存儲單元,僅給已分配的存儲單元賦予新的屬性,以保證運算時操作數(shù)類型匹配。
(2)常與類型BYTE,WORD,DWORD,
NEAR,F(xiàn)AR連用。微機原理及接口技術(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微機原理及接口技術(shù)例2:MOV[BX],6
用PTR指明送入的是字節(jié)還是字。
MOVBYTEPTR[BX],6MOVWORDPTR[BX],6
第一條指令是06H→[BX]
第二條指令是0006H→[BX+1][BX]例3:JMPFARPTRINCHES;段間轉(zhuǎn)移微機原理及接口技術(shù)(2)THIS
格式:變量/標(biāo)號EQUTHIS
類型/距離
功能:將EQU右邊的類型/距離屬性賦給左邊的變量/標(biāo)號,左邊的變量/標(biāo)號的段地址和偏移與下一存儲單元的地址相同。
注意:THIS和PTR一樣,也不分配存儲單元。微機原理及接口技術(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是字。返回微機原理及接口技術(shù)1.ORG
格式:ORG<表達式>
功能:指定段內(nèi)程序和數(shù)據(jù)存放的起始地址。例:ORG0100H;定位于偏移地址0100HORG$+20
定位于當(dāng)前地址后的20個字節(jié)處,$指本條指令的第一個字節(jié)地址。三、段定義語句(Segment)微機原理及接口技術(shù)例:數(shù)據(jù)段:
S01 DB 12H,34H ORG$+4S02 DW 2,0ABCDH12H34HS01S0202H00HcdHabH微機原理及接口技術(shù)2.SEGMENT…ENDS
格式:段名SEGMENT定位類型,組合類型,‘分類名’
邏輯段內(nèi)容段名ENDS
功能:將一個邏輯段定義成一個整體。段名:邏輯段標(biāo)識符,不可省略。SEGMENT…ENDS:段定義的偽指令助記符,成對出現(xiàn),右邊三個參數(shù)一般可省略。微機原理及接口技術(shù)3.ASSUME
格式:
ASSUMECS:段名,DS:段名,SS:段名,ES:段名功能:定義4個邏輯段。注意:段寄存器的值程序中要賦給。說明:可用ASSUMENOTHING取消前面的定義,如
ASSUMEDS:NOTHING微機原理及接口技術(shù)例:如何使用SEGMRNT,ENDS,ASSUMEMY_DATASEGMENT;定義數(shù)據(jù)段XDB?YDW?ZDD?MY_DATAENDSMY_EXTRASEGMENT;定義附加數(shù)據(jù)段ALPHADB?BETADW?GAMMADD?MY_EXTRAENDS微機原理及接口技術(shù)MY_STACKSEGMENT;定義堆棧段
DW100DUP(?)TOPEQUTHISWORDMY_STACKENDS微機原理及接口技術(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微機原理及接口技術(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)存的存放方式。微機原理及接口技術(shù)四、過程定義語句(Procedure)
過程也稱子程序,常用的子程序獨立編寫,用過程定義語句定義。格式:過程名PROC屬性
過程內(nèi)容
RET
過程名ENDP說明:(1)過程名:不可缺少,是主程序CALL
的目標(biāo)操作數(shù)。
(2)PROC….ENDP:過程定義偽指令。
(3)RET:至少有一條RET。微機原理及接口技術(shù)例:一個過程定義的例子SEGX SEGMENTSUBT PROCFARSUBCX,1RETSUBT ENDPSTART:…... CALLSUBT…... CALLSUBT……SEGX ENDS ENDSATRT返回微機原理及接口技術(shù)五、結(jié)束語句(Termination)
1.SEGMENT…ENDS段結(jié)束
2.PROC…ENDP過程結(jié)束3.源程序結(jié)束語句END格式:END<表達式>功能:告訴匯編程序,整個源程序結(jié)束。表達式通常是程序第一條指令前的標(biāo)號。返回微機原理及接口技術(shù)六、宏指令(Macro)
宏是源程序中一段有獨立功能的語句序列,它只要在程序中定義一次,就可以多次調(diào)用。調(diào)用時用一條宏指令語句即可。匯編器將一個宏展開為它所表示的語句,然后匯編這些新的語句。微機原理及接口技術(shù)1.
宏定義、宏調(diào)用和宏展開
宏定義由一對偽指令MACRO與ENDM實現(xiàn)。宏指令名MACRO[形式參數(shù)表]…;宏體
ENDM
宏指令名在同一源文件中不能重復(fù)出現(xiàn),宏體可以是任意語句序列,可選的形式參數(shù)表以逗號分隔的若干參數(shù)名。微機原理及接口技術(shù)
宏調(diào)用:
宏指令名
[實在參數(shù)表]
其中,實在參數(shù)表的類型和順序應(yīng)與宏定義時的形式參數(shù)表一致。當(dāng)源程序被匯編時,MASM用相應(yīng)的宏體取代每個宏調(diào)用,并用實在參數(shù)按位置替換宏定義中的形式參數(shù),稱為宏展開。微機原理及接口技術(shù)例:定義一個宏ADD2,將兩個數(shù)相加,和存入AX。宏定義宏體ADD2MACRONBR1,NBR2MOVAX,NBR1ADDAX,NBR2ENDM宏調(diào)用:ADD2VALUE1,VALUE2宏展開:MOVAX,VALUE1ADDAX,VALUE2微機原理及接口技術(shù)例:宏定義。宏定義宏體SHIFTMACROX,Y,ZMOVCL,XYZ,CLENDM宏調(diào)用:SHIFT4,SHL,AX宏展開:MOVCL,4SHLAX,CL微機原理及接口技術(shù)2.
跟宏有關(guān)的偽指令
(1)LOCAL偽指令
LOCAL偽指令用來定義宏內(nèi)部局部符號。
LOCAL符號名,…,符號名
LOCAL偽指令必須是宏體內(nèi)的第一條語句。宏展開時,MASM將源文件中的所有局部符號統(tǒng)一按出現(xiàn)次序替換為唯一的標(biāo)識符(??0000~??FFFF)。21微機原理及接口技術(shù)例:宏定義。ABSOLMACROOPERLOCALNEXT CMPOPER,0JGENEXTNEGOPERNEXT:…ENDM宏調(diào)用:
…ABSOLVAR…ABSOLBX宏展開第一個宏:+
CMPVAR,0+
JGE??0000+
NEGVAR+??0000:第二個宏:+
CMPBX,0+
JGE??0001+
NEGBX+??0001:微機原理及接口技術(shù)
(2)EXITM偽指令
EXITM偽指令用來立即終止宏展開,通常與條件匯編結(jié)合使用。
MASM忽略EXITM與ENDM之間的所有語句。例:宏定義。BytesmacroCountifCounteq0dbCountexitmendifdbCountdup(0)endm宏調(diào)用Bytes0;時在匯編時被展開為db0Bytes10;時在匯編時被展開為db10dup(0)微機原理及接口技術(shù)七、其它1.NAME
格式:NAME
程序名功能:為源程序目標(biāo)模塊賦名字,放在
程序開始。微機原理及接口技術(shù)2.LABEL格式:名稱LABEL
類型屬性功能:給已定義的變量或標(biāo)號另取一個名字,重新定義類型屬性。名稱為LABEL語句下一行所使用的語句中的變量或標(biāo)號取的別名。微機原理及接口技術(shù)(1)與變量連用例1:DATBLABELBYTEDATWDW3031H,3032HMOVAL,DATB[0]MOVBX,DATW[1]DATB為DATW的別名31H→AL3032H→BX注意:
變量DATB類型為字節(jié),變量DATW類型為字。微機原理及接口技術(shù)例2:堆棧段中常用LABELSTACKSEGMENTSTACK‘STACK’DW100DUP(?)TOPLABELWORDSTACKENDS100個字堆棧TOP為棧頂?shù)拿C原理及接口技術(shù)(2)與標(biāo)號連用例:
DISFLABELFARDISN:MOVAX,[SI]DISF為DISN的別名DISF的屬性為FAR微機原理及接口技術(shù)第三節(jié)匯編語言程序設(shè)計及舉例概述順序結(jié)構(gòu)分支程序循環(huán)程序字符串處理程序碼轉(zhuǎn)換程序DOS系統(tǒng)功能調(diào)用子程序設(shè)計微機原理及接口技術(shù)一、概述1.編寫步驟
(1)分析問題,抽象出數(shù)學(xué)模型
(2)確定算法
(3)畫程序流程圖工作框判斷調(diào)子程序
(4)分配內(nèi)存工作單元和寄存器。
(5)按程序流程圖編制程序。
(6)上機調(diào)試,排錯。起始框終止框微機原理及接口技術(shù)2.程序質(zhì)量判斷
(1)執(zhí)行時間
(2)占用內(nèi)存空間
(3)語句行數(shù)3.程序結(jié)構(gòu)順序分支循環(huán)子程序返回微機原理及接口技術(shù)二、順序結(jié)構(gòu)例4-1:P.105,兩個8位無符號數(shù)x和y,分別存放在BUF和BUF+1單元中,計算x-y的值,結(jié)果存回BUF單元。微機原理及接口技術(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ù)段微機原理及接口技術(shù)說明:(2)數(shù)據(jù)段DSEG SEGMENTBUF DB 82,60DSEG ENDS(1)堆棧段SSEG SEGMENT STACK ‘STACK’STA DW 100DUP(?)SSEG ENDS數(shù)據(jù)段定義減數(shù)被減數(shù)微機原理及接口技術(shù)(3)碼段CSEG SEGMENT ASSUMECS:CSEG,DS:DSEG,SS:SSEG … … …CSEG ENDSASSUME語句指明了哪些段是碼段、數(shù)據(jù)段、堆棧段和附加段微機原理及接口技術(shù)
1)
給DS賦值START:MOV AX,DSEG MOV DS,AX2)減法
MOV AL,BUFSUB AL,BUF+1MOVBUF,AL3)返回DOSMOVAH,4CHINT21H返回微機原理及接口技術(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化為大寫微機原理及接口技術(shù)(1)數(shù)據(jù)段DW定義的字變量XDW定義的字變量YDATA1 SEGMENTX DW ?Y DW ?DATA1 ENDS例4-3:P.106計算函數(shù)值Y,變量X和Y是帶符號的字變量。微機原理及接口技術(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微機原理及接口技術(shù)四、循環(huán)程序組成:
(1)初始化(2)循環(huán)體(3)修改參數(shù)(4)循環(huán)控制結(jié)構(gòu)形式:微機原理及接口技術(shù)1.用計數(shù)器控制循環(huán)
(1)減1計數(shù)器
LOOP/LOOPE/LOOPNE(2)加1計數(shù)器微機原理及接口技術(shù)
例4-4:P.109分類統(tǒng)計字?jǐn)?shù)組data中正數(shù)負(fù)數(shù)零的個數(shù),放至指定的存儲單元,數(shù)組元素個數(shù)存在其第一個字中。存正數(shù)個數(shù)11個字,第一個為長度存零個數(shù)(1)數(shù)據(jù)段DATA1SEGMENTDATADW10,X1,…X10POSITIONDW0NEGATIVEDW0ZERODW0DATA1ENDS存負(fù)數(shù)個數(shù)微機原理及接口技術(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計數(shù)器(2)代碼段CX=0結(jié)束SI地址指針(3)
循環(huán)初始化給DS賦值微機原理及接口技術(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微機原理及接口技術(shù)SAVE:
MOV POSITION,AX
MOV NEGATION,BX MOV ZERO,DX MOV AX,4C00H INT 21HCODE1 ENDS END START存?zhèn)€數(shù)微機原理及接口技術(shù)
2.條件控制循環(huán)循環(huán)次數(shù)不確定,根據(jù)循環(huán)過程中某個特定條件是否滿足來控制循環(huán)繼續(xù)還是退出。例4-5:P.111計算數(shù)組score的平均整數(shù),并存入內(nèi)存字變量Average中,數(shù)組以-1為結(jié)束標(biāo)志。微機原理及接口技術(shù)存平均數(shù)數(shù)據(jù),以-1結(jié)束(1)數(shù)據(jù)段DATA1SEGMENTdataDW90,95,…,50,-1Average DW0DATA1ENDS23微機原理及接口技術(shù)CODE1SEGMENTASSUMECS:CODE1,DS:DATA1START
:MOV AX,DATA1MOV DS,AXXOR AX,AXXOR DX,DXXOR CX,CX LEA SI,data清零(2)代碼段SI地址指針(3)
循環(huán)初始化微機原理及接口技術(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計算平均值,保存微機原理及接口技術(shù)
3.用開關(guān)變量控制循環(huán)一個循環(huán)體中有兩個循環(huán)支路,設(shè)一個開關(guān)變量,控制進入哪個循環(huán)支路。例4-6:數(shù)據(jù)采集系統(tǒng)。采到的前5個數(shù)用一種函數(shù)(FUN1)處理,開關(guān)=0。采到的后7個數(shù)用另一種函數(shù)(FUN2)處理,開關(guān)=1。微機原理及接口技術(shù)說明:(1)數(shù)據(jù):datasegmentbufferdw5,5,5,5,5,5,5,5,5,5,5,5blockdw12dup(?)count1equ5count2equ7dataends12個數(shù)據(jù)個數(shù)存結(jié)果微機原理及接口技術(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微機原理及接口技術(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為計數(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微機原理及接口技術(shù)3.多重循環(huán)
一個循環(huán)中包含另一個循環(huán),稱多重循環(huán)。如:二維數(shù)組處理,二重循環(huán)。注意:
(1)各重循環(huán)的初始控制條件及實現(xiàn)。
(2)內(nèi)循環(huán)可嵌套在外循環(huán)中,也可幾個內(nèi)循環(huán)并列在外循環(huán)中,可從內(nèi)循環(huán)跳到外循環(huán),不可從外循環(huán)中直接跳進內(nèi)循環(huán)。
(3)要防止出現(xiàn)死循環(huán)。
微機原理及接口技術(shù)例4-7:延時程序,多重循環(huán)實現(xiàn)軟件延時。DELAY:MOVDX,3FFH
TIME:MOVAX,0FFFFH
TIME1:NOPDECAXJNETIME1DECDX
JNETIMERET
內(nèi)循環(huán)控制變量AX,初值=FFFFH
外循環(huán)控制變量DX,初值=3FFH返回微機原理及接口技術(shù)
子程序技術(shù)是解決重復(fù)性問題的設(shè)計方法,在匯編語言中又稱為過程。1.
子程序調(diào)用格式:CALL子程序名分近調(diào)用(NEAR)和遠調(diào)用(FAR)。五、子程序設(shè)計微機原理及接口技術(shù)2.參數(shù)傳遞技術(shù)入口參數(shù)出口參數(shù)傳遞參數(shù)的方法:
寄存器存儲器堆棧微機原理及接口技術(shù)(1)寄存器傳送參數(shù)例4-8P.115統(tǒng)計字符串中相同字符的個數(shù),個數(shù)最多的字符存CMORE單元。
CL字符串長度
AL當(dāng)前字符
BX當(dāng)前字符地址
DL當(dāng)前字符個數(shù)
DH重復(fù)字符最多個數(shù)
CALLCPP
子程序CPP統(tǒng)計當(dāng)前字符的重復(fù)次數(shù)放DL,當(dāng)前字符放AL。微機原理及接口技術(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)計重復(fù)字符數(shù)子程序BX:字符串首地址CL:字符串長度DH:重復(fù)個數(shù)(最多)DL:重復(fù)個數(shù)(當(dāng)前)當(dāng)前字符個數(shù)多,保存AL:當(dāng)前字符修改參數(shù),控制循環(huán)微機原理及接口技術(shù)CPP
PROC XORDL,DL MOVCH,CLMOVSI,BX INC SILP1:CMPAL,[SI] JNZ NEXT1INC DLNEXT1:INC SIDEC CHJNZ LP1RETCPP ENDP統(tǒng)計當(dāng)前字符的重復(fù)次數(shù)AL:當(dāng)前字符SI:串地址CH:串長度DL:重復(fù)次數(shù)重復(fù)次數(shù)清0判重復(fù)?重復(fù)計數(shù)DL修改參數(shù)長度、地址送CH、SI未完繼續(xù)子程序微機原理及接口技術(shù)(2)存儲單元傳送參數(shù)數(shù)據(jù)多,放在存儲器中,傳遞存儲地址。例4-9P.116統(tǒng)計字符串中數(shù)字字符、字母、其它字符的個數(shù),存BX、CX、DI中,字符串首地址DS:DX(以字符0結(jié)束)。微機原理及接口技術(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’保護現(xiàn)場<‘0’轉(zhuǎn)other數(shù)字字符計數(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微機原理及接口技術(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高微機原理及接口技術(shù)子程序:DELCHAR:PUSHBPSTRHSTRLLENGHLENGL返回H返回LBP(SP)BPHBPLSPSPSPMOVBP,SPMOVSI,[BP+4];取LENGTH1地址MOVDI,[BP+6];取STRING地址
……POPBPRET4再彈出4個字節(jié)微機原理及接口技術(shù)例4-10:P.117,從一個字符串中刪去一個字符。說明:字符串要刪的字符長度(1)數(shù)據(jù)段
DATASEGMENT
STRING
DB‘…’
LENGTH1DW$-STRINGKEYDB‘x’DATAENDS微機原理及接口技術(shù)(2)參數(shù)傳送采用堆棧,主程序中:
LEABX,TRINGLEACX,LENGTH1PUSHBX;壓入STRING地址
PUSHCX;壓入LENGTH1地址
MOVAL,KEYCALLDELCHAR;調(diào)用刪字符子程序微機原理及接口技術(shù)(3)子程序DELCHAR:刪一個字符
1)取出參數(shù)DELCHARPROCPUSHBPMOVBP,SPPUSHSIPUSHDIPUSHCXCLDMOVSI,[BP+4];取LENGTH1地址→SIMOVCX,[SI];得到長度
MOVDI,[BP+6];取STRING地址→DI微機原理及接口技術(shù)
2)刪去一個字符
REPNESCASBJNEDONEMOVSI,[BP+4]DECWORDPTR[SI]MOVSI,DIDECDIREPMOVSB掃描字符串找到刪字符未找到退出SI串長度地址串長度減1依次向前移DIDISIxSTRING微機原理及接口技術(shù)
3)子程序返回
DONE:POPCXPOPDIPOPSIPOPBPRET4DELCHARENDPCODEENDSENDSTART返回25微機原理及接口技術(shù)六、碼轉(zhuǎn)換程序十六進制、二進制、BCD碼、ASCII碼轉(zhuǎn)換方法:(1)算術(shù)和邏輯運算指令,軟件實現(xiàn);(2)查表指令;(3)硬件譯碼。微機原理及接口技術(shù)1.十六進制→ASCII例4-11:有一個二進制數(shù)碼串,把每一個字節(jié)中的二進制轉(zhuǎn)換為兩位十六進制數(shù)的ASCII碼,高四位的ASCII碼放在地址高的單元。串中的第一個字節(jié)為位串的長度。微機原理及接口技術(shù)說明:
(1)十六進制:0~9A~FASCII碼:30H~39H41H~46H
對0~9,加上30H
對A~F,加上‘A’-10(2)地址指針:源(十六進制)bx
目的(ASCII)si(3)cx=L1=2,每次循環(huán)轉(zhuǎn)換一個字節(jié)兩位十六進制數(shù):低位與高位拆開:1)AND AL,0FH2)MOV CL,4SHR AL,CL低四位原高四位→低四位微機原理及接口技術(shù)
數(shù)據(jù)段data segmentl1 dw 2string db 14h,9Ahl2 dw ?buffer db 2*2dup(?)data ends串長度l1放串長度l2十六進制數(shù)放ASCII微機原理及接口技術(shù)code segmentassumecs:code,ds:data,es:datastart:movax,datamovds,axmoves,axmovcx,l1leabx,stringleasi,buffermovax,cxsalcx,1movl2,cxmovcx,ax存ASCII碼串長度源串長度→CXbx:源地址指針si:目的地址指針
代碼段微機原理及接口技術(shù)again:moval,[bx]movdl,alandal,0fh
callchangemoval,dlpushcxmovcl,4shral,clpopcx
callchangeincbx
loopagainmovah,4chint21h取十六進制數(shù)低四位→ASCII高四位→ASCII微機原理及接口技術(shù)一位十六進制數(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微機原理及接口技術(shù)2.ASCII→壓縮BCD說明:(1)對非壓縮BCD碼,只要將ASCII的高4位屏蔽(AND)即可。
(2)對壓縮BCD碼,要處理兩個ASCII碼,先為低位BCD碼,后為高位BCD碼,組合起來。
微機原理及接口技術(shù)datasegmentl2dw4bufferdb34h,33h,38h,39hl1dw?stringdb2dup(?)dataendsstacksegmentstack’stack’db100dup(?)stackendsASCII存BCD碼微機原理及接口技術(shù)
codesegment
assumecs:code,ds:data,es:data,ss:stackstart
:movax,datamovds,axmoves,ax微機原理及接口技術(shù)
movcx,l2shrcx,1movl1,cxleabx,bufferleasi,stringagain:moval,[bx]
andal,0fhmovdl,alincbxmoval,[bx]
andal,0fhBCD碼區(qū)長度取ASCII碼化為BCD碼取下一個ASCII碼化為BCD碼微機原理及接口技術(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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 開放式基金交易服務(wù)合同
- 2024簡單銷售代理合同樣本
- 合同范本:委托招商引資協(xié)議書
- 二手車購車合同協(xié)議樣本
- 2024照明購銷合同
- 企業(yè)與高校就業(yè)實習(xí)協(xié)議書參考
- 代理公司注冊登記協(xié)議書
- 培訓(xùn)機構(gòu)老師合作協(xié)議示例
- 正規(guī)版房屋租賃合同協(xié)議范本
- 全面聘用合同范本匯編
- QB-T 5797-2023 眼鏡架 醋酸纖維素板材
- 2024-2030年中國模架租賃行業(yè)市場發(fā)展現(xiàn)狀及投資策略咨詢報告
- 修回稿修改說明
- 病原微生物實驗室生物安全管理培訓(xùn)考核試題
- 當(dāng)代社會政策分析 課件 第七章 老年社會政策
- 2024年湖北聯(lián)投集團有限公司校園招聘考試試題各版本
- 《無人機駕駛航空試驗基地(試驗區(qū))基礎(chǔ)設(shè)施建設(shè)規(guī)范(征求意見稿)》
- MOOC 藥物代謝動力學(xué)-中國藥科大學(xué) 中國大學(xué)慕課答案
- FZT 92082-2017 非織造布噴絲板
- DL-T 5745-2021電力建設(shè)工程工程量清單計價規(guī)范-PDF解密
- 2024上海市標(biāo)準(zhǔn)房屋租賃合同官方版
評論
0/150
提交評論