第2章 8086微處理器及匯編語言——匯編語言_第1頁
第2章 8086微處理器及匯編語言——匯編語言_第2頁
第2章 8086微處理器及匯編語言——匯編語言_第3頁
第2章 8086微處理器及匯編語言——匯編語言_第4頁
第2章 8086微處理器及匯編語言——匯編語言_第5頁
已閱讀5頁,還剩62頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第第2章章 8086微處理器與匯編語言微處理器與匯編語言匯編語言匯編語言學習目標學習目標n了解了解8086匯編語言格式以及偽指令的應用匯編語言格式以及偽指令的應用要求。要求。n理解程序設(shè)計中順序、分支、循環(huán)的基本理解程序設(shè)計中順序、分支、循環(huán)的基本結(jié)構(gòu),以及實現(xiàn)方法。結(jié)構(gòu),以及實現(xiàn)方法。學習內(nèi)容學習內(nèi)容n匯編語言語句的種類及其格式匯編語言語句的種類及其格式n匯編語言數(shù)據(jù)匯編語言數(shù)據(jù)n表達式與運算符表達式與運算符n偽指令偽指令n匯編語言程序設(shè)計匯編語言程序設(shè)計計劃學時:計劃學時:4匯編語言語句的種類及其格式匯編語言語句的種類及其格式n指令語句指令語句能產(chǎn)生目標代碼能產(chǎn)生目標代碼, CPU可以執(zhí)行

2、可以執(zhí)行, 完成特定功能的語句完成特定功能的語句, 由由CPU指令組成。指令組成。n指示語句(偽指令語句)指示語句(偽指令語句)不產(chǎn)生目標代碼不產(chǎn)生目標代碼, 僅是為匯編程序作指示的語句。僅是為匯編程序作指示的語句。語句的格式語句格式為:語句格式為:n 名字名字 助記符助記符 操作數(shù)操作數(shù) ;注釋;注釋 n其中,其中,助記符助記符項為必要項,項為必要項, 方括號項方括號項 為可選項為可選項。n 名字名字 n可為作名字的字符有:字母可為作名字的字符有:字母AZ, 數(shù)字數(shù)字09, 字符?字符? 、_等。等。n數(shù)字不能放在名字之首。數(shù)字不能放在名字之首。n在指令語句中,名字一般是在指令語句中,名字一

3、般是標號標號。n偽指令語句中,名字通常是偽指令語句中,名字通常是變量變量( (名名) ), , 段名段名,過程名過程名等。等。 標號標號: :是某指令代碼存放單元的符號地址,標號后是某指令代碼存放單元的符號地址,標號后必須有一個冒號必須有一個冒號“: :” 標號的屬性:標號的屬性:段,偏移量,類型(段,偏移量,類型(FARFAR,NEARNEAR) 變量變量( (名名) )某個存儲器中數(shù)據(jù)單元或數(shù)據(jù)區(qū)的符號某個存儲器中數(shù)據(jù)單元或數(shù)據(jù)區(qū)的符號地址地址, , 它代表數(shù)據(jù)單元或數(shù)據(jù)區(qū)。它代表數(shù)據(jù)單元或數(shù)據(jù)區(qū)。 變量有三種屬性:變量有三種屬性:段,偏移量,類型段,偏移量,類型(BYTE(BYTE,WO

4、RDWORD,DWORDDWORD,QWORD)QWORD)匯編語言數(shù)據(jù)n常量:常量:如立即數(shù),直接尋址的地址,如立即數(shù),直接尋址的地址,ASC碼字符串等碼字符串等。n變量:變量:通常指存放在內(nèi)存中的值,即內(nèi)存操作數(shù)。通常指存放在內(nèi)存中的值,即內(nèi)存操作數(shù)。n屬性:段值屬性:段值(SEG)、段內(nèi)偏移量、段內(nèi)偏移量(OFFSET)及類型及類型(TYPE)。n類型:字節(jié)型類型:字節(jié)型(byte)、字型、字型(word)和雙字型和雙字型(dword)。表達式與運算符n表達式表達式表達式由表達式由常量常量( (數(shù)值常量、符號常量、字符常量數(shù)值常量、符號常量、字符常量); ); 變變量量; ; 操作符操作

5、符( (分析操作符、綜合操作符分析操作符、綜合操作符) )和和運算符運算符( (算術(shù)算術(shù)運算符、邏輯運算符、關(guān)系運算符運算符、邏輯運算符、關(guān)系運算符) )組成。組成。n運算符運算符n算術(shù)運算符算術(shù)運算符 + , - , + , - , * * , / , MOD , / , MOD。MOV DX , BLOCK(61)2 該指令語句等價于該指令語句等價于MOV DX , BLOCK10算術(shù)操作符應用之例數(shù)組數(shù)組ARRAY定義如下,試寫出把數(shù)組長度(字數(shù))存入定義如下,試寫出把數(shù)組長度(字數(shù))存入CX寄存器的指令。寄存器的指令。ARRAYDW1, 2, 3, 4, 5, 6, 7ENDDW ?

6、END是為計算數(shù)組長度而建立的符號地址。是為計算數(shù)組長度而建立的符號地址。所需指令為所需指令為:MOV CX , (ENDARRAY)/2匯編后計算表達式而形成了指令匯編后計算表達式而形成了指令MOV CX , 7n邏輯運算操作符邏輯運算操作符nAND(邏輯與邏輯與)nOR(邏輯或邏輯或) nXOR(邏輯異或邏輯異或)nNOT(邏輯非邏輯非) 它們只能用于數(shù)字表達式中它們只能用于數(shù)字表達式中AND DX , PORT_VAL OR 0FFH 匯編匯編PORT_VAL OR 0FFH 確定了外設(shè)端口號確定了外設(shè)端口號IN AL , PORT_VALOUT PORT_VAL AND 0FEH ,

7、AL 當端口號當端口號PORT_VAL為偶數(shù)時為偶數(shù)時, 輸出端口號與之相同;輸出端口號與之相同; 當當PORT_VAL為奇數(shù)時為奇數(shù)時, 輸出端口號比輸入端口號小輸出端口號比輸入端口號小1邏輯運算操作符應用之例n關(guān)系運算符關(guān)系運算符EQ(等于)、(等于)、NE(不等)、(不等)、LT(小于)、(小于)、GT(大于)、(大于)、 LE(小于或等于)、(小于或等于)、GE(大于或等于)(大于或等于)n參與關(guān)系運算操作的兩個操作數(shù)必須都同為數(shù)字或為同一參與關(guān)系運算操作的兩個操作數(shù)必須都同為數(shù)字或為同一段內(nèi)的兩個存儲器地址。段內(nèi)的兩個存儲器地址。n計算的結(jié)果應為邏輯值:計算的結(jié)果應為邏輯值:n結(jié)果為

8、真,表示為結(jié)果為真,表示為FFFFHn結(jié)果為假,表示為結(jié)果為假,表示為0MOV AX , 4 EQ 3; 結(jié)果為假結(jié)果為假等價于等價于MOV AX , 0MOV AX , 4 NE 3; 結(jié)果為真結(jié)果為真等價于等價于MOV AX , 0FFFFHMOV BX , (PORT_VAL LT 5)AND 20) OR (PORT_VAL GE 5)AND 30)當當 PORT_VAL5時時, 匯編結(jié)果為匯編結(jié)果為: MOV BX , 20否則,匯編結(jié)果為:否則,匯編結(jié)果為:MOV BX , 30關(guān)系運算操作符應用之例分析運算符nSEG格式:格式:SEG 變量變量(名名)功能:取變量所在段的功能:取

9、變量所在段的段基址段基址主要有:主要有:SEG , OFFESET , TYPE, SIZE , LENGTHnOFFSET格式:格式:OFFSET 變量變量/標號標號功能:取變量或標號的功能:取變量或標號的偏移地址偏移地址分析運算符應用之例MOV DI , OFFSET DATA1 ; (DI)DATA1的偏移地址的偏移地址MOV AX , SEG ARRAY; (AX)ARRAY的段基址的段基址 MOV DS , AX ; (DS)(AX)nTYPE: 返回一個數(shù)值,表示存儲器操作數(shù)的類型。返回一個數(shù)值,表示存儲器操作數(shù)的類型。格式:格式:TYPE 變量或標號變量或標號VARDW ?; V

10、AR為字變量為字變量ARRAYDD 10 DUP(?);ARRAY為雙字變量為雙字變量STRDB THIS IS TEST ; STR為字節(jié)變量為字節(jié)變量 MOVAX , TYPE VAR; (AX) 2MOVBX , TYPE ARRAY; (BX) 4MOVCX , TYPE STR; (CX) 1ARRAYDW 1 , 2 , 3:ADDSI , TYPE ARRAY匯編后:匯編后: ADDSI , 2 分析運算操作符應用之例nLENGTH格式:格式:LENGTH 變量(名)變量(名)功能:取重復定義功能:取重復定義(DUP)的復制次數(shù)的復制次數(shù), 若不是若不是DUP定定義,則取數(shù)值義,

11、則取數(shù)值1。nSIZE格式:格式:SIZE 變量(名)變量(名)功能:取功能:取LENGTH值與值與TYPE值值的乘積。的乘積。若:若:FEES DW 100 DUP (?)則則TYPEFEES = 2 LENGTH FEES = 100 SIZE FEES=(LENGTH FEES)(TYPE FEES)=1002=200所以所以MOV CX , SIZE FEES匯編后匯編后: MOV CX , 200若若: FEES DW 100 DUP (?)對于指令對于指令:MOV CX , LENGTH FEES匯編后匯編后:MOV CX , 100若若:ARRAYDW 1 , 2 , 3對于指令

12、對于指令:MOV CX , LENGTH ARRAY匯編后為:匯編后為: MOV CX , 1分析運算操作符應用之例綜合運算符n屬性運算符屬性運算符PTRn格式:格式:類型類型 PTR 表達式表達式n功能:功能:對存儲單元賦予確定的類型對存儲單元賦予確定的類型。nTHIS運算符運算符n格式:格式:名字名字 EQU THIS 類型類型n功能:功能:給名字給名字(變量或標號變量或標號)指定類型,它的段,偏移地址指定類型,它的段,偏移地址與下一存儲單元相同。與下一存儲單元相同。n短程運算符短程運算符SHORTn格式:格式:SHORT 標號標號n功能:功能:指明標號的類型為短標號指明標號的類型為短標號

13、, 從標號到引用標號指令從標號到引用標號指令之間的距離是在:之間的距離是在: -128127字節(jié)范圍內(nèi)。字節(jié)范圍內(nèi)。設(shè)已有數(shù)據(jù)定義如下設(shè)已有數(shù)據(jù)定義如下TWO_BYTE DW ?可用以下語句對這兩個字節(jié)賦予另一種類型定義可用以下語句對這兩個字節(jié)賦予另一種類型定義ONE_BYTE EQU BYTE PTR TWO_BYTEOTHER_BYTE EQU BYTE PTR TWO_BYTE+1OTHER_BYTE EQU BYTE PTR ONE_BYTE1 ONE_BYTE與與TWO_BYTE 皆為符號地址皆為符號地址 它們的段和偏移量屬性相同,但類型屬性不同,前者是它們的段和偏移量屬性相同,但類

14、型屬性不同,前者是BYTE 類型,后者是類型,后者是WORD類型。類型。INC BX; 操作數(shù)的類型不明確操作數(shù)的類型不明確可用可用PTR操作符對操作數(shù)明確定義:操作符對操作數(shù)明確定義:INC WORD PTR BX ;明確字操作數(shù);明確字操作數(shù)綜合操作符應用之例FIRST_TYPEEQUTHIS BYTE WORD_TABLE DW100 DUP (?) FIRST_TYPE與與WORD_TABLE的段,偏移地址均相同,但的段,偏移地址均相同,但前者是前者是BYTE類型,后者是類型,后者是WORD類型。類型。綜合操作符應用之例L1 EQU THIS FARL2:MOV CX ,100 L2標

15、號與標號與L1標號的段、偏移地址一樣,但類型不同。標號的段、偏移地址一樣,但類型不同。 L2是是NEAR類型,類型,L1是是FAR類型,允許其他段的轉(zhuǎn)移指令調(diào)類型,允許其他段的轉(zhuǎn)移指令調(diào)用。用。例如例如 :JMP SHORT TAG TAG: n字節(jié)分離運算符字節(jié)分離運算符LOW、HIGH功能:功能:分別得一個數(shù)值或地址表達式的低位和高位分別得一個數(shù)值或地址表達式的低位和高位字節(jié)字節(jié)STUFF EQU 0ABCDH語句:語句:MOV AH , HIGH STUFF 匯編后:匯編后: MOV AH , 0ABH語句:語句:MOV AL , LOW STUFF 匯編后:匯編后: MOV AL ,

16、0CDH綜合運算符偽指令n數(shù)據(jù)定義偽指令語句數(shù)據(jù)定義偽指令語句功能:功能:定義變量的類型,分配空間并賦初值定義變量的類型,分配空間并賦初值。格式:格式:變量名變量名 DB/DW/DD 操作數(shù)操作數(shù),操作數(shù)操作數(shù)n變量名變量名是任選項,是數(shù)據(jù)單元的符號地址是任選項,是數(shù)據(jù)單元的符號地址。n操作數(shù)的幾種形式操作數(shù)的幾種形式n操作數(shù)為常數(shù),常數(shù)表達式或為字符(串)操作數(shù)為常數(shù),常數(shù)表達式或為字符(串)n操作數(shù)是操作數(shù)是“?”只定義存儲空間,但不預存儲數(shù)據(jù)只定義存儲空間,但不預存儲數(shù)據(jù)n操作數(shù)是已定義的變量或標號操作數(shù)是已定義的變量或標號操作數(shù)字段的幾種形式舉例操作數(shù)字段的幾種形式舉例操作數(shù)是常數(shù)或是

17、常數(shù)表達式操作數(shù)是常數(shù)或是常數(shù)表達式DATA_BYTEDB10,4,10HDATA_WORDDW100,100H,-5DATA_DWDDD320,0FFFDHDATA_BYTE 是字節(jié)類型是字節(jié)類型, 每個操作數(shù)占一個字節(jié)單元每個操作數(shù)占一個字節(jié)單元DATA_WORD 是字類型是字類型, 每個操作數(shù)占兩個字節(jié)單元每個操作數(shù)占兩個字節(jié)單元DATA_DWD 是雙字類型是雙字類型, 每個操作數(shù)占四個字節(jié)單元每個操作數(shù)占四個字節(jié)單元000000FDFF00000A041064000001FBFF3C60d0FFFDh10d410h100d100h-5DATA_BYTEDATA_WORDDATA_DW操

18、作數(shù)字段的幾種形式舉例操作數(shù)字段的幾種形式舉例操作數(shù)是操作數(shù)是字符串字符串MESSAGE DB HELLO AB DB ABBA DWAB字符串必須用單引號字符串必須用單引號 包封包封超過兩個字符的字符串只能用超過兩個字符的字符串只能用DB定義。定義。操作數(shù)是操作數(shù)是?ABCDB0 , ? , ? , ? , 0DEFDW? , 52 , ?43454C4C4FHELLOMESSAGE4241BA4142AB DB ABDW ABABC-00-340000-52dDEF-關(guān)于復制操作符關(guān)于復制操作符DUP (duplication operator) ARY1 DB 2 DUP (0, 3)等

19、價于等價于 ARY1 DB 0, 3, 0, 3.ARY2 DB 50 DUP (1, 2 DUP (3, 4), 0)等價于等價于ARY2 DB 1, 3, 4, 3, 4, 0,1, 3, 4, 3, 4, 0.(50組組)符號定義的偽指令符號定義的偽指令n表達式賦值偽指令表達式賦值偽指令EQU格式格式: : 名字名字 EQU 表達式表達式n表達式可以是常數(shù)、符號、地址表達式、寄存器表達式可以是常數(shù)、符號、地址表達式、寄存器, , 指指令等;令等;n表達式不允許重復定義表達式不允許重復定義。CR EQU 256; 數(shù)賦于符號名數(shù)賦于符號名DATA EQU HIGHT+12 ; 地址表達式賦

20、予符號名地址表達式賦予符號名LF EQU ASC_TABLE; 變量賦新符號名變量賦新符號名BEQU BP+8 ; 變址方式引用賦于符號變址方式引用賦于符號BCBD EQU AAM; CBD等價于指令等價于指令AAMn等號等號 = 偽操作偽操作“=”與與“EQU”的功能一樣,的功能一樣, 但但“=”操作允操作允許表達式重復定義許表達式重復定義。COUNT=10MOV CX , COUNT; (CX) 10 COUNT=COUNT1MOVBX , COUNT ; (BX) 9 n類型定義偽指令類型定義偽指令LABLEn格式:格式:標號標號/變量變量 LABLE 類型類型n功能:功能:對對標號標號

21、/變量變量的類型定義的類型定義, 它的段地址和它的段地址和偏移地址與下一個存儲器單元的相同。偏移地址與下一個存儲器單元的相同。變量類型:變量類型: BYTE、 WORD、 DWORD標號類型:標號類型: NEAR、FARLABLE偽指令應用舉例AGAINF LABLEFARAGAIN:PUSHAX AGAIN的類型為的類型為NEAR,允許在本段內(nèi)調(diào)用;,允許在本段內(nèi)調(diào)用; AGAINF的類型為的類型為FAR,允許被其他段調(diào)用;,允許被其他段調(diào)用; AGAIN與與AGAINF的段、偏移屬性均相同。的段、偏移屬性均相同。AREAW LABLE WORDAREABDB 100 DUP(?) MOVA

22、REAW , AX MOVAREABBX , AL AREAW的類型為的類型為WORD,AREAB的類型為的類型為BYTE 它們的段地址與偏移地址一樣它們的段地址與偏移地址一樣 段定義偽指令SEGMENT/ENDSn格式格式: :段名段名 SEGMENT 定位類型定位類型組合類型組合類型類別類別 ( (段體段體) )段名段名 ENDSn功能功能: : 定義一個邏輯段并賦予一個段名。定義一個邏輯段并賦予一個段名。 n“SEGMENT”位于邏輯段的開始,指示邏輯段起始位于邏輯段的開始,指示邏輯段起始n“ENDS” 位于邏輯段的結(jié)尾,指示邏輯段的結(jié)束位于邏輯段的結(jié)尾,指示邏輯段的結(jié)束n二者前的段名必

23、須一致二者前的段名必須一致定位類型應用舉例SEGMENT偽操作的定位類型應用舉例偽操作的定位類型應用舉例STACKSEGMENTSTACK; STACK段段 DB 100 DUP(?) ; 長度為長度為100字節(jié)字節(jié)STACKENDS ; STACK段結(jié)束段結(jié)束DATA1SEGMINT BYTE ; DATA1段段STRINGDB this is an example!; 定義字符串定義字符串DATA1ENDS; DATA1段結(jié)束段結(jié)束 段分配偽指令ASSUMEn格式格式:ASSUME 段寄存器名:段名段寄存器名:段名,段寄存器名段寄存器名:段名段名,n功能功能: 指示匯編程序源程序的邏輯段與

24、段寄存器的關(guān)系指示匯編程序源程序的邏輯段與段寄存器的關(guān)系n說明說明n段寄存器名必須是段寄存器名必須是CS、DS、ES和和SS之一之一, 而段名則是由而段名則是由SEGMENT所定義;所定義;nASSUME語句通常位于代碼段中緊接段定義語句之后;語句通常位于代碼段中緊接段定義語句之后;n說明說明nASSUME NOTHING的格式可取消前面由的格式可取消前面由ASSUME所指定所指定的段寄存器設(shè)置;的段寄存器設(shè)置;nASSUME僅指示邏輯段與段寄存器的關(guān)系僅指示邏輯段與段寄存器的關(guān)系, 但并不對段寄存但并不對段寄存器賦值。器賦值。段分配偽指令ASSUME通常給段寄存器賦值語句為:通常給段寄存器賦

25、值語句為: movax ,段名,段名 mov段寄存器段寄存器 ,ax定義各邏輯段之例定義各邏輯段之例data1 segment data1 endsdata2 segment data2 ends 偽指令ASSUME應用之例codesegmentassume cs: code,ds: data1, es: data2start:mov ax ,data1mov ds ,axmov ax ,data2mov es ,ax codeends end start過程定義PROC/ENDP偽指令n格式:格式:過程名過程名 PROC NEAR/FAR (過程體過程體)RET 過程名過程名 ENDPn功能

26、說明:功能說明:n定義一個過程并賦予一個名字定義一個過程并賦予一個名字n定義該過程的類型(定義該過程的類型(NEAR或者或者FAR),若沒有指明類),若沒有指明類型,則默認為型,則默認為NEAR過程;過程;n功能說明:功能說明:nENDP標志過程結(jié)束,標志過程結(jié)束,PROC與與ENDP前的過程前的過程名必須一致;名必須一致;n調(diào)用指令調(diào)用指令CALL,位于調(diào)用程序中;,位于調(diào)用程序中;n返回指令返回指令RET,處于過程內(nèi)部,作為過程的出,處于過程內(nèi)部,作為過程的出口;口;n過程的定義和調(diào)用均可嵌套。過程的定義和調(diào)用均可嵌套。 name1 proc far callname2 retname2

27、proc near retname2 endpname1 endp name1、name2是兩個過程;是兩個過程; name1本身是一個可以被調(diào)用的過程,而它也可以再調(diào)用其本身是一個可以被調(diào)用的過程,而它也可以再調(diào)用其他的過程。他的過程。PROC/ENDP偽指令應用舉例偽指令應用舉例 其它偽指令結(jié)束偽指令結(jié)束偽指令ENDn格式格式: END LABELn功能說明功能說明: n源程序到此結(jié)束源程序到此結(jié)束, 指示匯編程序停止匯編;指示匯編程序停止匯編;nLABEL為代碼段中的一條指令語句的標號;為代碼段中的一條指令語句的標號;n僅有一個程序時必須加僅有一個程序時必須加LABEL;ORG偽指令偽指

28、令n格式格式: ORG 常數(shù)表達式常數(shù)表達式n功能:功能:定義其后的變量(名)的地址等于常數(shù)表達定義其后的變量(名)的地址等于常數(shù)表達式的數(shù)值式的數(shù)值movds , ax;main part of program goes heremovax , oper1addax , oper2jgestorenegaxstore: movresult , axhltcode_segends ;end of code segmentendstart偽操作舉例org偽操作之例偽操作之例vectorssegmentorg 10vect1dw47a5horg 20vect2dw0c596h vectorsend

29、s vect1的偏移地址值是的偏移地址值是0ah。 vect2的偏移地址值為的偏移地址值為14h。 偽操作舉例在匯編過程中,使用地址計數(shù)器來保存當前匯編指令的地址。地址計數(shù)器的值可用$符號來表示。例如:例如: ORG $8表示跳過表示跳過8個字節(jié)的存儲區(qū)。個字節(jié)的存儲區(qū)。例如:例如: JNE $6表示轉(zhuǎn)向地址是表示轉(zhuǎn)向地址是JNE指令的首地址加指令的首地址加6當當$ $用在偽操作的參數(shù)字段時,它表示為地址計數(shù)用在偽操作的參數(shù)字段時,它表示為地址計數(shù)器的當前值。器的當前值。例如:例如: org 0arraydw 1 , 2 , $+4 , 3 , $+4若若array的偏移地址為的偏移地址為0,

30、 以上操作等價為:以上操作等價為:arraydw 1 , 2 , 8 , 3 , 12 匯編語言程序設(shè)計n用方框表示工作框,框中用簡明語言標明用方框表示工作框,框中用簡明語言標明要完成的功能。要完成的功能。 如何繪制程序框圖如何繪制程序框圖( (流程圖流程圖) )?NY?n 各框之間用直線連起來表示程序走向。各框之間用直線連起來表示程序走向??蛑袠嗣骺蛑袠嗣髯映绦蛎肿映绦蛎? (入口參數(shù)等入口參數(shù)等) ) 。 順序結(jié)構(gòu)程序順序結(jié)構(gòu)程序按語句實現(xiàn)的先后次序執(zhí)行一系列操作。按語句實現(xiàn)的先后次序執(zhí)行一系列操作。6(AX)+5AX開始開始3AL,3BX(AX)(BX)+2AX(AX)(BX)+7A

31、X(AX)(BX)+8AX停止停止 標號標號: :條件滿足條件滿足?處理處理NYIFTHEN結(jié)構(gòu)結(jié)構(gòu)程序結(jié)構(gòu):程序結(jié)構(gòu): 測試測試/比較指令比較指令 (TEST/CMP) 條件轉(zhuǎn)移指令條件轉(zhuǎn)移指令 (Jx 標號標號) 處理體處理體 標號標號: 其他指令其他指令 分支程序設(shè)計分支程序設(shè)計程序結(jié)構(gòu):程序結(jié)構(gòu): TEST/CMP指令指令 Jx 標號標號1 處理體處理體P1 JMP 標號標號2標號標號1: 處理體處理體P2標號標號2:其他指令:其他指令 條件滿足條件滿足?處理處理P1處理處理P2標號標號1:標號標號2:條件條件1條件條件2IFTHENELSE 結(jié)構(gòu)結(jié)構(gòu)標號標號1:條件條件1成立成立?P

32、1NYCASE結(jié)構(gòu)結(jié)構(gòu)程序結(jié)構(gòu):程序結(jié)構(gòu): TEST/CMP指令(測試條件指令(測試條件1) Jx 標號標號1 ;不滿足轉(zhuǎn)標號不滿足轉(zhuǎn)標號1 處理體處理體P1 JMP 標號標號n+1標號標號1:TEST/CMP指令(測試條件指令(測試條件2) Jx 標號標號2 ;不滿足轉(zhuǎn)標號不滿足轉(zhuǎn)標號2 處理體處理體P2 JMP 標號標號n+1標號標號2:TEST/CMP指令(測試條件指令(測試條件3) Jx 標號標號3 ;不滿足轉(zhuǎn)標號不滿足轉(zhuǎn)標號3 處理體處理體P3 JMP 標號標號n+1標號標號3:TEST/CMP指令(測試條件指令(測試條件4) 標號標號n+1:(公共出口):(公共出口)條件條件2成立

33、成立?條件條件n成立成立?Pn+1標號標號2:標號標號n:標號標號n+1:P2PnNNYY給定以下符號函數(shù):給定以下符號函數(shù):并設(shè)任意給定的并設(shè)任意給定的x值存放在值存放在x單元中,單元中,y存放于存放于y單元,根據(jù)單元,根據(jù)x值確定函數(shù)值確定函數(shù)y的值。的值。y = 1 , 當當 x 0 0 , 當當 x = 0-1 , 當當 x 0分支結(jié)構(gòu)程序舉例開始開始AL0?yy -1AL= 0?yy 0yy 1AL xx結(jié)束結(jié)束YNYN分支結(jié)構(gòu)程序舉例 循環(huán)程序設(shè)計循環(huán)程序通常由三部分組成循環(huán)程序通常由三部分組成設(shè)置初始狀態(tài)設(shè)置初始狀態(tài) 設(shè)置循環(huán)次數(shù)、準備工作寄存器、設(shè)置數(shù)據(jù)指針等設(shè)置循環(huán)次數(shù)、準備

34、工作寄存器、設(shè)置數(shù)據(jù)指針等循環(huán)體循環(huán)體 循環(huán)工作的主體,由循環(huán)的工作部分和修改部分組循環(huán)工作的主體,由循環(huán)的工作部分和修改部分組成成循環(huán)控制循環(huán)控制 循環(huán)條件控制與判斷,控制循環(huán)運行和結(jié)束循環(huán)條件控制與判斷,控制循環(huán)運行和結(jié)束循環(huán)程序可以有兩種循環(huán)結(jié)構(gòu)形式:循環(huán)程序可以有兩種循環(huán)結(jié)構(gòu)形式:nDO.UNTIL結(jié)構(gòu)結(jié)構(gòu)先執(zhí)行循環(huán)體,然后再判斷控制退出條件,不滿足先執(zhí)行循環(huán)體,然后再判斷控制退出條件,不滿足就繼續(xù)執(zhí)行循環(huán)體,滿足條件則退出循環(huán)。就繼續(xù)執(zhí)行循環(huán)體,滿足條件則退出循環(huán)。nDO.WHILE結(jié)構(gòu)結(jié)構(gòu)把循環(huán)控制條件的判斷放在循環(huán)的入口,先判斷條把循環(huán)控制條件的判斷放在循環(huán)的入口,先判斷條件,滿

35、足條件就執(zhí)行循環(huán)體,否則則退出循環(huán)。件,滿足條件就執(zhí)行循環(huán)體,否則則退出循環(huán)。DOUNTIL 結(jié)構(gòu)結(jié)構(gòu)先執(zhí)行,再判斷條件,工作部分至少執(zhí)行一次。先執(zhí)行,再判斷條件,工作部分至少執(zhí)行一次。初始化部分初始化部分工作部分工作部分修改部分修改部分結(jié)束循環(huán)?結(jié)束循環(huán)?NY結(jié)束處理部分結(jié)束處理部分DO WHILE 結(jié)構(gòu)結(jié)構(gòu)先判斷條件,再執(zhí)行,工作部分有可能一次都不先判斷條件,再執(zhí)行,工作部分有可能一次都不執(zhí)行。執(zhí)行。初始化部分初始化部分結(jié)束處理部分結(jié)束處理部分工作部分工作部分繼續(xù)循環(huán)?繼續(xù)循環(huán)?YN修改部分修改部分 從從xx單元開始的單元開始的30個連續(xù)單元中存放有個連續(xù)單元中存放有30個無符號數(shù)個無符號

36、數(shù), 從中從中找出最大者送入找出最大者送入yy單元。單元。編程如下編程如下:dataspsegmentxxdb 73, 59, 61, 45, 81, 107, 14, 64, 54db 3, 17, 9, 33, 55, 79, 115, 78, 132db 234, 37, 76, 43, 98, 251, 9, 0, 62db 9, 145, 54yy db ?dataspends; 循環(huán)程序設(shè)計舉例codespsegmentassume cs: codesp, ds: dataspstart: mov ax , dataspmov ds , axmov al , xxmov bx , offset xxmov cx , 29loop1: inc bxcmpal , bxjaeloop2xchgal , bxloop2: looploop1movyy , aljmp $codesp endsendstart開始開始AL XX , CX 29 BX XX 的有效地址的有效地址BX BX + 1AL BXCX CX 1YY ALCX = 0?AL, BX數(shù)據(jù)交換數(shù)據(jù)交換結(jié)束結(jié)束YNYNn寄存器的保護與恢復寄存器的保護與恢復n由于調(diào)用程序和子程

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 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

提交評論