




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、n機(jī)器語言:機(jī)器能識別并執(zhí)行,稱目標(biāo)機(jī)器語言:機(jī)器能識別并執(zhí)行,稱目標(biāo)程序程序, ,是二進(jìn)制碼。是二進(jìn)制碼。n匯編語言:用指令助記符、符號地址、匯編語言:用指令助記符、符號地址、標(biāo)號等書寫的語言。標(biāo)號等書寫的語言。n匯編語言源程序:用匯編語言編寫的程匯編語言源程序:用匯編語言編寫的程序。序。n匯編:匯編語言源程序匯編:匯編語言源程序 目標(biāo)程序目標(biāo)程序n匯編語言特點(diǎn):匯編語言特點(diǎn):n(1 1用助記符表示指令所執(zhí)行的操作;用助記符表示指令所執(zhí)行的操作;n(2 2在操作數(shù)中使用符號。在操作數(shù)中使用符號。n(3 3有三類基本指令:符號指令、偽指令有三類基本指令:符號指令、偽指令和宏指令。和宏指令。 匯
2、編語言是一種面向機(jī)器的符號語言。匯編語言是一種面向機(jī)器的符號語言。要想在計(jì)算機(jī)上運(yùn)行匯編語言程序,必須首要想在計(jì)算機(jī)上運(yùn)行匯編語言程序,必須首先對源程序進(jìn)行匯編和連接。下圖表示了對先對源程序進(jìn)行匯編和連接。下圖表示了對匯編語言源程序的匯編、連接和裝入運(yùn)行過匯編語言源程序的匯編、連接和裝入運(yùn)行過程。簡述如下:程。簡述如下: 匯編語言源程序的匯編、連接和裝入運(yùn)行匯編語言源程序的匯編、連接和裝入運(yùn)行 ASM或MASM1.1.常量:(常量:(1 1) 數(shù)字常量:有數(shù)字常量:有B B、O O、D D、H H、實(shí)數(shù)類型及、實(shí)數(shù)類型及ASCIIASCII碼,對碼,對H H型,凡是型,凡是以字母以字母A-FA
3、-F為起始的一個十六進(jìn)制數(shù),為起始的一個十六進(jìn)制數(shù),必須在前面冠以數(shù)字必須在前面冠以數(shù)字“0”0”,否則匯編,否則匯編程序認(rèn)作標(biāo)識符。程序認(rèn)作標(biāo)識符。 (2 2符號常量:由偽指令符號常量:由偽指令EQUEQU或或“=”=”定義。如:定義。如:P EQU 314 P EQU 314 或或P=314P=314常量作用:常量作用:(1 1指令語句中源操作數(shù)中作立即數(shù)。指令語句中源操作數(shù)中作立即數(shù)。例:例: MOV AX, 0A5F1HMOV AX, 0A5F1H (2) (2) 在指令語句的基址加變址的尋址方在指令語句的基址加變址的尋址方式中作位移量。例:式中作位移量。例:MOV BX, SI+32
4、HMOV BX, SI+32H(3 3在數(shù)據(jù)定義偽指令中。例:在數(shù)據(jù)定義偽指令中。例:DB DB 12H12Hn2. 數(shù)值表達(dá)式數(shù)值表達(dá)式n由常量和算術(shù)(由常量和算術(shù)(+、-、 /、MOD)、邏輯)、邏輯AND、OR、XOR、NOT)和關(guān)系和關(guān)系EQ、NE、LT、GT、LE、GE3類運(yùn)算符組成的類運(yùn)算符組成的表達(dá)式稱為數(shù)值表達(dá)式。表達(dá)式稱為數(shù)值表達(dá)式。7.1.2 標(biāo)號標(biāo)號是指令地址的符號表示,也可以是過程名。過標(biāo)號是指令地址的符號表示,也可以是過程名。過程名是入口地址的符號表示,即過程的第一條指程名是入口地址的符號表示,即過程的第一條指令的地址。令的地址。標(biāo)號定義方式:標(biāo)號定義方式: (1 1
5、用冒號用冒號“:”:”定義定義, ,直接寫在指令助記符前。直接寫在指令助記符前。CYCLECYCLE: MOV ALMOV AL,SISI (2) (2) 用用PROCPROC和和ENDPENDP偽指令定義過程偽指令定義過程n標(biāo)號是一條指令目標(biāo)代碼的符號地址。一般只在標(biāo)號是一條指令目標(biāo)代碼的符號地址。一般只在代碼段中定義和使用。常作為轉(zhuǎn)移指令含子程代碼段中定義和使用。常作為轉(zhuǎn)移指令含子程序調(diào)用指令的操作數(shù)。具有段基址、偏移地址序調(diào)用指令的操作數(shù)。具有段基址、偏移地址和類型三個屬性和類型三個屬性n屬性有:屬性有:n 段段 值值SEGSEG)n 偏移量偏移量OFFSETOFFSET)n 類型即距離
6、屬性):類型即距離屬性):n NEARNEAR近),只能被本段內(nèi)訪近),只能被本段內(nèi)訪問。問。n FARFAR遠(yuǎn)),可以被其它段訪遠(yuǎn)),可以被其它段訪問問 。例例: JNC LP1 . LP1: HLT7.1.3 變量1.1.變量和地址表達(dá)式變量和地址表達(dá)式變量是代表存放在某些存儲單元的數(shù)據(jù),這變量是代表存放在某些存儲單元的數(shù)據(jù),這些數(shù)據(jù)在程序運(yùn)行期間隨時可以修改。為些數(shù)據(jù)在程序運(yùn)行期間隨時可以修改。為了便于對變量的訪問,它常常以變量名的了便于對變量的訪問,它常常以變量名的形式出現(xiàn)在程序中。形式出現(xiàn)在程序中。變量名:可認(rèn)為是存放數(shù)據(jù)的存儲單元的符變量名:可認(rèn)為是存放數(shù)據(jù)的存儲單元的符號地址,即
7、變量名是數(shù)據(jù)的地址或數(shù)據(jù)區(qū)號地址,即變量名是數(shù)據(jù)的地址或數(shù)據(jù)區(qū)的首地址。的首地址。涉及到:涉及到: 段地址、偏移地址段地址、偏移地址地址表達(dá)式:由變量、標(biāo)號、寄存器、常量地址表達(dá)式:由變量、標(biāo)號、寄存器、常量和運(yùn)算符組成的表達(dá)式。和運(yùn)算符組成的表達(dá)式。2. 2. 變量存儲區(qū)變量存儲區(qū)域中數(shù)據(jù)的存域中數(shù)據(jù)的存放放要點(diǎn):內(nèi)存中以要點(diǎn):內(nèi)存中以1 1個字節(jié)為單個字節(jié)為單位進(jìn)行地址編位進(jìn)行地址編碼。碼。在匯編中,存儲在匯編中,存儲器的地址都是器的地址都是變量和地址表變量和地址表達(dá)式來表示的。達(dá)式來表示的。 3. 變量的段基址和偏移地址的指定算符變量的段基址和偏移地址的指定算符用分析運(yùn)算符用分析運(yùn)算符
8、SEG OFFSET TYPE LENGTH SIZESEG OFFSET TYPE LENGTH SIZE (1 1SEGSEG:操作數(shù)的段地址:操作數(shù)的段地址 (2 2OFFSETOFFSET:操作數(shù)地址的偏移量:操作數(shù)地址的偏移量 例:例: TABLE DW 67TABLE DW 67,8989 . . MOV AX MOV AX,SEG TABLESEG TABLE MOV BX MOV BX,OFFSET TABLEOFFSET TABLE MOV CX MOV CX,TABLE TABLE 4. 變量的類型屬性及變量的定義變量的類型屬性及變量的定義ByteByte、WordWord
9、、DwordDword雙字)、雙字)、Fbyte(6Fbyte(6字節(jié))、字節(jié))、QwordQword4 4字)、字)、Tbyte(10Tbyte(10字節(jié))字節(jié))定義變量的偽指令定義變量的偽指令 符號符號 DB/DW/DD /DQDB/DW/DD /DQ8 8)/DT/DT1010) 表達(dá)式表達(dá)式例例1 1:DAT1 DB 12HDAT1 DB 12H DAT2 DB 34H DAT2 DB 34H,56H56H DAT3 DW 5678H DAT3 DW 5678H例例2 2:DAB DB DAB DB ?,?,? DAW DW DAW DW ?,?, ? 問號表示可預(yù)置任何內(nèi)容問號表示可
10、預(yù)置任何內(nèi)容(詳見(詳見P145P145)TYPE TYPE 求符號名類型的數(shù)值求符號名類型的數(shù)值P159P159) 格式:格式:TYPE TYPE (符號名)(符號名) 符號名類型值符號名類型值:DB: :DB: 送送 1,DW:1,DW:送送 2,DD:2,DD:送送 4 4 例例:ARRY DW 1:ARRY DW 1,2 2 MOV SI MOV SI ,TYPE ARRAYTYPE ARRAY 匯編為:匯編為:MOV SIMOV SI,2 242H41H000044H43H.00H00HSTRINGS341H42H43H44H45H46HSTRINGS1STRINGS242H41H4
11、4H43H例例3:STRING1 DB ABCDEF STRING2 DW AB,CD STRING3 DD AB,CD圖圖7-3 字符串表達(dá)式的存放情況見書本字符串表達(dá)式的存放情況見書本P157)地地址址由由低低到到高高總結(jié):對單個總結(jié):對單個DW與與DD,高,高地址放高位,地址放高位,低地址放低位低地址放低位5. 地址表達(dá)式類型的變更地址表達(dá)式類型的變更n類型PTR地址表達(dá)式:nBYTE PTR W1;nWORD PTR B2BX;nBYTE PTR BX+5宏匯編語言的語法小節(jié)宏匯編語言的語法小節(jié)偽指令格式偽指令格式 偽指令偽指令:指示性語句指示性語句.不產(chǎn)生機(jī)器不產(chǎn)生機(jī)器目標(biāo)代碼目標(biāo)代
12、碼.常數(shù)、變量和標(biāo)號常數(shù)、變量和標(biāo)號 變量的屬性變量的屬性:段值、偏移量、類段值、偏移量、類型。型。 標(biāo)號屬性有:段值、偏移量、標(biāo)號屬性有:段值、偏移量、距離屬性。距離屬性。表達(dá)式與運(yùn)算符表達(dá)式與運(yùn)算符 表達(dá)式由操作數(shù)和運(yùn)算符組成,表達(dá)式由操作數(shù)和運(yùn)算符組成,匯編時產(chǎn)生一個值。匯編時產(chǎn)生一個值。 1.算數(shù)運(yùn)算符算數(shù)運(yùn)算符:+ - * / 2.邏輯運(yùn)算符邏輯運(yùn)算符:AND OR NOT XOR 3.關(guān)系運(yùn)算符:關(guān)系運(yùn)算符:EQ NE LT GT4.分析運(yùn)算符分析運(yùn)算符: SEG OFFSET TYPE LENGTH SIZE5.組合運(yùn)算符組合運(yùn)算符 PTR THIS6.分離運(yùn)算符分離運(yùn)算符 LO
13、W HIGH7.2 符號指令的尋址方式符號指令的尋址方式86系列匯編語言指令格式系列匯編語言指令格式指令助記符指令助記符操作數(shù)操作數(shù);注釋;注釋標(biāo)號:標(biāo)號:, 1 1標(biāo)號是給該指令所在地址取的名字,必須后跟冒號標(biāo)號是給該指令所在地址取的名字,必須后跟冒號“:”,它可以缺省,它可以缺省,是可供選擇的標(biāo)識符。是可供選擇的標(biāo)識符。8086/80888086/8088匯編語言中可使用的標(biāo)識符必須遵循下列匯編語言中可使用的標(biāo)識符必須遵循下列規(guī)則:規(guī)則:(1 1標(biāo)識符由字母標(biāo)識符由字母a - za - z、A - ZA - Z)、數(shù)字)、數(shù)字0 0一一9 9或某些特殊字符(,或某些特殊字符(,- -,?)
14、組成;,?)組成; (2 2第一個字符必須是字母第一個字符必須是字母a - za - z、A - ZA - Z或某些特殊的符號(,或某些特殊的符號(,- -,?),但,?),但“?”不能單獨(dú)作標(biāo)識符;不能單獨(dú)作標(biāo)識符;(3 3標(biāo)識符有效長度為標(biāo)識符有效長度為3131個字符,若超過個字符,若超過3131個字符,則只保留前面的個字符,則只保留前面的3131個字個字符為有效標(biāo)識符。符為有效標(biāo)識符。指令舉例:ADD AX,SI+6MOV AX , BX操作碼 操作數(shù)INC BXHLTn通常,一條帶有操作數(shù)的指令要指明用什么方式尋找操作數(shù)據(jù),尋找操作數(shù)據(jù)的方式稱為尋址方式。n尋址方式有:立即數(shù)尋址、寄存
15、器尋址方式、直接尋址方式、間接尋址方式、基址尋址方式、(比例變址尋址方式和基址比例變址尋址方式。7.2.1寄存器尋址 如果操作數(shù)就在如果操作數(shù)就在CPUCPU的內(nèi)部寄存器中,那么寄存器名可在指令中指的內(nèi)部寄存器中,那么寄存器名可在指令中指出,這種尋址方式就叫寄存器尋址方式。出,這種尋址方式就叫寄存器尋址方式。 對對1616位操作數(shù)來說,寄存器可以為位操作數(shù)來說,寄存器可以為AXAX、BXBX、CXCX、DXDX、SISI、DIDI、SPSP或者或者BPBP,而對而對8 8位操作數(shù)來說,寄存器可為位操作數(shù)來說,寄存器可為AHAH、ALAL、BHBH、BLBL、CHCH、CLCL,DHDH、DLD
16、L。例。例如:如: INC CX INC CX ;將;將CXCX的內(nèi)容加的內(nèi)容加1 1 ROL AH ROL AH,1 1 ;將;將AHAH中的內(nèi)容循環(huán)左移一位中的內(nèi)容循環(huán)左移一位 采用寄存器尋址方式的指令在執(zhí)行時,操作就在采用寄存器尋址方式的指令在執(zhí)行時,操作就在CPUCPU內(nèi)部進(jìn)行,不需要內(nèi)部進(jìn)行,不需要使用總線周期,因而,執(zhí)行速度快。使用總線周期,因而,執(zhí)行速度快。寄存器寄存器數(shù)數(shù) 據(jù)據(jù)指令指令 寄存器寄存器說明:說明: 一條指令中,可以對源操作數(shù)采用寄存器尋址方式,也可以對目一條指令中,可以對源操作數(shù)采用寄存器尋址方式,也可以對目的操作數(shù)采用寄存器尋方式,還可以兩者都用寄存器尋址方式。
17、的操作數(shù)采用寄存器尋方式,還可以兩者都用寄存器尋址方式。例:mov BX,AX; (BX)(AX)n 7.2.2立即數(shù)尋址立即數(shù)尋址n 8086指令系統(tǒng)中,有一部分指令所用的指令系統(tǒng)中,有一部分指令所用的8位或位或16位操作數(shù)位操作數(shù)就在指令中提供,這種方式叫立即數(shù)尋址方式,例如:就在指令中提供,這種方式叫立即數(shù)尋址方式,例如:nMOV AL,5; 將十六進(jìn)制數(shù)將十六進(jìn)制數(shù)05H送入送入AL,n MOV AX,18;將;將18H送送AX,AH中為中為00H,AL中為中為18Hn n采用立即數(shù)尋址方式的指令主要用來對寄存器賦值。因?yàn)椴俨捎昧⒓磾?shù)尋址方式的指令主要用來對寄存器賦值。因?yàn)椴僮鲾?shù)可以從
18、指令中直接取得,不需要運(yùn)行總線周期,所以,作數(shù)可以從指令中直接取得,不需要運(yùn)行總線周期,所以,立即數(shù)尋址方式的顯著特點(diǎn)就是速度快。立即數(shù)尋址方式的顯著特點(diǎn)就是速度快。 立即數(shù)尋址總結(jié): 操作數(shù)由指令提供.操作數(shù)直接存放在指令中。用于表示常數(shù),給變量賦初值。 例: MOV AL,80 H MOV AX,1090 H MOV CX,100 7.2.3、直接尋址 操作數(shù)在存儲器中,其地址由指令提供。即指令中直接給出操作數(shù)的有效地址。例:MOV AX, 1070 H 假設(shè) DS = 2000 H,物理地址為: 21070 H 21071 H AX = 3020 H 20 H 30 H指令指令 內(nèi)存內(nèi)存
19、EA數(shù)據(jù)n例:mov SI,2000H ;(SI(2000H)n注意:在匯編語言中常將“ ”方括號中的內(nèi)容作為存儲單元的地址。n另外:指令中一般不出現(xiàn)直接地址,直接地址用變量表示。n例:mov SI,var ; var 定義為變量。 MOV BX,CS: 3000 H MOV AH, 1000 H 例:例:MOV AX, 4000H (若(若DS = 3000H) 7.2.4、寄存器間接尋址、寄存器間接尋址 操作數(shù)在存儲器中,存儲器的有效操作數(shù)在存儲器中,存儲器的有效地址由寄存器指出。即指令中寄存器值地址由寄存器指出。即指令中寄存器值是操作數(shù)的地址。是操作數(shù)的地址。 能夠間接尋址的寄存器有:能
20、夠間接尋址的寄存器有:SI,DI,BX,BP基數(shù)指針寄存器,對應(yīng)基數(shù)指針寄存器,對應(yīng)的段寄存器為的段寄存器為SS) 指令指令 寄存器寄存器 內(nèi)存內(nèi)存寄存器寄存器數(shù)據(jù)數(shù)據(jù)EA1)、以)、以BX寄存器進(jìn)行間接尋址寄存器進(jìn)行間接尋址 數(shù)據(jù)段基址尋址數(shù)據(jù)段基址尋址 例:例: 假設(shè)假設(shè) DS = 2000 H,ES = 3000 H,BX = 1000 H 1MOV AX,BX AX 21001 H21000 H AX = 5B40 H MOV CX,ES:BX AX 31001 H31000 H 40 5B 21000 H21001 H7.2.5 基址尋址基址尋址nMOV BX+BUF+2, ALn或
21、 MOV BUFBX+2, ALn* 只有BX和BP可以用作基址寄存器;32位的所有通用寄存器都可以用作基址寄存器。n MOV BP+6, AX; 或 MOV 6BP, AX7.2.5、以、以BP寄存器進(jìn)行間接尋址寄存器進(jìn)行間接尋址堆棧段基址尋堆棧段基址尋址址 MOV AX,BP 假設(shè)假設(shè) SS = 5000 H,BP = 3000 H, 將將 53000 H、53001 H 單元的內(nèi)容送單元的內(nèi)容送 AX。 執(zhí)行結(jié)果:執(zhí)行結(jié)果: AX = 4A56 H7.2.6、以、以SI、DI寄存器進(jìn)行間接尋址寄存器進(jìn)行間接尋址變址尋址變址尋址 (1) CS: MOV AX,SI 假設(shè)假設(shè) CS = 30
22、00 H,SI = 4000 H, EA=4000H,物理地址物理地址=34000H, 執(zhí)行結(jié)果:執(zhí)行結(jié)果: AX=201A H 34000 H34001 H1A H20 H 56 H 4A H53000H53001H(2(2MOV BXMOV BX,DIDI 假設(shè)假設(shè) DS = 5000 HDS = 5000 H,DI = 0200 HDI = 0200 H執(zhí)行結(jié)果:執(zhí)行結(jié)果:BX 50201 H50200 HBX 50201 H50200 H BX = 3220 H BX = 3220 H7.2.77.2.7、以、以BXBX、BPBP和和SISI、DIDI寄存器組合起來進(jìn)行寄存器組合起來進(jìn)
23、行間接尋址間接尋址基址加變址的尋址基址加變址的尋址 20H 32H 50200H 50201HEA = + BX SIBP DI例:假設(shè)例:假設(shè) BX = 5000 HBX = 5000 H,SI =2000 HSI =2000 H,DS =4000 DS =4000 H, SS = 1000 HH, SS = 1000 H,BP = 3100 HBP = 3100 H。 MOV AXMOV AX,BX+SIBX+SI; EA=5000+2000=7000HEA=5000+2000=7000H, AX 47001 H 47000 HAX 47001 H 47000 H AX = 2A32 H
24、AX = 2A32 H相對的基址加變址的尋址:相對的基址加變址的尋址: MOV AXMOV AX,BP + SI + 0020 HBP + SI + 0020 H; EA=3100+2000+0020=5120HEA=3100+2000+0020=5120H在基址加變址的尋址方式中,只要用上在基址加變址的尋址方式中,只要用上BP寄存器,那么默認(rèn)的寄存器,那么默認(rèn)的段寄存器就是段寄存器就是SS;在其它情況下,默認(rèn)的段寄存器均為;在其它情況下,默認(rèn)的段寄存器均為DS.如果如果操作數(shù)不在默認(rèn)段,則要用前綴指出相應(yīng)的段寄存器名。操作數(shù)不在默認(rèn)段,則要用前綴指出相應(yīng)的段寄存器名。n7.2.8 比例變址尋
25、址比例變址尋址nMOV EBX, ESI 4n7.2.9 基址比例變址尋址基址比例變址尋址nMOV ECX, EDI 4+EAXnMOV EAX, ESI 8+EBX7.2.10 存儲器尋址及存儲器尋址中段基址或存儲器尋址及存儲器尋址中段基址或段選擇字的確定段選擇字的確定n1. 存儲器尋址與地址表達(dá)式n偏移地址也稱為有效地址EAnEA=變量基址寄存器+變址寄存器 比例因子+常量n或者EA=基址寄存器+變址寄存器 比例因子+變量+常量n注:比例因子只能是1、2、4、8n例:MOV AX,BX + DI 8+BUF+1B57 H2. 存儲器尋址中段寄存器的確定存儲器尋址中段寄存器的確定nMOV E
26、S:DI,ALnSP-SS;7.3 常用指令常用指令n7.3.1 數(shù)據(jù)傳送類指令n通用數(shù)據(jù)傳送指令n數(shù)據(jù)交換指令n地址傳送指令n標(biāo)志傳送指令n查表轉(zhuǎn)換指令n棧操作指令n輸入/輸出指令1. 通用數(shù)據(jù)傳送指令通用數(shù)據(jù)傳送指令最基本的傳送指令最基本的傳送指令-MOV傳送指令傳送指令 格式:格式:MOV dest,sorce ; 例例: MOV DS, AX ;DS AX MOV CH, 20 ;CH 20 MOV DX, 20 MOV BL, AH ;BLAH MOV AX, BX ;AXBX MOV DX, AX ;DXAX MOV AX, BX+0060H MOVMOV指令使用規(guī)則:指令使用規(guī)則
27、:1) IP不能作目的寄存器2) 不允許memmem3) 不允許segregsegreg4) CS和立即數(shù)不允許作為目的操作數(shù)5) 不允許segreg立即數(shù)6) 源操作數(shù)與目的操作數(shù)類型要一致幾個不能傳送的解決辦法:用幾個不能傳送的解決辦法:用AXAX作橋梁作橋梁存儲器存儲器存儲器:存儲器: MOV AXMOV AX,MEM1MEM1 MOV MEM2 MOV MEM2,AXAX段寄存器段寄存器段寄存器:段寄存器: MOV AXMOV AX,DSDS MOV ES MOV ES,AXAX段寄存器段寄存器立即數(shù):立即數(shù): MOV AXMOV AX,DATADATA MOV DS MOV DS,A
28、XAX2. 擴(kuò)展傳送指令n1符號位擴(kuò)展傳送指令符號位擴(kuò)展傳送指令Move with SignExtend)nMOVSX reg, sourcen意義:對源操作數(shù)中的意義:對源操作數(shù)中的8位或位或16位補(bǔ)碼數(shù)的符號位進(jìn)行擴(kuò)展,位補(bǔ)碼數(shù)的符號位進(jìn)行擴(kuò)展,形成形成16位或位或32位的補(bǔ)碼數(shù)。位的補(bǔ)碼數(shù)。n例:例: MOVSX EAX, BX;BX=8765H,執(zhí)行后,執(zhí)行后EAX=FFFF8765H必須是必須是16位或位或32位的位的通用寄存器通用寄存器可以是可以是8位或位或16位的寄位的寄存器或存儲器存器或存儲器n2零零Zero擴(kuò)展傳送指令擴(kuò)展傳送指令nMOVZX reg, sourcen意義:對
29、源操作數(shù)中的意義:對源操作數(shù)中的8位或位或16位無符號數(shù)進(jìn)行擴(kuò)展,形成位無符號數(shù)進(jìn)行擴(kuò)展,形成16位或位或32位的無符號數(shù)。位的無符號數(shù)。n例:例: MOVZX EAX, BL;BL=65H,執(zhí)行后,執(zhí)行后EAX=00000065H3 、交換指令、交換指令 規(guī)定由規(guī)定由SSSS指示堆棧段的段基址,堆棧指針指示堆棧段的段基址,堆棧指針E ESPSP始終指向堆棧的頂部,即棧頂活動端),(始終指向堆棧的頂部,即棧頂活動端),(E ESPSP的初值規(guī)定了所用堆棧區(qū)的大小。堆棧的最高的初值規(guī)定了所用堆棧區(qū)的大小。堆棧的最高地址叫棧底固定端)。地址叫棧底固定端)。 SPSS堆棧段堆棧段進(jìn)棧方向退棧方向棧底
30、棧底棧頂棧頂4 棧操作指令棧操作指令PUSH和和POP), P155設(shè)設(shè)AXAX)=1020H=1020H,執(zhí)行示意圖如下,執(zhí)行示意圖如下低地低地址址存儲區(qū)存儲區(qū)(SS段)段)執(zhí)行前執(zhí)行前(AX)=1020(SP)存儲區(qū)存儲區(qū)(SS段)段)進(jìn)棧方向進(jìn)棧方向執(zhí)行后執(zhí)行后2010(AL)(AH)PUSH AX指令執(zhí)行示意圖指令執(zhí)行示意圖(SP)-2(SP)高地高地址址低地低地址址高地高地址址(SP)-1POP BX POP BX 的執(zhí)行示意圖如下圖所示的執(zhí)行示意圖如下圖所示低地址低地址存儲區(qū)存儲區(qū)(SS段)段)出棧方向出棧方向執(zhí)行前執(zhí)行前2010POP BX 指令執(zhí)行示意圖指令執(zhí)行示意圖(SP)存
31、儲區(qū)存儲區(qū)(SS段)段)執(zhí)行后執(zhí)行后(BX)=1020(SP)(SP)+1(SP)+2BX20201010高地址高地址低地址低地址高地址高地址(4) 全部通用寄存器進(jìn)棧全部通用寄存器進(jìn)棧PUSHA/PUSHAD和出棧指令和出棧指令POPA/POPAD, P156堆棧指令使用時應(yīng)注意幾點(diǎn):堆棧指令使用時應(yīng)注意幾點(diǎn):堆棧操作總是按字進(jìn)行堆棧操作總是按字進(jìn)行不能從棧頂彈出一個字給不能從棧頂彈出一個字給CSCS堆棧指針為堆棧指針為SS:(E)SPSS:(E)SP,(E)SP(E)SP永遠(yuǎn)永遠(yuǎn)指向棧頂指向棧頂SPSP自動進(jìn)行增減量(自動進(jìn)行增減量(-2-2,+2+2)(5) 狀態(tài)標(biāo)志寄存器的進(jìn)棧指令狀態(tài)
32、標(biāo)志寄存器的進(jìn)棧指令PUSHF/PUSHFD 和出棧指令和出棧指令POPF/POPFD, P157 PUSHF和POPF指令一般用在子程序和中斷程序的首尾,起保存主程序標(biāo)志和恢復(fù)主程序標(biāo)志的作用。b地址傳送指令地址傳送指令(p157)b1傳送有效地址指令傳送有效地址指令 LEAb指令格式:指令格式: LEA REG, MEMnLEA SI, BUFF; nLEA DI, SI+6n執(zhí)行后,SI=0002H;nDI=0008Hn考慮:MOV SI, BUFFn結(jié)果?2傳送地址指針指令傳送地址指針指令LDS、LES、LFS、LGS和和LSSn指令格式: LDS REG, MEMnLDS SI, B
33、Xn執(zhí)行的是: BX+3和BX+2 DS;n BX+1和BX SI;nLES EDI, BX+4n執(zhí)行的是: BX+9和BX+8 ES;n BX+6和BX+5 EDI;6. 6. 查表指令查表指令 XLATXLAT或或XLATBXLATB 執(zhí)行的操作:執(zhí)行的操作:AL(BX)+(AL)AL(BX)+(AL) 又叫查表轉(zhuǎn)換指令,它可根據(jù)表項(xiàng)又叫查表轉(zhuǎn)換指令,它可根據(jù)表項(xiàng)序號查出表中對應(yīng)代碼的內(nèi)容。執(zhí)行時序號查出表中對應(yīng)代碼的內(nèi)容。執(zhí)行時先將表的首地址偏移地址送到先將表的首地址偏移地址送到BXBX中,中,表項(xiàng)序號存于表項(xiàng)序號存于ALAL中。中。 例如:內(nèi)存數(shù)據(jù)段有一張例如:內(nèi)存數(shù)據(jù)段有一張1616
34、進(jìn)制數(shù)進(jìn)制數(shù)的的ASCIIASCII碼表,設(shè)首地址為碼表,設(shè)首地址為2000H2000H,如欲,如欲查出表中第查出表中第1111個代碼代碼序號從個代碼代碼序號從0 0開開始即十六進(jìn)制數(shù)始即十六進(jìn)制數(shù)B B的的ASCIIASCII碼。碼。ASCIIASCII表在表在DSDS段中,并假設(shè)段中,并假設(shè)(DS)=4000H(DS)=4000H。見下。見下頁圖。頁圖。303132.394142.4546.42000H+042000H+110129ABEF十六進(jìn)制數(shù)十六進(jìn)制數(shù)ASCIIASCII碼表碼表存儲器存儲器則可用如下幾條指令實(shí)現(xiàn):則可用如下幾條指令實(shí)現(xiàn):注意:轉(zhuǎn)換表長度最大為注意:轉(zhuǎn)換表長度最大為
35、256256個表項(xiàng)個表項(xiàng)( (字節(jié)字節(jié)) )。十進(jìn)制數(shù)字十進(jìn)制數(shù)字09轉(zhuǎn)換成七段顯示碼的譯碼表,轉(zhuǎn)換成七段顯示碼的譯碼表,現(xiàn)在要取現(xiàn)在要取 3的對應(yīng)的七段譯碼。的對應(yīng)的七段譯碼。 MOV AL,3 MOV BX,2000H XLAT 執(zhí)行執(zhí)行XLAT指令后指令后: AL=30H例例22000h407924301912027800107.3.2 加減運(yùn)算指令1、ADD不帶進(jìn)位位的加法,不帶進(jìn)位位的加法, P160)格式:格式: ADD DST,SRC DST DST+SRC例:例:(1) . ADD AL,50H ; AL AL+50H (2). ADD CX,1000H ;CX CX+1000
36、H (3). ADD DI, SI ;DI DI+SI (4). ADD BX+DI,AX 設(shè)設(shè) BX=1000H, DI=2000H, AX=1234H 3000H =25H , 3001H =40H分析:分析: EA=BX+DI=3000H, 結(jié)果:結(jié)果: 3000H 5259H 2、ADC (加進(jìn)位的加法指令)(加進(jìn)位的加法指令) 總結(jié):總結(jié):ADCADC指令在形式上和功能上與指令在形式上和功能上與ADDADD類似,只是相加時還要包括進(jìn)位類似,只是相加時還要包括進(jìn)位標(biāo)志標(biāo)志CFCF的內(nèi)容,例如:的內(nèi)容,例如: ADC ALADC AL,68H ;AL(AL)+68H+(CF)68H ;A
37、L(AL)+68H+(CF) ADC AX ADC AX,CX ;AX(AX)+(CX)+(CF)CX ;AX(AX)+(CX)+(CF) ADC BX ADC BX,DI ;BX(BX)+DI+1DIDI ;BX(BX)+DI+1DI +(CF) +(CF) nADDADD、ADCADC指令對指令對6 6個狀態(tài)標(biāo)志產(chǎn)生影響。個狀態(tài)標(biāo)志產(chǎn)生影響。n 例:知例:知(BX)=D75FH(BX)=D75FHn 指令指令 ADD BX,8046H ADD BX,8046H 執(zhí)行后,狀態(tài)執(zhí)行后,狀態(tài)標(biāo)志各是多少?標(biāo)志各是多少?n D75FH = 1110 0111 0101 1111D75FH = 11
38、10 0111 0101 1111n 8046H = 1000 0000 0100 0110 8046H = 1000 0000 0100 0110 n 1 1 11 11 1 1 11 11 n 0110 0111 1010 0101 0110 0111 1010 0101結(jié)果:結(jié)果:C=1, Z=0, P=0, A=1, O=1, S=0 注:注:SF符號標(biāo)志;符號標(biāo)志;PF奇偶運(yùn)算結(jié)果的低奇偶運(yùn)算結(jié)果的低8位中所含位中所含1的個數(shù)為偶數(shù)時為的個數(shù)為偶數(shù)時為0););CF進(jìn)位;進(jìn)位;AF輔助進(jìn)位第輔助進(jìn)位第3位往第位往第4位有借、進(jìn)位);位有借、進(jìn)位);OF溢出;溢出;ZF零標(biāo)志。零標(biāo)志。
39、3 3、增量指令、增量指令 INC (INC (見教材見教材P161P161)格式:格式: INC dest; dest+1-dest INC dest; dest+1-dest 實(shí)例:實(shí)例: INC AX INC AX ;AX AX AX+1 AX+1 INC BL INC BL ;BL BL BL+1 BL+1 INC BYTE PTRBX+DI+500 INC BYTE PTRBX+DI+500注意:注意:1) 1) 其操作數(shù)只能是通用寄存器和存儲器;其操作數(shù)只能是通用寄存器和存儲器; 2 2INCINC指令影響標(biāo)志指令影響標(biāo)志AFAF、OFOF、PFPF、SFSF、ZFZF, 但不影響
40、進(jìn)位標(biāo)志但不影響進(jìn)位標(biāo)志CFCF。4 4、交換及相加指令、交換及相加指令 XADD (XADD (見教材見教材P161P161)指令格式:指令格式: XADD dest, REG; XADD dest, REG; 等同于:等同于: XCHG dest, REG; XCHG dest, REG; ADD dest, RGE ADD dest, RGE注意:注意:1) 1) 其目的操作數(shù)可以是寄存器和存儲器,其目的操作數(shù)可以是寄存器和存儲器,但源但源 操作數(shù)只能是寄存器。操作數(shù)只能是寄存器。 2 2與與ADDADD一樣,一樣,XADDXADD指令影響指令影響AFAF、OFOF、PFPF、SFSF、
41、ZFZF、CFCF六個標(biāo)志位。六個標(biāo)志位。7、減指令、減指令 SUB (見書本見書本p162)注:注:1.源和目的操作數(shù)不能源和目的操作數(shù)不能同時為存儲器操作數(shù)同時為存儲器操作數(shù)如如 SUB 2000H, 3000H是是錯的。錯的。 2.立即數(shù)不能作為目的操立即數(shù)不能作為目的操作數(shù)作數(shù)NEG 取補(bǔ)指令取補(bǔ)指令8、比較指令、比較指令 CMP (見書本見書本p162)注:比較指令注:比較指令 CMP除了不回送除了不回送結(jié)果外,其他一切均同結(jié)果外,其他一切均同SUB指令。指令。9、比較并交換指令、比較并交換指令 CMPXCHG (見書本見書本p162)n指令格式:CMPXCHG dest, REGn
42、意義:將累加器AL/AX/EAX和目的操作數(shù)相比較,若相等,則將REG中的數(shù)據(jù)傳送給目的 操作數(shù);否則,將目的 操作數(shù)中的數(shù)據(jù)傳送給累加器。目的 操作數(shù)可以是MEM和REG,但其類型要與通用REG一致。10、8字節(jié)比較并交換指令字節(jié)比較并交換指令 CMPXCHG8B (見書本見書本p163)n指令格式:CMPXCHG8B MEMn意義:將MEM中8字節(jié)的二進(jìn)制數(shù)與EDX:EAX相比較,若相等,則將ECX:EBX中8字節(jié)的二進(jìn)制數(shù)傳送給存儲器;否則,將存儲器中8字節(jié)的二進(jìn)制數(shù)傳送給EDX:EAX。7.3.2、邏輯運(yùn)算指令NEG dest求補(bǔ)指令)NOT dest求反指令)AND、OR和XOR7.
43、3.4 移位指令總結(jié):移位指令執(zhí)行的操作如下圖所示:總結(jié):移位指令執(zhí)行的操作如下圖所示:最低位最高位CF0(a)算術(shù)/邏輯左移SAL/SHL最低位最高位CF(b)算術(shù)右移SAR最低位最高位CF(c)邏輯右移SHR0非循環(huán)移位指令功能示意圖非循環(huán)移位指令功能示意圖這這4 4條指令的功能如下圖示:條指令的功能如下圖示:最低位最高位CF(a) ROL最低位最高位CF(c) RCL最低位最高位CF(b) ROR最低位最高位CF(d) RCR循環(huán)移位指令功能示意圖循環(huán)移位指令功能示意圖8. 雙精度右移指令雙精度右移指令SHRD dest, REG, imm/CL9. 雙精度左移指令雙精度左移指令 SHL
44、D dest, REG, imm/CL7.3.5 位搜索位搜索Bit Scan指令指令nBSF/BSR REG, Sourcen意義:按由低向高BSF或按由高向低BSR對源操作數(shù)進(jìn)行探索,將遇到的第1個1的位置值 送到目的操作數(shù)中,且將零標(biāo)志位ZF置0.若源操作數(shù)為0,則ZF置1.7.3.6 位測試位測試Bit Tests指令指令nBT/BTC/BTR/BTS dest, Sourcen意義:將目的操作數(shù)中由源操作數(shù)指定的位傳送給進(jìn)位標(biāo)志位CF,然后使用條件轉(zhuǎn)移指令JC/JNCCF=1轉(zhuǎn)移/CF=0轉(zhuǎn)移對該位進(jìn)行測試。7.3.7 常用指令應(yīng)用舉例常用指令應(yīng)用舉例P169)n【例7.1】 編寫程
45、序段實(shí)現(xiàn)將字變量W中的無符號數(shù)除以8,商和余數(shù)分別放入變量QUOT和字節(jié)變量REMA中。n分析:右移3位,但要用RCR指令將3次SHR后的CF值依次移入REMA中作為余數(shù);現(xiàn)用SHR右移5位將3位余數(shù)從D7D5移至D2D0。n程序段如下:n W DW 65525n QUOT DW 0n REMA DB 0n MOV AX, Wn SHR AX,n RCR REMA, 1n SHR AX,1n RCR REMA, 1n SHR AX,1n RCR REMA, 1n MOV QUOT, AXn MOV CL, 5n SHR REMA, CL偽指令:匯編時不產(chǎn)生機(jī)器代碼,而是由偽指令:匯編時不產(chǎn)生機(jī)
46、器代碼,而是由 MASMMASM識別,又稱匯編命令。識別,又稱匯編命令。7.4.1 7.4.1 過程子程序定義偽指令過程子程序定義偽指令 在MASM中,過程的含義和子程序是一樣的,一個過程可以被其它程序所調(diào)用,這個過程的最后一條指令,一般是返回指令。 過程定義偽指令的格式為:過程名PROC NEAR或過程名PROC FAR RET 過程名ENDP 過程定義的屬性有兩種,標(biāo)有NEAR(或不標(biāo),默認(rèn)為NEAR)表示在段內(nèi)被調(diào)用,標(biāo)有FAR屬性可以被其它段調(diào)用。這兩種調(diào)用的返回指令都是RET. 調(diào)用一個過程的格式為:CALL 過程名7.4.2 微處理器選擇偽指令自看,P174) 7.4.3 7.4.
47、3、段定義偽指令、段定義偽指令(p174)(p174) 格式格式: : 段名段名 SEGMENT SEGMENT 定位方式定位方式 連接方式連接方式 類別類別 . . 段名段名 ENDS ENDS (1) (1)定位方式定位方式: :指定段的起始地址邊界指定段的起始地址邊界. . 4 4種種: PARA(: PARA(頁邊界頁邊界) () (能被能被256256除除) ) PAGE( PAGE(段邊界段邊界) () (能被能被1616除除) ) WORD( WORD(字邊界字邊界) () (能被能被2 2除除) ) BYTE BYTE (2) (2)連接方式連接方式 6 6種種:PUBLIC
48、STACK :PUBLIC STACK 空空 COMMON MEMORY AT COMMON MEMORY AT (3) (3)類別名類別名類別名是自定義的,連接時類別名是自定義的,連接時LINKLINK將把類別名相同的所將把類別名相同的所有段存放在連續(xù)的存儲區(qū)域中有段存放在連續(xù)的存儲區(qū)域中表示本段為堆棧段,連接方式同PUBLIC各類連接方式詳細(xì)解釋見P175 7.4.4 7.4.4 匯編地址計(jì)數(shù)器匯編地址計(jì)數(shù)器P176P176)其值用其值用$ $符號表示,用戶直接用符號表示,用戶直接用$ $來引用匯編來引用匯編地址計(jì)數(shù)器的值,其值就是指令的偏移地地址計(jì)數(shù)器的值,其值就是指令的偏移地址址; ;
49、 對需要申請分配內(nèi)存單元的變量和產(chǎn)對需要申請分配內(nèi)存單元的變量和產(chǎn)生目標(biāo)代碼的指令,匯編地址計(jì)數(shù)器就按生目標(biāo)代碼的指令,匯編地址計(jì)數(shù)器就按存儲單元數(shù)和目標(biāo)代碼的長度增值。存儲單元數(shù)和目標(biāo)代碼的長度增值。DATA SEGMENTDATA SEGMENTBUF DB 0123456789ABCDEFBUF DB 0123456789ABCDEFCOUNT EQU $-BUF COUNT EQU $-BUF ;其值為;其值為1616DATA ENDSDATA ENDS7.4.5 7.4.5 段寄存器說明偽指令段寄存器說明偽指令A(yù)SSUME ASSUME 但真正把段地址裝入段寄存器稱為段初始但真正把段
50、地址裝入段寄存器稱為段初始化的操作需要由程序員自己完成化的操作需要由程序員自己完成7.4.6. 結(jié)束偽指令END 當(dāng)匯編程序?qū)υ闯绦蜻M(jìn)行匯編過程中,如遇到END,得知源程序到此結(jié)束。格式為:END 表達(dá)式通常就是程序第一條指令的標(biāo)號。如果有多個模塊連接在一起,則只有主模塊的END語句允許使用標(biāo)號。 7.4.7 宏匯編源程序的格式詳見宏匯編源程序的格式詳見P177)80386/80486/Pentium的16位段模式格式:8086的16位段模式格式:匯編語言的一個實(shí)例 DATASEGMENTBLOCKDB43H,0ABH,PDATADB20DUP(?)NDATADB20DUP(?)DATA EN
51、DSCODE SEGMENTASSUME CS:CODE,DS:DATAEXP1 PROC FARSTART:PUSH DSMOV AX,0PUSH AX從START標(biāo)號開始的三句為返回DOS設(shè)置返回地址,它相當(dāng)于把DS:0000H壓棧. 連接程序?yàn)槊恳粋€用戶程序建立了一個程序段前綴,在前綴開始處安排了一條 INT 20H,在過程結(jié)束時通過RET返回DOS。 MOV AX,DATA MOV DS,AX MOV ES,AX LEA SI,BLOCK LEA DI,PDATA LEA BX,NDATA CLD MOV CX,PDATA-BLOCK GOON: LODSB ;(AL) SI TEST
52、 AL,80H JNZ MINUS STOSB ;DI (AL) ;DI (DI)+1 (下接右邊) JMP AGAINMINUS: XCHGBX,DI STOSB XCHGBX,DIAGAIN: LOOPGOON RETEXP1 ENDPCODE ENDS END START對系統(tǒng)的硬件尤其是對系統(tǒng)的硬件尤其是I/OI/O的使用與的使用與管理。管理。1.DOS1.DOS系統(tǒng)功能調(diào)用格式系統(tǒng)功能調(diào)用格式1)1)、在指定的寄存器、在指定的寄存器DXDX或或DLDL中設(shè)置入口中設(shè)置入口參數(shù)參數(shù)2)2)、在、在AHAH中設(shè)置功能號中設(shè)置功能號3)3)、用、用INT21HINT21H指令執(zhí)行系統(tǒng)功能調(diào)用指令執(zhí)行系統(tǒng)功能調(diào)用4)4)、根據(jù)出口參數(shù)分析執(zhí)行情況、根據(jù)出口參數(shù)分析執(zhí)行情況2.DOS2.DOS系統(tǒng)功能調(diào)用系統(tǒng)功能調(diào)用INT 21HINT 21H的部分的部分I/OI/O操作操作1). 11). 1號功能調(diào)用鍵盤輸入一個單字符并號功能調(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 工程勞務(wù)分工合同
- 展覽展廳租賃服務(wù)合同書
- 培訓(xùn)學(xué)校服務(wù)合同
- 實(shí)習(xí)協(xié)議沒到期勞動合同
- 汽車合同變更協(xié)議
- 汽車城物業(yè)服務(wù)協(xié)議合同
- 戶內(nèi)穿線協(xié)議合同
- 廚房出租合同協(xié)議書模板
- 合同終止簽收協(xié)議
- 會計(jì)人員聘用合同協(xié)議書
- 大學(xué)英語說課
- (完整版)數(shù)字信號處理教案(東南大學(xué))
- 小學(xué)二年級24點(diǎn)習(xí)試題庫
- 建筑工程材料測試題及參考答案
- 醫(yī)院檢查報告單模板
- 《洗紅領(lǐng)巾》(教學(xué)設(shè)計(jì))-一年級下冊勞動浙教版
- 回彈法檢測磚砂漿強(qiáng)度計(jì)算表
- 有償借用鄉(xiāng)村道路協(xié)議書
- 酶免疫技術(shù)(免疫學(xué)檢驗(yàn)課件)
- 教育經(jīng)濟(jì)與管理院校排名
- 基本農(nóng)田劃定技術(shù)規(guī)程(TDT1032-2011)
評論
0/150
提交評論