第7章 匯編語(yǔ)言與匯編程序_第1頁(yè)
第7章 匯編語(yǔ)言與匯編程序_第2頁(yè)
第7章 匯編語(yǔ)言與匯編程序_第3頁(yè)
第7章 匯編語(yǔ)言與匯編程序_第4頁(yè)
第7章 匯編語(yǔ)言與匯編程序_第5頁(yè)
已閱讀5頁(yè),還剩78頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、1微型計(jì)算機(jī)原理及應(yīng)用2匯編語(yǔ)言與匯編程序2 23 3符號(hào)指令中的表達(dá)式符號(hào)指令中的表達(dá)式操作數(shù)的尋址方式操作數(shù)的尋址方式常用指令常用指令4 4 偽指令偽指令1 15 5常用系統(tǒng)功能調(diào)用常用系統(tǒng)功能調(diào)用3機(jī)器指令機(jī)器指令用二進(jìn)制編碼形式下達(dá)的指示和命令。用二進(jìn)制編碼形式下達(dá)的指示和命令。如:如:1100 1101 0010 00011100 1101 0010 0001 機(jī)器語(yǔ)言編寫程序煩瑣,難記機(jī)器語(yǔ)言編寫程序煩瑣,難記憶,不易理解,易出錯(cuò)憶,不易理解,易出錯(cuò)符號(hào)指令符號(hào)指令由由助記符、符號(hào)助記符、符號(hào)組成,它與機(jī)器指令一組成,它與機(jī)器指令一一對(duì)應(yīng)。一對(duì)應(yīng)。 1100 1101 0010 0

2、001 1100 1101 0010 0001 INT 21HINT 21H 匯編匯編機(jī)器只能識(shí)別機(jī)器指令,所以需要將符號(hào)指機(jī)器只能識(shí)別機(jī)器指令,所以需要將符號(hào)指令翻譯成機(jī)器指令,翻譯的過(guò)程稱作匯編。令翻譯成機(jī)器指令,翻譯的過(guò)程稱作匯編。匯編程序匯編程序完成匯編任務(wù)的程序。完成匯編任務(wù)的程序。41E1EPUSH DSPUSH DS2BC02BC0SUB AX,AXSUB AX,AX5050PUSH AXPUSH AXB84D14B84D14MOV AX,144DHMOV AX,144DH8ED88ED8MOV DS,AXMOV DS,AX 匯編語(yǔ)言源程序匯編語(yǔ)言源程序匯編程序匯編程序目標(biāo)文件目

3、標(biāo)文件匯編語(yǔ)言源程序匯編語(yǔ)言源程序用符號(hào)指令書寫的程序。用符號(hào)指令書寫的程序。5以字母開頭的一串字符以字母開頭的一串字符為了區(qū)別符號(hào)和數(shù)據(jù),以字母開頭的十六進(jìn)制數(shù),為了區(qū)別符號(hào)和數(shù)據(jù),以字母開頭的十六進(jìn)制數(shù),其前面要加一個(gè)前導(dǎo)其前面要加一個(gè)前導(dǎo)0 0如:如: 0FFH 0FFH 數(shù)據(jù)數(shù)據(jù) FFH FFH 符號(hào)符號(hào) 符號(hào)符號(hào)匯編中的符號(hào)有匯編中的符號(hào)有常量、變量和標(biāo)號(hào)常量、變量和標(biāo)號(hào)三類三類1 1 符號(hào)指令中的表達(dá)式符號(hào)指令中的表達(dá)式6常用的有二進(jìn)制數(shù)、十進(jìn)制數(shù)、十六進(jìn)制數(shù)和常用的有二進(jìn)制數(shù)、十進(jìn)制數(shù)、十六進(jìn)制數(shù)和ASCIIASCII字符字符如:如: 1010B1010B, 1010,0AH0A

4、H, A A,$ $,ABCABC1.1.常量常量 在匯編時(shí)已有確定數(shù)值的量在匯編時(shí)已有確定數(shù)值的量ASCIIASCII字符做數(shù)值常量時(shí),需加單引號(hào)字符做數(shù)值常量時(shí),需加單引號(hào)1.1 1.1 常量和數(shù)值表達(dá)式常量和數(shù)值表達(dá)式(1 1)數(shù)值常量)數(shù)值常量7程序中為經(jīng)常使用的數(shù)值取的名。程序中為經(jīng)常使用的數(shù)值取的名。用用EQUEQU或或“”偽指令定義,如:偽指令定義,如: P EQU 314 P EQU 314 P=314 P=314注注:匯編時(shí),匯編程序不給符號(hào)常量分配存儲(chǔ)單元:匯編時(shí),匯編程序不給符號(hào)常量分配存儲(chǔ)單元(2 2)符號(hào)常量)符號(hào)常量1.1 1.1 常量常量和數(shù)值表達(dá)式和數(shù)值表達(dá)式8

5、2.2.數(shù)值表達(dá)式數(shù)值表達(dá)式 由常量與運(yùn)算符組成的有意義的式子由常量與運(yùn)算符組成的有意義的式子,結(jié)果為,結(jié)果為一數(shù)值。一數(shù)值。在匯編語(yǔ)言源程序中,允許對(duì)常量進(jìn)行以下三種類型在匯編語(yǔ)言源程序中,允許對(duì)常量進(jìn)行以下三種類型的運(yùn)算:的運(yùn)算:(1 1)算術(shù)運(yùn)算算術(shù)運(yùn)算 包括,包括,/ /,MODMOD(求余)(求余)(2 2)邏輯運(yùn)算)邏輯運(yùn)算 包括包括ANDAND,OROR,XORXOR,NOTNOT(3 3)關(guān)系運(yùn)算)關(guān)系運(yùn)算 包括:包括:EQEQ(),(),NENE(),),LTLT(),(),GTGT(),(),LELE(),),GEGE()1.1 1.1 常量常量和數(shù)值表達(dá)式和數(shù)值表達(dá)式91

6、.21.2 標(biāo)號(hào)標(biāo)號(hào)標(biāo)號(hào)定義的方式有兩種:標(biāo)號(hào)定義的方式有兩種: (1 1)書寫在符號(hào)指令前,)書寫在符號(hào)指令前,用:定義用:定義,為,為NEARNEAR類型,類型, NEARNEAR型標(biāo)號(hào)只能在段內(nèi)使用!型標(biāo)號(hào)只能在段內(nèi)使用!例:例: CYCLECYCLE:MOV ALMOV AL,SI SI ;定義近標(biāo)號(hào);定義近標(biāo)號(hào)CYCLECYCLE(2 2)用)用PROCPROCENDPENDP偽指令偽指令定義過(guò)程名定義過(guò)程名例:例:ABC PROC FAR ;ABC PROC FAR ;定義過(guò)程名定義過(guò)程名ABCABC為為FARFAR型標(biāo)號(hào)型標(biāo)號(hào) ABC ENDP ABC ENDP標(biāo)號(hào)標(biāo)號(hào)指令地址的

7、符號(hào)表示,也可以是過(guò)程名指令地址的符號(hào)表示,也可以是過(guò)程名10變量變量的實(shí)質(zhì)是指向內(nèi)存中某個(gè)地址的指針。的實(shí)質(zhì)是指向內(nèi)存中某個(gè)地址的指針。地址表達(dá)式:地址表達(dá)式:由變量、標(biāo)號(hào)、寄存器、常量和運(yùn)算由變量、標(biāo)號(hào)、寄存器、常量和運(yùn)算符組成。符組成。寄存器只能是寄存器只能是SISI、DIDI、BXBX、BP,BP,且寄存且寄存器必須位于器必須位于 中。中。1.3 1.3 變量變量1.1.變量和地址表達(dá)式變量和地址表達(dá)式11數(shù)據(jù)存放規(guī)律數(shù)據(jù)存放規(guī)律字節(jié)數(shù)據(jù)字節(jié)數(shù)據(jù)-一個(gè)字節(jié)單元存放一個(gè)字節(jié)單元存放字?jǐn)?shù)據(jù)字?jǐn)?shù)據(jù)-二個(gè)字節(jié)單元存放二個(gè)字節(jié)單元存放雙字?jǐn)?shù)據(jù)雙字?jǐn)?shù)據(jù)-四個(gè)字節(jié)單元存放四個(gè)字節(jié)單元存放規(guī)定:規(guī)定:

8、(1)(1)“低對(duì)低低對(duì)低, ,高對(duì)高高對(duì)高”(2)(2)低位字節(jié)的地址為字的地址低位字節(jié)的地址為字的地址2.2.變量存儲(chǔ)區(qū)中數(shù)據(jù)的存放變量存儲(chǔ)區(qū)中數(shù)據(jù)的存放1.3 1.3 變量變量12(1 1)段基址)段基址定義變量所在段的段首地址的高定義變量所在段的段首地址的高1616位位 由由SEGSEG算符指定算符指定如:如: SEG W SEG W ;取變量;取變量W W的段基址的段基址(2 2)偏移地址)偏移地址變量所在段的段首址到該變量的字節(jié)變量所在段的段首址到該變量的字節(jié)距離距離. .由由OFFSETOFFSET算符指定算符指定如:如: OFFSET W OFFSET W ;取變量;取變量W

9、W的偏移地址的偏移地址3.3.變量的屬性變量的屬性(3 3)類型)類型存取該變量中數(shù)據(jù)的字節(jié)數(shù)存取該變量中數(shù)據(jù)的字節(jié)數(shù)變量的類型有:字節(jié)(變量的類型有:字節(jié)(bytebyte),字(),字(wordword),雙字),雙字(dworddword),四字(),四字(qwordqword),十字節(jié)(),十字節(jié)(tbytetbyte),一個(gè)),一個(gè)數(shù)據(jù)分別占數(shù)據(jù)分別占1 1,2 2,4 4,8 8,1010個(gè)字節(jié)單元個(gè)字節(jié)單元1.3 1.3 變量變量13在數(shù)據(jù)段或附加數(shù)據(jù)段中用偽指令定義在數(shù)據(jù)段或附加數(shù)據(jù)段中用偽指令定義 變量名變量名 DBDB 表達(dá)式表達(dá)式, , ;定義字節(jié)變量;定義字節(jié)變量 變量

10、名變量名 DW DW 表達(dá)式表達(dá)式, , ;定義字變量;定義字變量 變量名變量名 DD DD 表達(dá)式表達(dá)式, , ;定義雙字變量;定義雙字變量 變量名變量名 DQ DQ 表達(dá)式表達(dá)式, , ;定義四字變量;定義四字變量 變量名變量名 DF DF 表達(dá)式表達(dá)式, , ;定義六字節(jié)變量;定義六字節(jié)變量 變量名變量名 DT DT 表達(dá)式表達(dá)式, , ;定義十字節(jié)變量;定義十字節(jié)變量數(shù)據(jù)定義偽指令指明了變量的數(shù)據(jù)定義偽指令指明了變量的類型類型表達(dá)式確定變量的表達(dá)式確定變量的初值初值。表達(dá)式有如下。表達(dá)式有如下6 6種:種:4.4.變量的定義變量的定義1.3 1.3 變量變量14(1 1)表達(dá)式為常量或

11、數(shù)值表達(dá)式)表達(dá)式為常量或數(shù)值表達(dá)式存入數(shù)值存入數(shù)值 如:如:W1W1 DWDW 1 1(2 2)表達(dá)式為)表達(dá)式為ASCIIASCII字符串字符串 存入存入ASCIIASCII值值 如:如:W2W2 DWDW AB ;用用DWDW定義時(shí),串長(zhǎng)不可大于定義時(shí),串長(zhǎng)不可大于2 2 B2B2 DBDB AB$ ;用用DBDB定義時(shí),串長(zhǎng)可大于定義時(shí),串長(zhǎng)可大于2 2(3 3)表達(dá)式為重復(fù)子句)表達(dá)式為重復(fù)子句 格式:格式:N DUPN DUP(表達(dá)式)(表達(dá)式) 如:如:B3B3 DBDB 2 2 DUP(0)DUP(0) B4B4 DBDB 2 2 DUP(5,A)DUP(5,A)1.3 1.3

12、 變量變量15(4 4)地址表達(dá)式)地址表達(dá)式(只適用只適用DW、DD和和DF3個(gè)偽指令個(gè)偽指令) 格式:格式: 變量名變量名 DW DW 地址表達(dá)式地址表達(dá)式 ; ;取其偏移地址取其偏移地址來(lái)初來(lái)初 ; ;始化變量始化變量 變量名變量名 DD DD 地址表達(dá)式地址表達(dá)式 ; ;取取1616位偏移地址和段位偏移地址和段 ; ;基址基址來(lái)初始化其變量來(lái)初始化其變量 變量名變量名 DF DF 地址表達(dá)式地址表達(dá)式 ; ;取取3232位偏移地址和段位偏移地址和段 ; ;基址基址來(lái)初始化其變量來(lái)初始化其變量(5 5)由以上表達(dá)式組成的序列,之間用)由以上表達(dá)式組成的序列,之間用 ,分隔分隔 B5 B5

13、 DBDB 1,2,31,2,3 B6 B6 DBDB 1, ,2, ,3 ; ; 此行的此行的“,”,”不是序列分隔符不是序列分隔符1.3 1.3 變量變量16W1 DW B2 W1 DW B2 ;用;用B2B2的偏移地址初始化的偏移地址初始化W1W1變量變量B1 DB B1 DB AB$AB$ ;變量;變量B1B1用用A A、B B、$ $的的ASCIIASCII碼初始化碼初始化W2 DWW2 DW 1994H1994HD DD EW D DD EW ;用;用 EWEW的段基址和偏移地址初始化的段基址和偏移地址初始化D DB2 DB 2 DUP(-5,-1)B2 DB 2 DUP(-5,-

14、1) DB 1 DUP(10, DB 1 DUP(10, E E ) ) ;重復(fù)因子;重復(fù)因子1 1不能省不能省 DB DB 1313 , ,1,31,3在附加數(shù)據(jù)段在附加數(shù)據(jù)段DATA2DATA2中定義的變量如下:中定義的變量如下:EQ DQ 1234567890ABCDEFHEQ DQ 1234567890ABCDEFHEW DW EW DW ABAB , , CDCD ;用;用DWDW定義,字定義,字符符不超過(guò)不超過(guò)2 2個(gè)個(gè)例例 畫出數(shù)據(jù)的存儲(chǔ)形式畫出數(shù)據(jù)的存儲(chǔ)形式1.3 1.3 變量變量17 地址有字節(jié)、字、雙字等類型??梢允褂玫刂酚凶止?jié)、字、雙字等類型??梢允褂肞TRPTR算符臨時(shí)

15、變更原地址表達(dá)式的類型屬性算符臨時(shí)變更原地址表達(dá)式的類型屬性, ,或或者明確沒(méi)有類型屬性的地址表達(dá)式的類型。者明確沒(méi)有類型屬性的地址表達(dá)式的類型。格式:格式: 類型類型 PTR PTR 地址表達(dá)式地址表達(dá)式接上例,如:接上例,如:BYTEBYTE PTR BX+5 PTR BX+5 ;明確類型;明確類型 WORDWORD PTR B1 PTR B1 ;臨時(shí)變更;臨時(shí)變更5. 5. 地址表達(dá)式類型的變更地址表達(dá)式類型的變更1.3 1.3 變量變量18匯編語(yǔ)言與匯編程序1 13 3符號(hào)指令中的表達(dá)式符號(hào)指令中的表達(dá)式操作數(shù)的尋址方式操作數(shù)的尋址方式常用指令常用指令4 4 偽指令偽指令2 25 5常

16、用系統(tǒng)功能調(diào)用和常用系統(tǒng)功能調(diào)用和 BIOSBIOS19符號(hào)指令的格式:符號(hào)指令的格式: 操作助記符操作助記符 目的操作數(shù)目的操作數(shù),源操作數(shù),源操作數(shù) ;注釋;注釋 操作助記符操作助記符指明指明指令進(jìn)行什么操作指令進(jìn)行什么操作 源操作數(shù)指明操作數(shù)據(jù)的地址;目的操作數(shù)既指明操作數(shù)據(jù)的源操作數(shù)指明操作數(shù)據(jù)的地址;目的操作數(shù)既指明操作數(shù)據(jù)的地址,還指明(操作后)數(shù)據(jù)的存放地址地址,還指明(操作后)數(shù)據(jù)的存放地址尋址方式尋址方式用什么方式尋找操作數(shù)據(jù)。用什么方式尋找操作數(shù)據(jù)。尋址方式可分為三大類:尋址方式可分為三大類: 立即尋址:操作數(shù)就是操作數(shù)據(jù)立即尋址:操作數(shù)就是操作數(shù)據(jù) 寄存器尋址:操作數(shù)是寄

17、存器名寄存器尋址:操作數(shù)是寄存器名 存儲(chǔ)器尋址存儲(chǔ)器尋址 :操作數(shù)是地址表達(dá)式:操作數(shù)是地址表達(dá)式2 2 操作數(shù)的尋址方式操作數(shù)的尋址方式20操作數(shù)據(jù)在指定的寄存器中操作數(shù)據(jù)在指定的寄存器中1. 1. 寄存器尋址寄存器尋址 例:例: AX=2035HAX=2035H,BX=0178H BX=0178H MOV BX MOV BX,AX ;BX=AX=2035HAX ;BX=AX=2035H ADD AL ADD AL,BL ;AL=ADH,BL=78HBL ;AL=ADH,BL=78HAH,AL,BH,BL,CH,CL,DH,DL8AH,AL,BH,BL,CH,CL,DH,DL8位通用寄存器位

18、通用寄存器AX,BX,CX,DX,SI,DI,BP,SP16AX,BX,CX,DX,SI,DI,BP,SP16位通用寄存器位通用寄存器傳送指令傳送指令助記符助記符目的操目的操作數(shù)作數(shù)源操作源操作數(shù)數(shù)21操作數(shù)即為操作數(shù)據(jù),操作數(shù)即為操作數(shù)據(jù),操作數(shù)據(jù)就操作數(shù)據(jù)就在指令中在指令中l(wèi)立即尋址方式只能用于源操作數(shù),主要用來(lái)給寄立即尋址方式只能用于源操作數(shù),主要用來(lái)給寄存器或存儲(chǔ)器賦初值存器或存儲(chǔ)器賦初值 例:例:MOV 5,AL MOV 5,AL 2. 2. 立即尋址立即尋址例:例:MOV AL,5 ;MOV AL,5 ;將字節(jié)將字節(jié)05H05H送送ALAL,AL=05HAL=05H MOV AX,

19、18 ; MOV AX,18 ;將字將字0012H0012H送送AXAX,AX=0012HAX=0012H MOV BL, MOV BL,1 ;1 ;將字節(jié)將字節(jié)FFHFFH送送BLBL,BL=0FFHBL=0FFH22操作數(shù)據(jù)在存儲(chǔ)器中,其操作數(shù)據(jù)在存儲(chǔ)器中,其偏移地址由指令直接給偏移地址由指令直接給出出( (地址表達(dá)式中只有變量名和常量)。地址表達(dá)式中只有變量名和常量)。段地址默段地址默認(rèn)在認(rèn)在DSDS中中3. 3. 直接尋址直接尋址一種通過(guò)一種通過(guò) 數(shù)值數(shù)值 :例:例 MOV AX,1000HMOV AX,1000H一種通過(guò)如下地址表達(dá)式:一種通過(guò)如下地址表達(dá)式:變量名變量名 或或 變量

20、名變量名+ +常量常量 例:例:MOV AX,W MOV AX,W 該指令的源操作數(shù)的地址為該指令的源操作數(shù)的地址為 DSDS:OFFSET WOFFSET W23l直接尋址常用已定義的變量表示直接尋址常用已定義的變量表示 例:例:W2 DW W2 DW 5 5,1994H1994H MOV AX, W2 MOV AX, W2 ; AX=FFFBHAX=FFFBH MOV BX MOV BX,W2W22 2 ; BXBX1994H1994Hl區(qū)分立即尋址與直接尋址區(qū)分立即尋址與直接尋址 從變量中取數(shù)據(jù)屬于直接尋址方式,注意與符號(hào)從變量中取數(shù)據(jù)屬于直接尋址方式,注意與符號(hào)常量區(qū)別常量區(qū)別 例:例

21、:AA EQU 10AA EQU 10 MOV AX MOV AX,AA AA ;立即尋址,;立即尋址,AX=000AHAX=000AH MOV BX MOV BX,AA+5 AA+5 ;立即尋址,;立即尋址,BX=000FHBX=000FH24操作數(shù)操作數(shù)為帶方括號(hào)的寄存器為帶方括號(hào)的寄存器:SISI,DIDI,BXBX,BPBP寄存器的內(nèi)容為操作數(shù)據(jù)的偏移地址寄存器的內(nèi)容為操作數(shù)據(jù)的偏移地址4. 4. 間接尋址間接尋址l若用若用BPBP,約定段寄存器為約定段寄存器為SSSS;否則,約定段寄存器否則,約定段寄存器為為DSDS。 例:例:MOV AX, BX ;(DS:BX)MOV AX, B

22、X ;(DS:BX)AX AX l 例:例:MOV AX, BP ;(SS:BP)MOV AX, BP ;(SS:BP)AXAX 25 操作數(shù)據(jù)在存儲(chǔ)器中,其操作數(shù)據(jù)在存儲(chǔ)器中,其偏移地址為偏移地址為基址寄存器基址寄存器(BXBX或或BPBP)的內(nèi)容與變量的偏移地址、常量之和)的內(nèi)容與變量的偏移地址、常量之和: : 變量名變量名+ +基址寄存器基址寄存器+ +常量常量 或或 變量名變量名 基址寄存器基址寄存器+ +常量常量 例例: MOV BL,2BX: MOV BL,2BX 或或 MOV BL,BX+2MOV BL,BX+2 ;(DS:BX+2);(DS:BX+2)BLBL例:例: MOV

23、6BP,AXMOV 6BP,AX 或或 MOV BP+6,AX ; MOV BP+6,AX ; AXAXSS:BP+6SS:BP+6 段寄存器的確定,首先由變量確定;若無(wú)變量,則由寄存器段寄存器的確定,首先由變量確定;若無(wú)變量,則由寄存器確定,寄存器確定的原則同間址。確定,寄存器確定的原則同間址。5. 5. 基址尋址基址尋址266. 6. 變址尋址變址尋址操作數(shù)據(jù)在存儲(chǔ)器中,其偏移地址為操作數(shù)據(jù)在存儲(chǔ)器中,其偏移地址為變址寄存器(變址寄存器(SISI或或DIDI)的內(nèi)容與的內(nèi)容與變量的偏移地址、常量變量的偏移地址、常量之和。之和。 例:例:MOV AX,2SI MOV AX,2SI 或或 MO

24、V AX,SI+2 MOV AX,SI+2 執(zhí)行的操作是執(zhí)行的操作是(DS:SI+2) AX(DS:SI+2) AX 段寄存器的確定,首先由變量確定;若無(wú)變量,則由段寄存器的確定,首先由變量確定;若無(wú)變量,則由寄存器確定,寄存器確定的原則同間址。寄存器確定,寄存器確定的原則同間址。 277. 7. 基址變址尋址基址變址尋址 例例: MOV AX,4 BX+DI: MOV AX,4 BX+DI 或或MOV AX,BX+DI+4 MOV AX,BX+DI+4 ;(DS:BX+DI+4)AX (DS:BX+DI+4)AX 段寄存器的確定,首先由變量確定;若無(wú)變量,則由段寄存器的確定,首先由變量確定;

25、若無(wú)變量,則由基址寄存器確定,基址寄存器確定的原則同間址?;芳拇嫫鞔_定,基址寄存器確定的原則同間址。 操作數(shù)據(jù)在存儲(chǔ)器中,其偏移地址為指令中指定操作數(shù)據(jù)在存儲(chǔ)器中,其偏移地址為指令中指定的基址寄存器和變址寄存器的內(nèi)容與的基址寄存器和變址寄存器的內(nèi)容與變量的偏移變量的偏移地址、常量地址、常量之和。之和。28( (1 1) )存儲(chǔ)器尋址與地址表達(dá)式存儲(chǔ)器尋址與地址表達(dá)式地址表達(dá)式的一般形式是:地址表達(dá)式的一般形式是:變量變量 基址寄存器基址寄存器+ +變址寄存器變址寄存器+ +常量常量 也可表示為:也可表示為: 基址寄存器基址寄存器+ +變址寄存器變址寄存器+ +變量變量+ +常量常量 其他尋址

26、方式都是其他尋址方式都是一般形式一般形式的不完整形式的不完整形式: : 直接尋址直接尋址: :變量變量+ +常量常量 或或 變量變量+ +常量常量 間接尋址間接尋址: : 寄存器寄存器 基址或變址尋址基址或變址尋址: :變量變量 寄存器寄存器+ +常量常量 或或變量變量/ /常量常量 寄存器寄存器 基址變址尋址基址變址尋址: :變量變量 基址寄存器基址寄存器+ +變址寄存器變址寄存器+ +常量常量 或或基址寄存器基址寄存器+ +變址寄存器變址寄存器+ +變量變量+ +常量常量 10. 10. 存儲(chǔ)器尋址及存儲(chǔ)器中段基址或段選擇字的確定存儲(chǔ)器尋址及存儲(chǔ)器中段基址或段選擇字的確定29例如例如: M

27、OV ES:DI, AL : MOV ES:DI, AL ;AL ES:DIAL ES:DI段超越或段更換是在地址表達(dá)式前寫上段名或段寄段超越或段更換是在地址表達(dá)式前寫上段名或段寄存器來(lái)表示的。存器來(lái)表示的。(3)(3) 段超越或段更換段超越或段更換30(2)(2)存儲(chǔ)器尋址中段寄存器的確定存儲(chǔ)器尋址中段寄存器的確定存儲(chǔ)器存取方式存儲(chǔ)器存取方式約定段寄存器約定段寄存器 段更換段更換偏移地址偏移地址取指令取指令CSCS不允許不允許IPIP堆棧操作堆棧操作SSSS不允許不允許SPSP數(shù)據(jù)存取數(shù)據(jù)存取(BP(BP間址、基址除外間址、基址除外) )DSDS另外另外5 5個(gè)段寄存器個(gè)段寄存器EAEABP

28、BP間址、基址數(shù)據(jù)存取間址、基址數(shù)據(jù)存取SSSS另外另外5 5個(gè)段寄存器個(gè)段寄存器EAEA有效地址有效地址EAEA(Effective Address)(Effective Address)是匯編程序計(jì)算后得到是匯編程序計(jì)算后得到的地址表達(dá)式的偏移地址。的地址表達(dá)式的偏移地址。 31存儲(chǔ)器尋址方式例存儲(chǔ)器尋址方式例MOV AL, 1000H ;(;(DS : 1000H)的字節(jié))的字節(jié)AL MOV AX, 1000H ;(;(DS : 1000H)的字)的字AXMOV 2000H, BX; BX (DS : 2000H)MOV AX, BX ;(;(DS : BX)的字)的字AXMOV AX,

29、 ES:BX ;(;(ES : BX)的字)的字AXMOV AX, BX-100 ;(;(DS :(BX-100)的字)的字AXMOV BX+ SI ,AX ; AX (DS : (BX+ SI)) MOV AL,BX+ SI+10 ; (DS : (BX+ SI+10))的字節(jié))的字節(jié) AX32匯編語(yǔ)言與匯編程序1 1符號(hào)指令中的表達(dá)式符號(hào)指令中的表達(dá)式操作數(shù)的尋址方式操作數(shù)的尋址方式常用指令常用指令2 2 偽指令偽指令3 34 45 5常用系統(tǒng)功能調(diào)用和常用系統(tǒng)功能調(diào)用和 BIOSBIOS33 數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令 加減運(yùn)算指令加減運(yùn)算指令 邏輯運(yùn)算指令邏輯運(yùn)算指令 移位指令移位指令

30、注:學(xué)習(xí)時(shí)注意注:學(xué)習(xí)時(shí)注意指令格式及功能指令格式及功能3 3 常用指令常用指令34 1. 1.通用數(shù)據(jù)傳送指令通用數(shù)據(jù)傳送指令 格式:格式: MOV destMOV dest, sourcesource 目的操作數(shù)目的操作數(shù) 源操作數(shù)源操作數(shù) 功能:將一個(gè)字節(jié)或一個(gè)字或一個(gè)雙字?jǐn)?shù)據(jù)功能:將一個(gè)字節(jié)或一個(gè)字或一個(gè)雙字?jǐn)?shù)據(jù)從源傳送至目的地址中,源保持不變從源傳送至目的地址中,源保持不變3.1 3.1 數(shù)據(jù)傳送類指令數(shù)據(jù)傳送類指令指令特點(diǎn):將數(shù)據(jù)從一個(gè)部位傳送到另一部位。指令特點(diǎn):將數(shù)據(jù)從一個(gè)部位傳送到另一部位。不影響標(biāo)志寄存器中的狀態(tài)標(biāo)志位。不影響標(biāo)志寄存器中的狀態(tài)標(biāo)志位。35MOVMOV指令指

31、令的的9 9種形式:種形式: MOV REGMOV REG,REGREG MOV REGMOV REG,IMMIMM MOV MEMMOV MEM,IMM IMM MOV MEMMOV MEM,REGREG MOV REGMOV REG,MEMMEM MOV SEGREGMOV SEGREG,REG REG ;CSCS除外除外 MOV REGMOV REG,SEGREGSEGREG MOV SEGREGMOV SEGREG,MEM MEM ;CSCS除外除外 MOV MEMMOV MEM,SEGREGSEGREG3.1 3.1 數(shù)據(jù)傳送類指令數(shù)據(jù)傳送類指令36l一個(gè)指令中,兩操作數(shù)一個(gè)指令中,

32、兩操作數(shù)類型必須一致類型必須一致l至少至少1 1個(gè)操作數(shù)的個(gè)操作數(shù)的類型要明確類型要明確,不能出現(xiàn)二義性,不能出現(xiàn)二義性l代碼段寄存器代碼段寄存器CSCS和和立即數(shù)立即數(shù)均不能作為目的操作數(shù)均不能作為目的操作數(shù)l源操作數(shù)和目的操作數(shù)源操作數(shù)和目的操作數(shù)不能同時(shí)為不能同時(shí)為存儲(chǔ)器操作數(shù)存儲(chǔ)器操作數(shù) l兩個(gè)操作數(shù)類型都不明確,可以使用兩個(gè)操作數(shù)類型都不明確,可以使用PTRPTR運(yùn)算符運(yùn)算符使之合法。使之合法。注意:注意:3.1 3.1 數(shù)據(jù)傳送類指令數(shù)據(jù)傳送類指令37(1)(1)字節(jié)、字和雙字交換指令字節(jié)、字和雙字交換指令格式:格式:XCHG destXCHG dest,sourcesource

33、功能功能: : 將源地址與目的地址中的內(nèi)容互換將源地址與目的地址中的內(nèi)容互換 XCHG REG, REGXCHG REG, REG XCHG REG, MEM XCHG REG, MEM XCHG MEM, REG XCHG MEM, REG3.3.數(shù)據(jù)交換指令數(shù)據(jù)交換指令3.1 3.1 數(shù)據(jù)傳送類指令數(shù)據(jù)傳送類指令38例如,數(shù)據(jù)段中有兩個(gè)字變量例如,數(shù)據(jù)段中有兩個(gè)字變量W1W1和和W2W2,編寫程序段將兩個(gè),編寫程序段將兩個(gè)字變量互換字變量互換 W1 DW 1234HW1 DW 1234H W2 DW 5678H W2 DW 5678H用數(shù)據(jù)交換指令實(shí)現(xiàn):用數(shù)據(jù)交換指令實(shí)現(xiàn): MOV AXM

34、OV AX,W1 W1 ;AX=1234HAX=1234H XCHG AX XCHG AX,W2 W2 ;AX=5678HAX=5678H,W2=1234HW2=1234H MOV W1 MOV W1,AX AX ;W1=5678HW1=5678H僅用僅用MOVMOV指令實(shí)現(xiàn):指令實(shí)現(xiàn): MOV AXMOV AX,W1W1 MOV BX MOV BX,W2W2 MOV W1 MOV W1,BXBX MOV W2 MOV W2,AXAX3.1 3.1 數(shù)據(jù)傳送類指令數(shù)據(jù)傳送類指令394. 4. 棧操作指令棧操作指令堆棧的概念堆棧的概念l堆棧中數(shù)據(jù)的存取遵循堆棧中數(shù)據(jù)的存取遵循“先進(jìn)后出先進(jìn)后出”

35、的原則。的原則。l堆棧的活動(dòng)端稱為堆棧的活動(dòng)端稱為棧頂棧頂,固定端稱為,固定端稱為棧底棧底。 l80 x8680 x86的堆棧的伸展方向是從高地址向低地址。的堆棧的伸展方向是從高地址向低地址。l堆棧操作都是堆棧操作都是字操作字操作, ,進(jìn)棧時(shí)進(jìn)棧時(shí)SPSP自動(dòng)減自動(dòng)減2,2,出棧時(shí)出棧時(shí)SPSP自動(dòng)加自動(dòng)加2 2。 3.1 3.1 數(shù)據(jù)傳送類指令數(shù)據(jù)傳送類指令40(1)(1)進(jìn)棧指令進(jìn)棧指令 格式:格式:PUSH sourcePUSH sourceSP0040HSP003FHSP003EH1234例:例:AX=1234HAX=1234H PUSH AX PUSH AX執(zhí)行執(zhí)行AXAH AL12

36、 34執(zhí)行過(guò)程如下圖:執(zhí)行過(guò)程如下圖:3.1 3.1 數(shù)據(jù)傳送類指令數(shù)據(jù)傳送類指令41(2)(2)出棧指令出棧指令 格式:格式:POP destPOP destBXBH BLSP0040HSP003FH12SP003EH34執(zhí)行執(zhí)行1234例:例:POP BXPOP BX執(zhí)行過(guò)程如下圖:執(zhí)行過(guò)程如下圖:3.1 3.1 數(shù)據(jù)傳送類指令數(shù)據(jù)傳送類指令42使用棧操作指令實(shí)現(xiàn)將數(shù)據(jù)段中兩個(gè)字變量使用棧操作指令實(shí)現(xiàn)將數(shù)據(jù)段中兩個(gè)字變量W1W1和和W2W2互互換的程序段如下:換的程序段如下:PUSH W1PUSH W1PUSH W2PUSH W2POP W1POP W1POP W2POP W23.1 3.

37、1 數(shù)據(jù)傳送類指令數(shù)據(jù)傳送類指令433.1 3.1 數(shù)據(jù)傳送類指令數(shù)據(jù)傳送類指令(3 3)通用寄存器進(jìn)棧)通用寄存器進(jìn)棧PUSHAPUSHA和出棧指令和出棧指令POPAPOPAPUSHAPUSHA指令執(zhí)行的操作是將指令執(zhí)行的操作是將1616位通用寄存器進(jìn)棧,進(jìn)棧次序?yàn)槲煌ㄓ眉拇嫫鬟M(jìn)棧,進(jìn)棧次序?yàn)椋篈XAX、CXCX、DXDX、BXBX、指令執(zhí)行前的、指令執(zhí)行前的SPSP、BPBP、SISI、DIDI。44加減運(yùn)算的操作數(shù):加減運(yùn)算的操作數(shù):注:注:l加減法指令執(zhí)行后的結(jié)果將影響狀態(tài)標(biāo)志加減法指令執(zhí)行后的結(jié)果將影響狀態(tài)標(biāo)志 3.2 3.2 加減運(yùn)算指令加減運(yùn)算指令45 1.1.加法類指令加法類指

38、令 (1 1)加法指令)加法指令A(yù)DDADD格式:格式:ADD destADD dest,sourcesource操作:操作: source + dest dest source + dest dest 即將源操作數(shù)據(jù)與目的操作數(shù)據(jù)相加,結(jié)果存即將源操作數(shù)據(jù)與目的操作數(shù)據(jù)相加,結(jié)果存入目的地址中,源地址內(nèi)容不變?nèi)肽康牡刂分?,源地址?nèi)容不變(2 2)帶進(jìn)位的加法指令)帶進(jìn)位的加法指令A(yù)DCADC格式:格式:ADC destADC dest,sourcesource操作:操作:dest + source + CFdestdest + source + CFdest ; CFCF為前為前面指令產(chǎn)生的

39、面指令產(chǎn)生的CFCF46 格式:格式:INC destINC dest 操作:操作:dest+1destdest+1dest 例:例: MOV BXMOV BX,1 1 INC BX INC BX ; BX=0002HBX=0002Hl操作數(shù)只能為操作數(shù)只能為REGREG和和MEMMEM,類型要明確。,類型要明確。例:例: INC CL INC CL INC SI INC SI 類型不明確類型不明確 INC BYTE PTRSI INC BYTE PTRSI INC 2000H INC 2000H 立即數(shù)沒(méi)有類型立即數(shù)沒(méi)有類型l該指令常用于修改偏移地址和計(jì)數(shù)次數(shù)該指令常用于修改偏移地址和計(jì)數(shù)次

40、數(shù)(3 3)增量指令)增量指令I(lǐng)NCINC47 格式:格式:DEC destDEC dest 操作:操作:destdest1dest1dest(1 1) 減法指令減法指令SUBSUB 2. 2. 減法類指令減法類指令格式:格式:SUB destSUB dest,sourcesource操作:操作:dest dest source destsource dest(2 2)帶借位減指令帶借位減指令SBBSBB格式:格式:SBB destSBB dest,sourcesource操作:操作: dest dest source source CFCF dest ;CFdest ;CF為前面為前面指令產(chǎn)

41、生的進(jìn)位指令產(chǎn)生的進(jìn)位( (借位借位) )(3 3)減量指令減量指令DECDEC48 (3 3)比較指令)比較指令 CMPCMP 格式:格式:CMP destCMP dest,sourcesource 操作操作: : dest dest sourcesourcel 執(zhí)行減操作,執(zhí)行減操作,只只影響標(biāo)志,不改變操作數(shù)影響標(biāo)志,不改變操作數(shù)l 主要用來(lái)判斷兩數(shù)的大小與是否相等主要用來(lái)判斷兩數(shù)的大小與是否相等l 后面常跟條件轉(zhuǎn)移指令,根據(jù)比較結(jié)果實(shí)現(xiàn)程序后面常跟條件轉(zhuǎn)移指令,根據(jù)比較結(jié)果實(shí)現(xiàn)程序的分支的分支49 1.1.求補(bǔ)指令求補(bǔ)指令格式:格式:NEG destNEG dest操作:將操作數(shù)中的內(nèi)

42、容求補(bǔ)后再送入操作數(shù)中操作:將操作數(shù)中的內(nèi)容求補(bǔ)后再送入操作數(shù)中l(wèi)單操作數(shù)指令,操作數(shù)只能是單操作數(shù)指令,操作數(shù)只能是REGREG,MEMMEMl該指令是求補(bǔ)指令,而不是求補(bǔ)碼指令該指令是求補(bǔ)指令,而不是求補(bǔ)碼指令l影響標(biāo)志,影響標(biāo)志,影響規(guī)律同減法指令影響規(guī)律同減法指令3.3 3.3 邏輯運(yùn)算邏輯運(yùn)算指令指令50l若將執(zhí)行求補(bǔ)指令前后的數(shù)均視為補(bǔ)碼數(shù),則求補(bǔ)若將執(zhí)行求補(bǔ)指令前后的數(shù)均視為補(bǔ)碼數(shù),則求補(bǔ)指令將該數(shù)變?yōu)榻^對(duì)值相等符號(hào)相反的另一個(gè)數(shù)。指令將該數(shù)變?yōu)榻^對(duì)值相等符號(hào)相反的另一個(gè)數(shù)。例:例: MOV AXMOV AX,0FFFBH 0FFFBH ; AX=FFFBH AX=FFFBH N

43、EG AX NEG AX ; AX=0005H AX=0005H 例:例: MOV BXMOV BX,000AH 000AH ; BX=000AHBX=000AH NEG BX NEG BX ; BX=FFF6HBX=FFF6H51 格式:格式:NOT NOT destdest操作操作:將操作數(shù)中的內(nèi)容逐位取反后再送回操作數(shù)將操作數(shù)中的內(nèi)容逐位取反后再送回操作數(shù)中中注:注:?jiǎn)尾僮鲾?shù)指令,操作數(shù)只能是單操作數(shù)指令,操作數(shù)只能是REGREG,MEMMEMl該指令只是執(zhí)行求反操作,而不是求反碼指令,該指令只是執(zhí)行求反操作,而不是求反碼指令,對(duì)符號(hào)位也求反對(duì)符號(hào)位也求反l 該指令不影響標(biāo)志位該指令不影

44、響標(biāo)志位2. 2. 求反指令求反指令52 格式:格式:AND destAND dest,sourcesource操作:操作: destsourcedestdestsourcedest作用:作用:取出取出目的操作數(shù)中與源操作數(shù)的目的操作數(shù)中與源操作數(shù)的“1”1”對(duì)應(yīng)的位對(duì)應(yīng)的位例:例:MOV AXMOV AX,0F6E5H0F6E5H AND AX AND AX,000FH 000FH ; AX=0005HAX=0005H3. 3. 邏輯與指令邏輯與指令53 格式:格式:OR destOR dest,sourcesource 操作:操作: dest sourcedestdest sourcede

45、st 作用:將目的操作數(shù)和源操作數(shù)中的所有作用:將目的操作數(shù)和源操作數(shù)中的所有“1”1”位位拼合拼合在一起在一起 例:例:MOV BXMOV BX,7B00H7B00H OR BXOR BX,0056H 0056H ;BX=7B56H BX=7B56H 對(duì)應(yīng)對(duì)應(yīng)“1”1”位置位置1 1,對(duì)應(yīng),對(duì)應(yīng)“0”0”位則不變位則不變4. 4. 邏輯或指令邏輯或指令54 格式:格式:XOR destXOR dest,sourcesource 操作:操作:dest sourcedestdest sourcedest, 作用:將作用:將REGREG清清0 0,也可將目的操作數(shù)中的某些,也可將目的操作數(shù)中的某些

46、位取反位取反 例例: MOV CX, 35EBH: MOV CX, 35EBH XOR CX, 00FFH ; CX=3514H XOR CX, 00FFH ; CX=3514H思考:用什么方法可以實(shí)現(xiàn)對(duì)通用寄存器清思考:用什么方法可以實(shí)現(xiàn)對(duì)通用寄存器清0 0? XOR AXXOR AX,AXAX MOV AX MOV AX,0 0 SUB AX SUB AX,AXAX AND AX AND AX,0 0 5. 5. 邏輯異或指令邏輯異或指令55例例: : 將將AXAX的高的高4 4位位,CX,CX的中間的中間8 8位位,BX,BX的低的低4 4位拼合起來(lái),位拼合起來(lái),程序段如下:程序段如下:

47、如如:AX=1234H,BX=5678H,CX=9ABCHAX=ACCBH:AX=1234H,BX=5678H,CX=9ABCHAX=ACCBH AND AH AND AH,0F0H 0F0H ;??;取AXAX高高4 4位位,AH=10H,AH=10H AND BL AND BL,0FH 0FH ;取;取BXBX低低4 4位位,BL=08H,BL=08H AND CX AND CX,0FF0H 0FF0H ;?。蝗XCX中間中間8 8位位,CX=0AB0H,CX=0AB0H OR CH OR CH,AH ; AH ; 拼字拼字 CH=1AH CH=1AH OR CL OR CL,BL BL

48、;CL=0B8H CX=1AB8HCL=0B8H CX=1AB8H56目的操作數(shù)僅可以是目的操作數(shù)僅可以是REGREG或或MEMMEM源操作數(shù)為源操作數(shù)為移位的次數(shù),只能是移位的次數(shù),只能是CLCL或立即數(shù)或立即數(shù)1 131,31,80868086微處理器的立即數(shù)只能是微處理器的立即數(shù)只能是1 1。 以以CLCL為源操作數(shù)的移位指令執(zhí)行以后為源操作數(shù)的移位指令執(zhí)行以后,CL,CL的值不變的值不變移位指令為雙操作數(shù)指令,用于將目的操作數(shù)中移位指令為雙操作數(shù)指令,用于將目的操作數(shù)中的二進(jìn)制數(shù)移位的二進(jìn)制數(shù)移位3.4 3.4 移位指令移位指令57 格式格式: : SHR destSHR dest,s

49、ourcesource操作操作: : ;最后移出位移至;最后移出位移至CFCF 用用0 0填補(bǔ)已空出的位填補(bǔ)已空出的位 例:例:AL=abcdefghAL=abcdefgh SHR AL SHR AL,1 1 ;執(zhí)行后,;執(zhí)行后,AL=0abcdefgAL=0abcdefg,CF=hCF=h 例:例:AL=abcdefghAL=abcdefgh,CL=3CL=3 SHR AL SHR AL,CL CL ;執(zhí)行后,;執(zhí)行后,AL=000abcdeAL=000abcde,CF=f CF=f destCF01.1.邏輯右移邏輯右移SHRSHR58 格式格式: : SAR destSAR dest,s

50、ourcesource操作操作: ;: ;最后移出位移至最后移出位移至CFCF, 最高位向右移動(dòng)同時(shí)最高位向右移動(dòng)同時(shí) 保持不變保持不變例:例:AL=abcdefghAL=abcdefgh SAR AL SAR AL,1 1 ;執(zhí)行后,;執(zhí)行后,AL=aabcdefgAL=aabcdefg,CF=hCF=hdestCF2.2.算術(shù)右移算術(shù)右移SARSAR59注:注:l邏輯右移邏輯右移SHRSHR一位,等于對(duì)一位,等于對(duì)無(wú)符號(hào)數(shù)除以無(wú)符號(hào)數(shù)除以2 2運(yùn)算運(yùn)算 例例: MOV AL: MOV AL,0CH 0CH ; AL=12AL=12 SHR AL SHR AL,1 1 ; AL=6AL=6l

51、算術(shù)右移算術(shù)右移SARSAR一位一位, ,等于對(duì)等于對(duì)符號(hào)數(shù)除以符號(hào)數(shù)除以2 2運(yùn)算運(yùn)算 例例: MOV CH: MOV CH,80H 80H ;CH=80HCH=80H128128 SAR CH SAR CH,1 1 ;CH=C0HCH=C0H646460 格式格式: : SHL destSHL dest,sourcesource SAL dest SAL dest,sourcesource操作操作: ;: ;最后移出位移至最后移出位移至CFCF 用用0 0填補(bǔ)已空出位填補(bǔ)已空出位 例:例:AL=abcdefghAL=abcdefgh SHL AL SHL AL,1 1 ;執(zhí)行后,;執(zhí)行后,

52、AL=bcdefgh0AL=bcdefgh0,CF=aCF=adestCF03.3.算術(shù)算術(shù)/ /邏輯左移邏輯左移SAL/SHLSAL/SHL61 格式格式: : ROR destROR dest,sourcesource操作操作: ;: ;右邊移出位移入右邊移出位移入CFCF, 同時(shí)移入左邊空出位同時(shí)移入左邊空出位例:例:AL=abcdefghAL=abcdefgh ROR AL ROR AL,1 1 執(zhí)行后,執(zhí)行后,AL=habcdefgAL=habcdefg,CF=h CF=h destCF4.4. 循環(huán)右移循環(huán)右移RORROR62 格式格式: : ROL destROL dest,so

53、urcesource操作操作: ;: ;左邊移出位移入左邊移出位移入CFCF, 同時(shí)移入右邊空出位同時(shí)移入右邊空出位例例: : 將相鄰字節(jié)變量將相鄰字節(jié)變量B1B1(低地址)和(低地址)和B2B2中的兩個(gè)中的兩個(gè)8 8位位二進(jìn)制數(shù)交換二進(jìn)制數(shù)交換 MOV CLMOV CL,8 8 ROL WORD PTR B1 ROL WORD PTR B1,CL CL destCF5.5.循環(huán)左移循環(huán)左移ROLROL63 格式格式: : RCR destRCR dest,sourcesource操作操作: : ;前面指令產(chǎn)生的前面指令產(chǎn)生的CFCF 移至最高位移至最高位 例:例:AL=abcdefghAL=

54、abcdefgh,CF=iCF=i,CL=4CL=4 RCR AL RCR AL,CLCL 執(zhí)行后,執(zhí)行后,AL=fghiabcdAL=fghiabcd,CF=eCF=edestCF6.6. 帶進(jìn)位循環(huán)右移帶進(jìn)位循環(huán)右移RCRRCR64 格式格式: : RCL destRCL dest,sourcesource操作操作: : ;前面指令產(chǎn)生的前面指令產(chǎn)生的CFCF 移至最低位移至最低位 例:例:AL=abcdefghAL=abcdefgh,CF=iCF=i RCL AL RCL AL,1 1 執(zhí)行后,執(zhí)行后,AL=bcdefghiAL=bcdefghi,CF=aCF=adestCF7.7.帶進(jìn)

55、位循環(huán)左移帶進(jìn)位循環(huán)左移RCLRCL65思路:思路:(W)(W)10=(W)10=(W)(2(23 3+2)=(W)+2)=(W)2 23 3+(W)+(W)2 2 16 16位無(wú)符號(hào)數(shù)乘以位無(wú)符號(hào)數(shù)乘以2 2和乘以和乘以8 8分別用左移分別用左移1 1位和左移位和左移3 3位實(shí)現(xiàn)位實(shí)現(xiàn) 16 16位無(wú)符號(hào)乘以位無(wú)符號(hào)乘以2 2有可能大于有可能大于1616位無(wú)符號(hào)數(shù)的最大位無(wú)符號(hào)數(shù)的最大值值6553565535,因此要將它擴(kuò)展為,因此要將它擴(kuò)展為3232位的無(wú)符號(hào)數(shù)再乘以位的無(wú)符號(hào)數(shù)再乘以2 2,即用邏輯左移雙字來(lái)實(shí)現(xiàn)乘以即用邏輯左移雙字來(lái)實(shí)現(xiàn)乘以2 2的操作的操作 例例2 2 編寫程序段將字

56、變量編寫程序段將字變量W W中的無(wú)符號(hào)數(shù)乘以中的無(wú)符號(hào)數(shù)乘以1010,乘,乘積存入變量積存入變量J2J2中中 66W DW 65525J2 DW 0, 0 MOV AX, W XOR DX, DX ;DX清清0,擴(kuò)展為,擴(kuò)展為32位位 SHL AX, 1 ;乘以;乘以2 RCL DX, 1 MOV J2+2, DX ;保存乘以;保存乘以2的結(jié)果的結(jié)果 MOV J2, AX SHL, AX, 1 ;W中的內(nèi)容乘以中的內(nèi)容乘以4 RCL DX, 1 SHL AX, 1 ;W中的內(nèi)容乘以中的內(nèi)容乘以8 RCL DX, 1 ADD J2, AX ;2(W)+8(W) ADC J2+2, DX67該程序

57、的移位指令的執(zhí)行過(guò)程如圖所示: 68 例例3 3 字變量字變量NUMWNUMW中有一無(wú)符號(hào)數(shù),編寫程序中有一無(wú)符號(hào)數(shù),編寫程序, ,計(jì)算計(jì)算(NUMWNUMW) 16+3016+30并將結(jié)果送入并將結(jié)果送入NUMW+2NUMW+2和和NUMWNUMW NUMW DW 1234HNUMW DW 1234H,0 0MOV CL, 4MOV CL, 4 ROL NUMW, CL ROL NUMW, CL ;將;將NUMWNUMW字單元中的字單元中的1234H1234H變成變成2341H2341HMOV AX, 000FHMOV AX, 000FH AND AX, NUMW AND AX, NUMW

58、;取低位字的最低;取低位字的最低4 4位位 AX=0001HAX=0001HAND NUMW, 0FFF0H AND NUMW, 0FFF0H ;清低位字的最低;清低位字的最低4 4位位 (NUMW)=2340H(NUMW)=2340HADD NUMW, 30 ADD NUMW, 30 ;低位字加;低位字加3030 ADC AX, 0 ADC AX, 0 ;將低位字相加的進(jìn)位加入高位字;將低位字相加的進(jìn)位加入高位字 MOV NUMW+2, AXMOV NUMW+2, AX69匯編語(yǔ)言與匯編程序1 13 3符號(hào)指令中的表達(dá)式符號(hào)指令中的表達(dá)式操作數(shù)的尋址方式操作數(shù)的尋址方式常用指令常用指令2 2

59、 偽指令偽指令4 45 5常用系統(tǒng)功能調(diào)用和常用系統(tǒng)功能調(diào)用和 BIOSBIOS70格式:過(guò)程名格式:過(guò)程名 PROCPROCNEARNEAR或或FARFAR 過(guò)程名過(guò)程名 ENDPENDP注:注:lPROCPROC和和ENDPENDP必須成對(duì)出現(xiàn)必須成對(duì)出現(xiàn)lPROCPROC和和ENDPENDP前的過(guò)程名必須有且相同前的過(guò)程名必須有且相同l過(guò)程的類型由過(guò)程的類型由PROCPROC的操作數(shù)確定,默認(rèn)為的操作數(shù)確定,默認(rèn)為NEARNEAR類型類型l由過(guò)程定義偽指令定義的子程序,通過(guò)由過(guò)程定義偽指令定義的子程序,通過(guò)CALLCALL指令調(diào)用指令調(diào)用lPROCPROC和和ENDPENDP之間至少有一

60、條子程序返回指令之間至少有一條子程序返回指令RETRET,以返,以返回調(diào)用它的程序回調(diào)用它的程序4.1 4.1 過(guò)程的定義過(guò)程的定義71格式:格式:段名段名 SEGMENT SEGMENT 定位方式定位方式組合方式組合方式字長(zhǎng)選擇字長(zhǎng)選擇 類別名類別名 段名段名 ENDSENDSlSEGMENTSEGMENT和和ENDSENDS必須成對(duì)出現(xiàn),且前面的必須成對(duì)出現(xiàn),且前面的“段名段名”相同相同l段名用來(lái)表示段地址段名用來(lái)表示段地址4.3 4.3 段的定義段的定義72 用用$ $表示表示,記錄正在被匯編程序翻譯的指令的地址,記錄正在被匯編程序翻譯的指令的地址例:例:DATA SEGMENTDATA

溫馨提示

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

評(píng)論

0/150

提交評(píng)論