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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

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

;段開始

語句NAME1ENDS

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

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

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

2)數字:0--9

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

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

1)數字(整數)常量:二進制以B結束十進制十六進制以H結束

2)字符串常量:單引號內的ASCII字符構成‘A’(4)標識符(Identifiers)

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

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

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

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

存放在存儲單元中的操作數,程序中出現的是存儲單元地址。

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

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

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

(2)偏移量

(3)類型:NEAR近,只改變IPFAR遠,改變CS和IP(4)數

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

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

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

一個運算符取一個或多個操作數的值,形成一個新值。

1)算術運算符:如+-*/MOD

對地址的運算如:加,減

2)邏輯運算符:如AND、OR、XOR、NOT微機原理及接口技術3)關系運算符相等EQ(Equal)

不等NE(NotEqual)

小于LT(LessThan)

大于GT(GreaterThan)

小于或等于LE(LessThanorEqual)

大于或等于GE(GreatThanorEqual)

說明:①兩個操作數,或都為數字,或是同一段的存儲單元地址,結果總是一個數值。②關系是假,數值為0

關系是真,數值為全1微機原理及接口技術

例1:MOVBX,PORT_VALLT51)若PORT_VAL<5關系為真,匯編后產生語句為

MOVBX,0FFFFH2)若PORT_VAL≥5關系為假,匯編后產生語句為

MOVBX,0

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

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

(1)指令型語句

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

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

1)指令格式標號:助記符參數,…參數;注釋

偽指令格式名字命令參數,…參數;注釋注意:指令標號后有冒號,偽指令后沒有。

2)

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

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

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

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

5.可執(zhí)行文件的調試用調試器對可執(zhí)行文件進行調試,來發(fā)現錯誤。

DEBUG是最簡單的調試器。

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

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

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

功能:已經用EQU定義的符號,不用了可用

PURGE語句來解除。例:

PURGENEW_PORTNEW_PORTEQUPORT_VAL+10

解除后的符號又可用EQU來重新定義了。返回微機原理及接口技術二、數據定義語句(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。微機原理及接口技術例:THINGDB25存儲單元THING處存放25安排存儲單元BUF1,內容不定BUF2單元開始留出9個單元,內容不定42H放BUF3單元,41H放BUF3+1單元BUF4單元開始留出4個字單元,內容不定()中為值,內容不定BUF1DB?BUF2DB9DUP(?)BUF3DW4142HBUF4DW4DUP(?)重復次數微機原理及接口技術BIGGEST_THINGDD12345678H雙字,定義4個字節(jié)IN_PORTDBPORT_VAL初始值為表達式,PORT_VAL已賦值BUF5DB6DUP(0)BUF6DB4DUP(1,2DUP(20H))BUF5開始的6個單元,初始值為0DUP嵌套外重復次數內重復次數20H,20H重復四次

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

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不占用內存空間。(2)

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

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

OFFSET偏移地址

TYPE類型

LENGTH單元數

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

段地址SEG

格式:SEG

變量或標號功能:返回變量或標號的段地址

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

OFFSET

格式:OFFSET

變量或標號功能:返回變量或標號的偏移地址

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

類型

TYPE

格式:TYPE

存儲器操作數功能:返回存儲器操作數的類型

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

數據字2

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

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

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

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

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

例:

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

格式:SIZE

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

SIZE=TYPE×LENGTH

例:

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

格式:類型/距離

PTR

變量或標號功能:將左邊的類型屬性賦給右邊的變

量或標號。

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

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

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

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

MOVAL,ONE_BYTE微機原理及接口技術例2:MOV[BX],6

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

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

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

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

格式:變量/標號EQUTHIS

類型/距離

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

注意:THIS和PTR一樣,也不分配存儲單元。微機原理及接口技術例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是字。返回微機原理及接口技術1.ORG

格式:ORG<表達式>

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

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

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

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

邏輯段內容段名ENDS

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

格式:

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

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

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

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

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

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

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

過程內容

RET

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

的目標操作數。

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

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

1.SEGMENT…ENDS段結束

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

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

宏定義、宏調用和宏展開

宏定義由一對偽指令MACRO與ENDM實現。宏指令名MACRO[形式參數表]…;宏體

ENDM

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

宏調用:

宏指令名

[實在參數表]

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

跟宏有關的偽指令

(1)LOCAL偽指令

LOCAL偽指令用來定義宏內部局部符號。

LOCAL符號名,…,符號名

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

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

CMPVAR,0+

JGE??0000+

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

CMPBX,0+

JGE??0001+

NEGBX+??0001:微機原理及接口技術

(2)EXITM偽指令

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

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

格式:NAME

程序名功能:為源程序目標模塊賦名字,放在

程序開始。微機原理及接口技術2.LABEL格式:名稱LABEL

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

變量DATB類型為字節(jié),變量DATW類型為字。微機原理及接口技術例2:堆棧段中常用LABELSTACKSEGMENTSTACK‘STACK’DW100DUP(?)TOPLABELWORDSTACKENDS100個字堆棧TOP為棧頂的名微機原理及接口技術(2)與標號連用例:

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

(1)分析問題,抽象出數學模型

(2)確定算法

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

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

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

(6)上機調試,排錯。起始框終止框微機原理及接口技術2.程序質量判斷

(1)執(zhí)行時間

(2)占用內存空間

(3)語句行數3.程序結構順序分支循環(huán)子程序返回微機原理及接口技術二、順序結構例4-1:P.105,兩個8位無符號數x和y,分別存放在BUF和BUF+1單元中,計算x-y的值,結果存回BUF單元。微機原理及接口技術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堆棧段源程序結束代碼段數據段微機原理及接口技術說明:(2)數據段DSEG SEGMENTBUF DB 82,60DSEG ENDS(1)堆棧段SSEG SEGMENT STACK ‘STACK’STA DW 100DUP(?)SSEG ENDS數據段定義減數被減數微機原理及接口技術(3)碼段CSEG SEGMENT ASSUMECS:CSEG,DS:DSEG,SS:SSEG … … …CSEG ENDSASSUME語句指明了哪些段是碼段、數據段、堆棧段和附加段微機原理及接口技術

1)

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

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

JGECASE23 ADDAX,10 JMPRESULTCASE23: CMPAX,10

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

(1)初始化(2)循環(huán)體(3)修改參數(4)循環(huán)控制結構形式:微機原理及接口技術1.用計數器控制循環(huán)

(1)減1計數器

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

例4-4:P.109分類統(tǒng)計字數組data中正數負數零的個數,放至指定的存儲單元,數組元素個數存在其第一個字中。存正數個數11個字,第一個為長度存零個數(1)數據段DATA1SEGMENTDATADW10,X1,…X10POSITIONDW0NEGATIVEDW0ZERODW0DATA1ENDS存負數個數微機原理及接口技術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計數器(2)代碼段CX=0結束SI地址指針(3)

循環(huán)初始化給DS賦值微機原理及接口技術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,轉EQUAL負,轉LOWER(5)

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

MOV POSITION,AX

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

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

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

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

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)體負,轉over退出循環(huán)(5)

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

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

源數據指針buffer→bx

處理后數據指針block→sicount1+1,count2+1→cx

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

判開關量dx=0?dx=0callfun15個數據處理完后dx=1,cx=count2+1dx=1callfun2

每處理完一個數,修改指針bx,si微機原理及接口技術

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)初始化開關dx=0cx為計數器bx源指針si目的指針(2)循環(huán)主體開關量轉為1為0,函數1處理處理后保存(3)修改參數函數2處理(4)循環(huán)控制開關不為0轉anoth微機原理及接口技術3.多重循環(huán)

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

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

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

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

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

TIME:MOVAX,0FFFFH

TIME1:NOPDECAXJNETIME1DECDX

JNETIMERET

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

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

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

子程序調用格式:CALL子程序名分近調用(NEAR)和遠調用(FAR)。五、子程序設計微機原理及接口技術2.參數傳遞技術入口參數出口參數傳遞參數的方法:

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

CL字符串長度

AL當前字符

BX當前字符地址

DL當前字符個數

DH重復字符最多個數

CALLCPP

子程序CPP統(tǒng)計當前字符的重復次數放DL,當前字符放AL。微機原理及接口技術主程序: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 調統(tǒng)計重復字符數子程序BX:字符串首地址CL:字符串長度DH:重復個數(最多)DL:重復個數(當前)當前字符個數多,保存AL:當前字符修改參數,控制循環(huán)微機原理及接口技術CPP

PROC XORDL,DL MOVCH,CLMOVSI,BX INC SILP1:CMPAL,[SI] JNZ NEXT1INC DLNEXT1:INC SIDEC CHJNZ LP1RETCPP ENDP統(tǒng)計當前字符的重復次數AL:當前字符SI:串地址CH:串長度DL:重復次數重復次數清0判重復?重復計數DL修改參數長度、地址送CH、SI未完繼續(xù)子程序微機原理及接口技術(2)存儲單元傳送參數數據多,放在存儲器中,傳遞存儲地址。例4-9P.116統(tǒng)計字符串中數字字符、字母、其它字符的個數,存BX、CX、DI中,字符串首地址DS:DX(以字符0結束)。微機原理及接口技術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’保護現場<‘0’轉other數字字符計數清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字母恢復現場字符0結束24微機原理及接口技術(3)堆棧傳送參數數據定義:

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

LEABX,STRINGLEACX,LENGTH1PUSHBX;壓入參數1

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

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

DATASEGMENT

STRING

DB‘…’

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

LEABX,TRINGLEACX,LENGTH1PUSHBX;壓入STRING地址

PUSHCX;壓入LENGTH1地址

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

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

MOVDI,[BP+6];取STRING地址→DI微機原理及接口技術

2)刪去一個字符

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

3)子程序返回

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

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

對0~9,加上30H

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

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

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

代碼段微機原理及接口技術again:moval,[bx]movdl,alandal,0fh

callchangemoval,dlpushcxmovcl,4shral,clpopcx

callchangeincbx

loopagainmovah,4chint21h取十六進制數低四位→ASCII高四位→ASCII微機原理及接口技術一位十六進制數ASCII碼子程序:

change proc cmpal,10 jladd_0

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

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

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

codesegment

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

:movax,datamovds,axmoves,ax微機原理及接口技術

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

andal,0fhmovdl,alincbxmoval,[bx]

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

pushcxmovcl,4shlal,cl

popcx

oral,dl

mov[si],al

incbxincsiloopagainmovah,4ch

溫馨提示

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

評論

0/150

提交評論