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

下載本文檔

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

文檔簡介

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

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

3、般是標(biāo)號標(biāo)號。n偽指令語句中,名字通常是偽指令語句中,名字通常是變量變量( (名名) ), , 段名段名,過程名過程名等。等。 標(biāo)號標(biāo)號: :是某指令代碼存放單元的符號地址,標(biāo)號后是某指令代碼存放單元的符號地址,標(biāo)號后必須有一個冒號必須有一個冒號“: :” 標(biāo)號的屬性:標(biāo)號的屬性:段,偏移量,類型(段,偏移量,類型(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)。表達(dá)式與運(yùn)算符n表達(dá)式表達(dá)式表達(dá)式由表達(dá)式由常量常量( (數(shù)值常量、符號常量、字符常量數(shù)值常量、符號常量、字符常量); ); 變變量量; ; 操作符操作

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

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

7、AL 當(dāng)端口號當(dāng)端口號PORT_VAL為偶數(shù)時為偶數(shù)時, 輸出端口號與之相同;輸出端口號與之相同; 當(dāng)當(dāng)PORT_VAL為奇數(shù)時為奇數(shù)時, 輸出端口號比輸入端口號小輸出端口號比輸入端口號小1邏輯運(yùn)算操作符應(yīng)用之例n關(guān)系運(yùn)算符關(guān)系運(yùn)算符EQ(等于)、(等于)、NE(不等)、(不等)、LT(小于)、(小于)、GT(大于)、(大于)、 LE(小于或等于)、(小于或等于)、GE(大于或等于)(大于或等于)n參與關(guān)系運(yùn)算操作的兩個操作數(shù)必須都同為數(shù)字或?yàn)橥粎⑴c關(guān)系運(yùn)算操作的兩個操作數(shù)必須都同為數(shù)字或?yàn)橥欢蝺?nèi)的兩個存儲器地址。段內(nèi)的兩個存儲器地址。n計算的結(jié)果應(yīng)為邏輯值:計算的結(jié)果應(yīng)為邏輯值: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)當(dāng)當(dāng) PORT_VAL5時時, 匯編結(jié)果為匯編結(jié)果為: MOV BX , 20否則,匯編結(jié)果為:否則,匯編結(jié)果為:MOV BX , 30關(guān)系運(yùn)算操作符應(yīng)用之例分析運(yùn)算符nSEG格式:格式:SEG 變量變量(名名)功能:取變量所在段的功能:取

9、變量所在段的段基址段基址主要有:主要有:SEG , OFFESET , TYPE, SIZE , LENGTHnOFFSET格式:格式:OFFSET 變量變量/標(biāo)號標(biāo)號功能:取變量或標(biāo)號的功能:取變量或標(biāo)號的偏移地址偏移地址分析運(yùn)算符應(yīng)用之例MOV DI , OFFSET DATA1 ; (DI)DATA1的偏移地址的偏移地址MOV AX , SEG ARRAY; (AX)ARRAY的段基址的段基址 MOV DS , AX ; (DS)(AX)nTYPE: 返回一個數(shù)值,表示存儲器操作數(shù)的類型。返回一個數(shù)值,表示存儲器操作數(shù)的類型。格式:格式:TYPE 變量或標(biāo)號變量或標(biāo)號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 分析運(yùn)算操作符應(yīng)用之例nLENGTH格式:格式:LENGTH 變量(名)變量(名)功能:取重復(fù)定義功能:取重復(fù)定義(DUP)的復(fù)制次數(shù)的復(fù)制次數(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分析運(yùn)算操作符應(yīng)用之例綜合運(yùn)算符n屬性運(yùn)算符屬性運(yùn)算符PTRn格式:格式:類型類型 PTR 表達(dá)式表達(dá)式n功能:功能:對存儲單元賦予確定的類型對存儲單元賦予確定的類型。nTHIS運(yùn)算符運(yùn)算符n格式:格式:名字名字 EQU THIS 類型類型n功能:功能:給名字給名字(變量或標(biāo)號變量或標(biāo)號)指定類型,它的段,偏移地址指定類型,它的段,偏移地址與下一存儲單元相同。與下一存儲單元相同。n短程運(yùn)算符短程運(yùn)算符SHORTn格式:格式:SHORT 標(biāo)號標(biāo)號n功能:功能:指明標(biāo)號的類型為短標(biāo)號指明標(biāo)號的類型為短標(biāo)號

13、, 從標(biāo)號到引用標(biāo)號指令從標(biāo)號到引用標(biāo)號指令之間的距離是在:之間的距離是在: -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ù)綜合操作符應(yīng)用之例FIRST_TYPEEQUTHIS BYTE WORD_TABLE DW100 DUP (?) FIRST_TYPE與與WORD_TABLE的段,偏移地址均相同,但的段,偏移地址均相同,但前者是前者是BYTE類型,后者是類型,后者是WORD類型。類型。綜合操作符應(yīng)用之例L1 EQU THIS FARL2:MOV CX ,100 L2標(biāo)

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

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

17、常數(shù)表達(dá)式操作數(shù)是常數(shù)或是常數(shù)表達(dá)式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)于復(fù)制操作符關(guān)于復(fù)制操作符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表達(dá)式賦值偽指令表達(dá)式賦值偽指令EQU格式格式: : 名字名字 EQU 表達(dá)式表達(dá)式n表達(dá)式可以是常數(shù)、符號、地址表達(dá)式、寄存器表達(dá)式可以是常數(shù)、符號、地址表達(dá)式、寄存器, , 指指令等;令等;n表達(dá)式不允許重復(fù)定義表達(dá)式不允許重復(fù)定義。CR EQU 256; 數(shù)賦于符號名數(shù)賦于符號名DATA EQU HIGHT+12 ; 地址表達(dá)式賦

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

21、/變量變量的類型定義的類型定義, 它的段地址和它的段地址和偏移地址與下一個存儲器單元的相同。偏移地址與下一個存儲器單元的相同。變量類型:變量類型: BYTE、 WORD、 DWORD標(biāo)號類型:標(biāo)號類型: NEAR、FARLABLE偽指令應(yīng)用舉例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、須一致二者前的段名必須一致定位類型應(yīng)用舉例SEGMENT偽操作的定位類型應(yīng)用舉例偽操作的定位類型應(yīng)用舉例STACKSEGMENTSTACK; STACK段段 DB 100 DUP(?) ; 長度為長度為100字節(jié)字節(jié)STACKENDS ; STACK段結(jié)束段結(jié)束DATA1SEGMINT BYTE ; DATA1段段STRINGDB this is an example!; 定義字符串定義字符串DATA1ENDS; DATA1段結(jié)束段結(jié)束 段分配偽指令A(yù)SSUMEn格式格式: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)系, 但并不對段寄存但并不對段寄存器賦值。器賦值。段分配偽指令A(yù)SSUME通常給段寄存器賦值語句為:通常給段寄存器賦

25、值語句為: movax ,段名,段名 mov段寄存器段寄存器 ,ax定義各邏輯段之例定義各邏輯段之例data1 segment data1 endsdata2 segment data2 ends 偽指令A(yù)SSUME應(yīng)用之例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),若沒有指明類),若沒有指明類型,則默認(rèn)為型,則默認(rèn)為NEAR過程;過程;n功能說明:功能說明:nENDP標(biāo)志過程結(jié)束,標(biāo)志過程結(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偽指令應(yīng)用舉例偽指令應(yīng)用舉例 其它偽指令結(jié)束偽指令結(jié)束偽指令ENDn格式格式: END LABELn功能說明功能說明: n源程序到此結(jié)束源程序到此結(jié)束, 指示匯編程序停止匯編;指示匯編程序停止匯編;nLABEL為代碼段中的一條指令語句的標(biāo)號;為代碼段中的一條指令語句的標(biāo)號;n僅有一個程序時必須加僅有一個程序時必須加LABEL;ORG偽指令偽指

28、令n格式格式: ORG 常數(shù)表達(dá)式常數(shù)表達(dá)式n功能:功能:定義其后的變量(名)的地址等于常數(shù)表達(dá)定義其后的變量(名)的地址等于常數(shù)表達(dá)式的數(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ù)器來保存當(dāng)前匯編指令的地址。地址計數(shù)器的值可用$符號來表示。例如:例如: ORG $8表示跳過表示跳過8個字節(jié)的存儲區(qū)。個字節(jié)的存儲區(qū)。例如:例如: JNE $6表示轉(zhuǎn)向地址是表示轉(zhuǎn)向地址是JNE指令的首地址加指令的首地址加6當(dāng)當(dāng)$ $用在偽操作的參數(shù)字段時,它表示為地址計數(shù)用在偽操作的參數(shù)字段時,它表示為地址計數(shù)器的當(dāng)前值。器的當(dāng)前值。例如:例如: org 0arraydw 1 , 2 , $+4 , 3 , $+4若若array的偏移地址為的偏移地址為0,

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

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

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

33、成立?條件條件n成立成立?Pn+1標(biāo)號標(biāo)號2:標(biāo)號標(biāo)號n:標(biāo)號標(biāo)號n+1:P2PnNNYY給定以下符號函數(shù):給定以下符號函數(shù):并設(shè)任意給定的并設(shè)任意給定的x值存放在值存放在x單元中,單元中,y存放于存放于y單元,根據(jù)單元,根據(jù)x值確定函數(shù)值確定函數(shù)y的值。的值。y = 1 , 當(dāng)當(dāng) x 0 0 , 當(dāng)當(dāng) x = 0-1 , 當(dāng)當(dāng) 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ù)、準(zhǔn)備工作寄存器、設(shè)置數(shù)據(jù)指針等設(shè)置循環(huán)次數(shù)、準(zhǔn)備

34、工作寄存器、設(shè)置數(shù)據(jù)指針等循環(huán)體循環(huán)體 循環(huán)工作的主體,由循環(huán)的工作部分和修改部分組循環(huán)工作的主體,由循環(huán)的工作部分和修改部分組成成循環(huán)控制循環(huán)控制 循環(huán)條件控制與判斷,控制循環(huán)運(yùn)行和結(jié)束循環(huán)條件控制與判斷,控制循環(huán)運(yù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寄存器的保護(hù)與恢復(fù)寄存器的保護(hù)與恢復(fù)n由于調(diào)用程序和子程

溫馨提示

  • 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

提交評論