匯編語(yǔ)言與匯編程序_第1頁(yè)
匯編語(yǔ)言與匯編程序_第2頁(yè)
匯編語(yǔ)言與匯編程序_第3頁(yè)
匯編語(yǔ)言與匯編程序_第4頁(yè)
匯編語(yǔ)言與匯編程序_第5頁(yè)
已閱讀5頁(yè),還剩117頁(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)指令書(shū)寫的程序。用符號(hào)指令書(shū)寫的程序。5學(xué)習(xí)要點(diǎn)學(xué)習(xí)要點(diǎn)l正確定義各種符號(hào),熟練使用地址表達(dá)式正確定義各種符號(hào),熟練使用地址表達(dá)式l熟練掌握符號(hào)指令的尋址方式熟練掌握符號(hào)指令的尋址方式l掌握符號(hào)指令掌握符號(hào)指令l匯編語(yǔ)言源程序的格式匯編語(yǔ)言源程序的格式l熟練掌握系統(tǒng)功能調(diào)用熟練掌握系統(tǒng)功能調(diào)用6以字母開(kāi)頭的一串字符以字母開(kāi)頭的一串字符為了區(qū)別符號(hào)和數(shù)據(jù),以字母開(kāi)頭的十六進(jìn)制數(shù),為了區(qū)別符號(hào)和數(shù)據(jù),以字母開(kāi)頭的十六進(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)由偽

4、指令定義,有匯編中的各種符號(hào)由偽指令定義,有常量、變量和標(biāo)號(hào)常量、變量和標(biāo)號(hào)三類三類1 1 符號(hào)指令中的表達(dá)式符號(hào)指令中的表達(dá)式7常用的有二進(jìn)制數(shù)、十進(jìn)制常用的有二進(jìn)制數(shù)、十進(jìn)制數(shù)數(shù)、十六進(jìn)制、十六進(jìn)制數(shù)數(shù)和和ASCIIASCII字符字符如:如: 1010B1010B, 1010,0AH0AH, 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ù)值常量8程序中為經(jīng)常使用的數(shù)值取的名。程序中為經(jīng)常使用的數(shù)值取

5、的名。用用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á)式92.2.數(shù)值表達(dá)式數(shù)值表達(dá)式數(shù)字表達(dá)式數(shù)字表達(dá)式由常量與運(yùn)算符組成的有意義的由常量與運(yùn)算符組成的有意義的式子式子,結(jié)果為一數(shù)值。,結(jié)果為一數(shù)值。在匯編語(yǔ)言源程序中,允許對(duì)常量進(jìn)行以下三種類型在匯編語(yǔ)言源程序中,允許對(duì)常量進(jìn)行以下三種類型的運(yùn)算:的運(yùn)算:(1 1)算術(shù)運(yùn)算算術(shù)運(yùn)算 包括,包括,/ /,MODM

6、OD(求余)(求余)(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á)式101.1.標(biāo)號(hào)的標(biāo)號(hào)的三個(gè)屬性三個(gè)屬性 (1 1)段基址段基址定義該標(biāo)號(hào)所在段的段首址的高定義該標(biāo)號(hào)所在段的段首址的高1616位位 (2 2)偏移地址偏移地址標(biāo)號(hào)所在段的段首址到該標(biāo)號(hào)定義指令的標(biāo)號(hào)所在段的段首址到該標(biāo)號(hào)定義指令的字節(jié)距離字節(jié)距離 (3 3)類型類型NEARNEAR和和FAR

7、FAR兩種兩種 NEARNEAR段內(nèi)調(diào)用,段內(nèi)調(diào)用,F(xiàn)ARFAR段間調(diào)用段間調(diào)用標(biāo)號(hào)標(biāo)號(hào)指令地址的符號(hào)表示指令地址的符號(hào)表示1.21.2 標(biāo)號(hào)標(biāo)號(hào)111.21.2 標(biāo)號(hào)標(biāo)號(hào)2.2.標(biāo)號(hào)的定義標(biāo)號(hào)的定義標(biāo)號(hào)只在代碼段中定義和使用,定義的方式有兩種:標(biāo)號(hào)只在代碼段中定義和使用,定義的方式有兩種: (1 1)書(shū)寫在符號(hào)指令前,)書(shū)寫在符號(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)用)用PROCPRO

8、CENDPENDP偽指令偽指令定義過(guò)程名定義過(guò)程名例:例:ABC PROC FAR ;ABC PROC FAR ;定義過(guò)程名定義過(guò)程名ABCABC為為FARFAR型標(biāo)號(hào)型標(biāo)號(hào) ABC ENDP ABC ENDP12在匯編中都使用變量和地址表達(dá)式來(lái)表示存儲(chǔ)器的在匯編中都使用變量和地址表達(dá)式來(lái)表示存儲(chǔ)器的地址。地址。變量變量是存儲(chǔ)器中的數(shù)據(jù)或數(shù)據(jù)區(qū)的符號(hào)表示。是存儲(chǔ)器中的數(shù)據(jù)或數(shù)據(jù)區(qū)的符號(hào)表示。變量名變量名是數(shù)據(jù)的地址或數(shù)據(jù)區(qū)的首地址。是數(shù)據(jù)的地址或數(shù)據(jù)區(qū)的首地址。地址表達(dá)式地址表達(dá)式由變量、標(biāo)號(hào)、寄存器、常量和運(yùn)算符由變量、標(biāo)號(hào)、寄存器、常量和運(yùn)算符組成。組成。寄存器只能是寄存器只能是1616位

9、的位的SISI、DIDI、BXBX、BPBP和和3232位的通用寄存器位的通用寄存器 , ,且寄存器必須位于且寄存器必須位于 中。中。1.3 1.3 變量變量1.1.變量和地址表達(dá)式變量和地址表達(dá)式13(1 1)段基址)段基址定義變量所在段的段首地址的高定義變量所在段的段首地址的高1616位位 由由SEGSEG算符指定算符指定如:如: SEG W SEG W ;取變量;取變量W W的段基址的段基址(2 2)偏移地址)偏移地址變量所在段的段首址到該變量的字節(jié)變量所在段的段首址到該變量的字節(jié)距離距離. .由由OFFSETOFFSET算符指定算符指定如:如: OFFSET W OFFSET W ;取

10、變量;取變量W W的偏移地址的偏移地址2.2.變量的屬性變量的屬性(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 變量變量14數(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ù)雙字

11、數(shù)據(jù)-四個(gè)字節(jié)單元存放四個(gè)字節(jié)單元存放規(guī)定:規(guī)定:(1)(1)“低對(duì)低低對(duì)低, ,高對(duì)高高對(duì)高”(2)(2)低位字節(jié)的地址為字的地址低位字節(jié)的地址為字的地址3.3.變量存儲(chǔ)區(qū)中數(shù)據(jù)的存放變量存儲(chǔ)區(qū)中數(shù)據(jù)的存放1.3 1.3 變量變量15在數(shù)據(jù)段或附加數(shù)據(jù)段中用偽指令定義在數(shù)據(jù)段或附加數(shù)據(jù)段中用偽指令定義 變量名變量名 DBDB 表達(dá)式表達(dá)式, , ;定義字節(jié)變量;定義字節(jié)變量 變量名變量名 DW DW 表達(dá)式表達(dá)式, , ;定義字變量;定義字變量 變量名變量名 DD DD 表達(dá)式表達(dá)式, , ;定義雙字變量;定義雙字變量 變量名變量名 DQ DQ 表達(dá)式表達(dá)式, , ;定義四字變量;定義四字變

12、量 變量名變量名 DT DT 表達(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 變量變量16(1 1)表達(dá)式為常量或數(shù)值表達(dá)式)表達(dá)式為常量或數(shù)值表達(dá)式存入數(shù)值存入數(shù)值 如:如:W1W1 DWDW 1 1(2 2)表達(dá)式為)表達(dá)式為ASCIIASCII字符串字符串 存入存入ASCIIASCII值值 如:如:W2W2 DWDW AB

13、 ;用用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 變量變量17(4 4)地址表達(dá)式)地址表達(dá)式(只適用只適用DW、DD和和DF3個(gè)偽指令個(gè)偽指令) 格式:格式: 變量名變量名 DW DW 地址表達(dá)式地址表達(dá)式 ; ;取其偏移地址取其偏移地址來(lái)初來(lái)初 ; ;始化變量

14、始化變量 變量名變量名 DD DD 地址表達(dá)式地址表達(dá)式 ; ;取取1616位偏移地址和段位偏移地址和段 ; ;基址基址來(lái)初始化其變量來(lái)初始化其變量 變量名變量名 DF DF 地址表達(dá)式地址表達(dá)式 ; ;取取3232位偏移地址和段位偏移地址和段 ; ;基址基址來(lái)初始化其變量來(lái)初始化其變量(5 5)由以上表達(dá)式組成的序列,之間用)由以上表達(dá)式組成的序列,之間用 ,分隔分隔 B5 B5 DBDB 1,2,31,2,3 B6 B6 DBDB 1, ,2, ,3 ; ; 此行的此行的“,”,”不是序列分隔符不是序列分隔符1.3 1.3 變量變量18W1 DW B2 W1 DW B2 ;用;用B2B2的

15、偏移地址初始化的偏移地址初始化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,-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中定義的變量如下:

16、中定義的變量如下:EQ DQ 1234567890ABCDEFHEQ DQ 1234567890ABCDEFHEW DW EW DW ABAB , , CDCD ;用;用DWDW定義,字定義,字符符不超過(guò)不超過(guò)2 2個(gè)個(gè)例例 畫(huà)出數(shù)據(jù)的存儲(chǔ)形式畫(huà)出數(shù)據(jù)的存儲(chǔ)形式1.3 1.3 變量變量19 變量、標(biāo)號(hào)以及由其組成的地址表達(dá)式均有類型屬變量、標(biāo)號(hào)以及由其組成的地址表達(dá)式均有類型屬性。地址表達(dá)式的類型屬性由其中的變量或標(biāo)號(hào)(性。地址表達(dá)式的類型屬性由其中的變量或標(biāo)號(hào)(一一個(gè)地址表達(dá)式不可能同時(shí)含有變量和標(biāo)號(hào)個(gè)地址表達(dá)式不可能同時(shí)含有變量和標(biāo)號(hào))決定。不)決定。不含變量或標(biāo)號(hào),僅含寄存器的地址表達(dá)式

17、沒(méi)有類型屬含變量或標(biāo)號(hào),僅含寄存器的地址表達(dá)式?jīng)]有類型屬性??梢允褂眯浴?梢允褂肞TRPTR算符臨時(shí)變更原地址表達(dá)式的類型屬算符臨時(shí)變更原地址表達(dá)式的類型屬性性, ,或者明確沒(méi)有類型屬性的地址表達(dá)式的類型,而仍或者明確沒(méi)有類型屬性的地址表達(dá)式的類型,而仍保持保持它們?cè)瓉?lái)的段基址和偏移地址屬性不變。它們?cè)瓉?lái)的段基址和偏移地址屬性不變。格式:格式: 類型類型 PTR PTR 地址表達(dá)式地址表達(dá)式如:如:BYTEBYTE PTR BX+5 PTR BX+5 ;明確類型;明確類型 WORDWORD PTR B2 PTR B2 ;臨時(shí)變更;臨時(shí)變更5. 5. 地址表達(dá)式類型的變更地址表達(dá)式類型的變更1.

18、3 1.3 變量變量20例:例: B DB 3B DB 3 W W DW 1122HDW 1122H WORD PTR B ;WORD PTR B ;將將B B臨時(shí)改變?yōu)樽诸愋团R時(shí)改變?yōu)樽诸愋?BYTEBYTE PTRPTR W ;W ;將將W W臨時(shí)改變?yōu)樽止?jié)類型臨時(shí)改變?yōu)樽止?jié)類型例:例: BYTEBYTE PTRPTR BXBX ;寄存器有類型屬性,不能變更寄存器有類型屬性,不能變更 BYTEBYTE PTRPTR BXBX 1.3 1.3 變量變量21匯編語(yǔ)言與匯編程序1 13 3符號(hào)指令中的表達(dá)式符號(hào)指令中的表達(dá)式操操作作數(shù)數(shù)的尋址方式的尋址方式常用指令常用指令4 4 偽指令偽指令2

19、25 5常用系統(tǒng)功能調(diào)用和常用系統(tǒng)功能調(diào)用和 BIOSBIOS22符號(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ù)的存放地址 尋址方式尋址方式根據(jù)操作數(shù)尋找操作數(shù)據(jù)(或數(shù)據(jù)的存放)地址根據(jù)操作數(shù)尋找操作數(shù)據(jù)(或數(shù)據(jù)的存放)地址的方式的方式尋址方式可分為三大類:尋址方式可分為三大類: 立即尋址:操作數(shù)就是

20、操作數(shù)據(jù)立即尋址:操作數(shù)就是操作數(shù)據(jù) 寄存器尋址:操作數(shù)是寄存器名寄存器尋址:操作數(shù)是寄存器名 存儲(chǔ)器尋址存儲(chǔ)器尋址 :操作數(shù)是地址表達(dá)式:操作數(shù)是地址表達(dá)式2 2 操操作作數(shù)數(shù)的尋址方式的尋址方式23操作數(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,DL8A

21、H,AL,BH,BL,CH,CL,DH,DL8位通用寄存器位通用寄存器AX,BX,CX,DX,SI,DI,BP,SP16AX,BX,CX,DX,SI,DI,BP,SP16位通用寄存器位通用寄存器EAX,EBX,ECX,EDX,ESI,EDI,EBP,ESP32EAX,EBX,ECX,EDX,ESI,EDI,EBP,ESP32位通用寄存器位通用寄存器傳送指令傳送指令助記符助記符目的操目的操作數(shù)作數(shù)源操作源操作數(shù)數(shù)24操作數(shù)即為操作數(shù)據(jù),操作數(shù)即為操作數(shù)據(jù),操作數(shù)據(jù)就操作數(shù)據(jù)就在指令中在指令中l(wèi)立即尋址方式只能用于源操作數(shù),主要用來(lái)給寄存立即尋址方式只能用于源操作數(shù),主要用來(lái)給寄存器或存儲(chǔ)器賦初值

22、器或存儲(chǔ)器賦初值 例:例:MOV 5,AL MOV 5,AL l立即數(shù)沒(méi)有類型屬性立即數(shù)沒(méi)有類型屬性2. 2. 立即尋址立即尋址例:例:MOV AL,5 ;MOV AL,5 ;將字節(jié)將字節(jié)05H05H送送ALAL,AL=05HAL=05H MOV AX,18 ; MOV AX,18 ;將字將字0012H0012H送送AXAX,AX=0012HAX=0012H MOV BL, MOV BL,1 ;1 ;將字節(jié)將字節(jié)FFHFFH送送BLBL,BL=0FFHBL=0FFH25操作數(shù)據(jù)在存儲(chǔ)器中,其操作數(shù)據(jù)在存儲(chǔ)器中,其偏移地址由指令直接給偏移地址由指令直接給出出( (地址表達(dá)式中只有變量名和常量)地

23、址表達(dá)式中只有變量名和常量)3. 3. 直接尋址直接尋址地址表達(dá)式為:地址表達(dá)式為:變量名變量名 或或 變量名變量名+ +常量常量l段地址默認(rèn)在段地址默認(rèn)在DSDS中中 例:例:MOV AX,W MOV AX,W 該指令的源操作數(shù)的地址為該指令的源操作數(shù)的地址為 DSDS:OFFSET WOFFSET W26l直接尋址常用已定義的變量表示直接尋址常用已定義的變量表示 例:例:W2 DW W2 DW 5 5,1994H1994H MOV AX, W2 MOV AX, W2 ; AX=FFFBHAX=FFFBH MOV BX MOV BX,W2W22 2 ; BXBX1994H1994Hl區(qū)分立即

24、尋址與直接尋址區(qū)分立即尋址與直接尋址 從變量中取數(shù)據(jù)屬于直接尋址方式,注意與符號(hào)從變量中取數(shù)據(jù)屬于直接尋址方式,注意與符號(hào)常量區(qū)別常量區(qū)別 例:例:AA EQU 10AA EQU 10 MOV AX MOV AX,AA AA ;立即尋址,;立即尋址,AX=000AHAX=000AH MOV BX MOV BX,AA+5 AA+5 ;立即尋址,;立即尋址,BX=000FHBX=000FH27若若BX=0124HBX=0124H, MOVMOV CX,BX ;CX,BX ;間接尋址間接尋址,CX=1958H,CX=1958H MOV MOV AX,BXAX,BX ; ;寄存器尋址,寄存器尋址,AX

25、=0124HAX=0124H 操作數(shù)操作數(shù)為帶方括號(hào)的寄存器為帶方括號(hào)的寄存器:SISI,DIDI,BXBX,BP,EAXESPBP,EAXESP寄存器的內(nèi)容為操作數(shù)據(jù)的偏移地址寄存器的內(nèi)容為操作數(shù)據(jù)的偏移地址4. 4. 間接尋址間接尋址28間接尋址只有一種形式間接尋址只有一種形式 寄存器寄存器 l間接尋址屬于存儲(chǔ)器尋址,間接尋址屬于存儲(chǔ)器尋址,寄存器內(nèi)容為操作數(shù)據(jù)寄存器內(nèi)容為操作數(shù)據(jù)的偏移地址的偏移地址。寄存器尋址中,寄存器內(nèi)容即為操作。寄存器尋址中,寄存器內(nèi)容即為操作數(shù)據(jù)。數(shù)據(jù)。l只有只有SI,DI,BX,BPSI,DI,BX,BP和和3232位的寄存器可用于間接尋址。位的寄存器可用于間接

26、尋址。 例:例: MOV AXMOV AX,ECX ECX MOV AX MOV AX,CXCX l若用若用BPBP、EBPEBP、ESPESP間址,間址,約定段寄存器為約定段寄存器為SSSS;否則,否則,約定段寄存器為約定段寄存器為DSDS。 例:例:MOV AX, BX ;(DS:BX)MOV AX, BX ;(DS:BX)AX AX l 例:例:MOV AX, BP ;(SS:BP)MOV AX, BP ;(SS:BP)AXAX 29 操作數(shù)據(jù)在存儲(chǔ)器中,其操作數(shù)據(jù)在存儲(chǔ)器中,其偏移地址為偏移地址為基址寄存器基址寄存器(BXBX或或BPBP或或3232位的寄存器)的內(nèi)容與變量的偏移地址、

27、常位的寄存器)的內(nèi)容與變量的偏移地址、常量之和量之和: : 變量名變量名+ +基址寄存器基址寄存器+ +常量常量 或或 變量名變量名 基基址址寄寄存存器器+ +常量常量 例例: MOV BL,2BX: MOV BL,2BX 或或 MOV BL,BX+2MOV BL,BX+2 ;(DS:BX+2);(DS:BX+2)BLBL例:例: MOV 6BP,AXMOV 6BP,AX 或或 MOV BP+6,AX ; MOV BP+6,AX ; AXAXSS:BP+6SS:BP+6 段寄存器的確定,首先由變量確定;若無(wú)變量,則由寄存器段寄存器的確定,首先由變量確定;若無(wú)變量,則由寄存器確定,寄存器確定的原

28、則同間址。確定,寄存器確定的原則同間址。5. 5. 基址尋址基址尋址30以以BXBX的內(nèi)容作基地址,的內(nèi)容作基地址,字字變量變量W1W1的偏移地址為的偏移地址為位移量位移量或者或者以以字變量字變量W1W1的偏移地址的偏移地址作基地址,作基地址,BXBX的內(nèi)容的內(nèi)容看作該變量數(shù)據(jù)區(qū)的看作該變量數(shù)據(jù)區(qū)的位移量位移量 所以所以 AL=19H AL=19H例如:例如:MOV AL,BYTE PTRBX+W1 MOV AL,BYTE PTRBX+W1 或者或者 MOV AL,BYTEMOV AL,BYTE PTR W1BXPTR W1BX 316. 6. 變址尋址變址尋址操作數(shù)據(jù)在存儲(chǔ)器中,其偏移地址為

29、操作數(shù)據(jù)在存儲(chǔ)器中,其偏移地址為變址寄存器(變址寄存器(SISI、DIDI或或3232位的寄存器)位的寄存器)的內(nèi)容與的內(nèi)容與變量的偏移地址、常變量的偏移地址、常量量之和。之和。 例:例:MOV AX,2SI MOV AX,2SI 或或 MOV AX,SI+2 MOV AX,SI+2 執(zhí)行的操作是執(zhí)行的操作是(DS:SI+2) AX(DS:SI+2) AX段寄存器的確定,首先由變量確定;若無(wú)變量,則由段寄存器的確定,首先由變量確定;若無(wú)變量,則由寄存器確定,寄存器確定的原則同間址。寄存器確定,寄存器確定的原則同間址。 327. 7. 基址變址尋址基址變址尋址 例例: MOV AX,4 BX+D

30、I: 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ú)變段寄存器的確定,首先由變量確定;若無(wú)變量,則由基址寄存器確定,基量,則由基址寄存器確定,基址址寄存器確定的原寄存器確定的原則同間址。則同間址。 基址寄存器和變址寄存器的位數(shù)要相同?;芳拇嫫骱妥冎芳拇嫫鞯奈粩?shù)要相同。操作數(shù)據(jù)在存儲(chǔ)器中,其偏移地址為指令中指定操作數(shù)據(jù)在存儲(chǔ)器中,其偏移地址為指令中指定的基址寄存器和變址寄存器的內(nèi)容的基址寄存器和變址寄存器的內(nèi)容與與變量的偏移變量的偏移地址、常量地址、

31、常量之和。之和。33例:例:W W為一字變量,為一字變量,B B為一字節(jié)變量,則:為一字節(jié)變量,則: MOV ALMOV AL,WBX WBX MOV AL MOV AL,BYTE PTR WBX BYTE PTR WBX MOV AXMOV AX,BSI+5 BSI+5 MOV AX MOV AX,WORD PTR BSI+5 WORD PTR BSI+5 在符號(hào)指令中的基址,變址,基址變址三種尋址在符號(hào)指令中的基址,變址,基址變址三種尋址中,其中,其位移量可以是常數(shù)或符號(hào)常量,還可以是變位移量可以是常數(shù)或符號(hào)常量,還可以是變量名量名。若是變量名,它給出變量所在段的偏移地址,。若是變量名,它

32、給出變量所在段的偏移地址,其意義是其意義是取變量單元中的數(shù)據(jù)取變量單元中的數(shù)據(jù),所以其,所以其類型要與另類型要與另一操作數(shù)的類型一致。一操作數(shù)的類型一致。34 例:將立即數(shù)例:將立即數(shù)35H35H存入字節(jié)變量存入字節(jié)變量BUF+5BUF+5單元中單元中直接尋址直接尋址:MOV BUF+5:MOV BUF+5,35H35H間接尋址間接尋址: :MOV BX, OFFSET BUF+5MOV BX, OFFSET BUF+5 MOV BYTE PTRBX,35H MOV BYTE PTRBX,35H基址尋址基址尋址: :MOV BX, 5MOV BX, 5 MOV BUFBX,35H MOV BU

33、FBX,35H ;常用間址、基址常用間址、基址/ /變址訪問(wèn)一片連續(xù)的單元變址訪問(wèn)一片連續(xù)的單元 例:例:B1 DB B1 DB AB$AB$ MOV AL, MOV AL, B1B1BX BX ;ALAL41H41H MOV AH, MOV AH, B1B1BXBX1 1 ;AHAH42H42H358. 8. 比例變址尋址比例變址尋址 例例: : MOV EBX,ESIMOV EBX,ESI44 注:比例因子可為且只可為注:比例因子可為且只可為1 1、2 2、4 4、8 8操作數(shù)據(jù)在存儲(chǔ)器中,其偏移地址為指令中給出操作數(shù)據(jù)在存儲(chǔ)器中,其偏移地址為指令中給出的含有變址寄存器的含有變址寄存器比例

34、因子的地址表達(dá)式的偏比例因子的地址表達(dá)式的偏移地址移地址369. 9. 基址比例變址尋址基址比例變址尋址 可將基址變址尋址看作是比例因子為可將基址變址尋址看作是比例因子為1 1的基的基址比例變址尋址。如:址比例變址尋址。如: MOV ECX,EDIMOV ECX,EDI8+EAX8+EAX MOV EAX,ESIMOV EAX,ESI8+EBX8+EBX操作數(shù)據(jù)在存儲(chǔ)器中,其偏移地址為指令給出的操作數(shù)據(jù)在存儲(chǔ)器中,其偏移地址為指令給出的地址表達(dá)式的偏移地址,地址表達(dá)式中既有一個(gè)地址表達(dá)式的偏移地址,地址表達(dá)式中既有一個(gè)基址寄存器又含有變址寄存器基址寄存器又含有變址寄存器比例因子比例因子37(

35、(1 1) )存儲(chǔ)器尋址與地址表達(dá)式存儲(chǔ)器尋址與地址表達(dá)式地址表達(dá)式的一般形式是:地址表達(dá)式的一般形式是:變量變量 基址寄存器基址寄存器+ +變址寄存器變址寄存器比例因子比例因子+ +常量常量 也可表示為:也可表示為: 基址寄存器基址寄存器+ +變址寄存器變址寄存器比例因子比例因子+ +變量變量+ +常量常量 其他尋址方式都是其他尋址方式都是一般形式一般形式的不完整形式的不完整形式: : 直接尋址直接尋址: :變量變量+ +常量常量 或或 變量變量+ +常量常量 間接尋址間接尋址: : 寄存器寄存器 基址或變址尋址基址或變址尋址: :變量變量 寄存器寄存器+ +常量常量 或或變量變量/ /常量

36、常量 寄存器寄存器 基址變址尋址基址變址尋址: :變量變量 基址寄存器基址寄存器+ +變址寄存器變址寄存器+ +常量常量 或基址寄存器或基址寄存器+ +變址寄存器變址寄存器+ +變量變量+ +常量常量 比例變址尋址比例變址尋址: :變量變量 變址寄存器變址寄存器比例因子比例因子+ +常量常量 或變址寄存器或變址寄存器比例因子比例因子+ +變量變量+ +常量常量 10. 10. 存儲(chǔ)器尋址及存儲(chǔ)器中段基址或段選擇字的確定存儲(chǔ)器尋址及存儲(chǔ)器中段基址或段選擇字的確定38(2)(2)存儲(chǔ)器尋址中段寄存器的確定存儲(chǔ)器尋址中段寄存器的確定存儲(chǔ)器尋址時(shí)段寄存器的存儲(chǔ)器尋址時(shí)段寄存器的基本約定和段更換基本約定

37、和段更換見(jiàn)下表:見(jiàn)下表:存儲(chǔ)器存取方式存儲(chǔ)器存取方式約定段寄存器約定段寄存器 段更換段更換偏移地址偏移地址取指令取指令CSCS不允許不允許IPIP、EIPEIP堆棧操作堆棧操作SSSS不允許不允許SPSP、ESPESP數(shù)據(jù)存取數(shù)據(jù)存取(BP(BP、EBPEBP和和ESPESP間址、基間址、基址除外址除外) )DSDS另外另外5 5個(gè)段寄存器個(gè)段寄存器EAEABPBP、EBPEBP和和ESPESP間址、基址數(shù)據(jù)存取間址、基址數(shù)據(jù)存取SSSS另外另外5 5個(gè)段寄存器個(gè)段寄存器EAEA字符串處理指令的源串字符串處理指令的源串DSDSES CS SSES CS SSSISI、ESIESI字符串處理指令

38、的目的串字符串處理指令的目的串ESES不允許不允許DIDI、EDIEDI有效地址有效地址EAEA(Effective(Effective Address) Address)是匯編程序計(jì)算后得到是匯編程序計(jì)算后得到的地址表達(dá)式的偏移地址。的地址表達(dá)式的偏移地址。 39例如例如: MOV ES:DI, AL : MOV ES:DI, AL ;AL ES:DIAL ES:DI其中其中ESES為前綴字節(jié),產(chǎn)生目標(biāo)代碼時(shí),它將放在這條為前綴字節(jié),產(chǎn)生目標(biāo)代碼時(shí),它將放在這條MOVMOV指令的前面:指令的前面: 26 ES26 ES: 8805 MOV8805 MOVDIDI,ALAL其中符號(hào)指令前其中符

39、號(hào)指令前3 3個(gè)字節(jié)的十六進(jìn)制數(shù)個(gè)字節(jié)的十六進(jìn)制數(shù)26 88 0526 88 05是符是符號(hào)指令號(hào)指令MOV ES:MOV ES:DIDI,ALAL的目標(biāo)代碼,即機(jī)器指令。的目標(biāo)代碼,即機(jī)器指令。 段超越或段更換是在地址表達(dá)式前寫上段名或段寄段超越或段更換是在地址表達(dá)式前寫上段名或段寄存器來(lái)表示的。存器來(lái)表示的。(3)(3) 段超越或段更換段超越或段更換40匯編語(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)用和 BIOSBIOS41 數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令 加減運(yùn)算

40、指令加減運(yùn)算指令 邏輯運(yùn)算指令邏輯運(yùn)算指令 移位指令移位指令 注:學(xué)習(xí)時(shí)注意注:學(xué)習(xí)時(shí)注意指令格式及功能指令格式及功能3 3 常用指令常用指令42 1. 1.通用數(shù)據(jù)傳送指令通用數(shù)據(jù)傳送指令 格式:格式: MOV MOV destdest, 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)

41、標(biāo)志位。不影響標(biāo)志寄存器中的狀態(tài)標(biāo)志位。43MOVMOV指令指令的的9 9種形式:種形式:MOV REGMOV REG,REGREGMOV REGMOV REG,IMMIMMMOV MEMMOV MEM,IMM IMM MOV MEMMOV MEM,REGREGMOV REGMOV REG,MEMMEMMOV SEGREGMOV SEGREG,REG REG ;CSCS除外除外MOV REGMOV REG,SEGREGSEGREGMOV SEGREGMOV SEGREG,MEM MEM ;CSCS除外除外MOV MEMMOV MEM,SEGREGSEGREG3.1 3.1 數(shù)據(jù)傳送類指令數(shù)據(jù)傳

42、送類指令44l一個(gè)指令中,兩操作數(shù)一個(gè)指令中,兩操作數(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存儲(chǔ)器操作數(shù)的類型由地址表達(dá)式的變量名確定存儲(chǔ)器操作數(shù)的類型由地址表達(dá)式的變量名確定l立即數(shù)的類型不明確立即數(shù)的類型不明確, ,不含變量名的地址表達(dá)式不含變量名的地址表達(dá)式的類型也不明確。在立即數(shù)送存儲(chǔ)器的指令中的類型也不明確。在立即數(shù)送存儲(chǔ)器的指令中,

43、 ,若存儲(chǔ)器操作數(shù)是不含變量名的地址表達(dá)式若存儲(chǔ)器操作數(shù)是不含變量名的地址表達(dá)式, ,則則必需使用必需使用PTRPTR來(lái)明確其中一個(gè)操作數(shù)的類型。來(lái)明確其中一個(gè)操作數(shù)的類型。注意:注意:3.1 3.1 數(shù)據(jù)傳送類指令數(shù)據(jù)傳送類指令45(1 1)符號(hào)位擴(kuò)展傳送指令)符號(hào)位擴(kuò)展傳送指令格式:格式: MOVSX MOVSX regreg,sourcesource功能功能: : 對(duì)源操作數(shù)中的對(duì)源操作數(shù)中的8 8位或位或1616位補(bǔ)碼數(shù)的符號(hào)位進(jìn)行擴(kuò)位補(bǔ)碼數(shù)的符號(hào)位進(jìn)行擴(kuò)展,形成展,形成1616位或位或3232位補(bǔ)碼數(shù)位補(bǔ)碼數(shù)如如: : MOVSX EAX MOVSX EAX,BXBX ; ;若若BX

44、=8765HBX=8765H, ,則則EAX=FFFF8765HEAX=FFFF8765H(2 2)零擴(kuò)展傳送指令)零擴(kuò)展傳送指令格式:格式: MOVZX MOVZX regreg,source source 功能功能: :對(duì)源操作數(shù)中的對(duì)源操作數(shù)中的8 8位或位或1616位無(wú)符號(hào)數(shù)進(jìn)行擴(kuò)展,形成位無(wú)符號(hào)數(shù)進(jìn)行擴(kuò)展,形成1616位或位或3232位無(wú)符號(hào)數(shù)位無(wú)符號(hào)數(shù)如:如:MOVZX EAXMOVZX EAX,BLBL ; ;若若BL=65HBL=65H,則,則EAX=00000065HEAX=00000065H2.2.擴(kuò)展傳送指令擴(kuò)展傳送指令3.1 3.1 數(shù)據(jù)傳送類指令數(shù)據(jù)傳送類指令46(1

45、)(1)字節(jié)、字和雙字交換指令字節(jié)、字和雙字交換指令格式:格式:XCHG XCHG destdest,sourcesource 功能功能: : 將源地址與目的地址中的內(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ù)傳送類指令47例如,數(shù)據(jù)段中有兩個(gè)字變量例如,數(shù)據(jù)段中有兩個(gè)字變量W1W1和和W2W2,編寫程序段將兩個(gè),編寫程序段將兩個(gè)字變量互換字變量互換 W1 DW 1234

46、HW1 DW 1234H W2 DW 5678H W2 DW 5678H用數(shù)據(jù)交換指令實(shí)現(xiàn):用數(shù)據(jù)交換指令實(shí)現(xiàn): MOV AXMOV 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ù)

47、傳送類指令483.1 3.1 數(shù)據(jù)傳送類指令數(shù)據(jù)傳送類指令(2)32(2)32位通用寄存器中位通用寄存器中4 4字節(jié)交換(字節(jié)交換(Byte SwapByte Swap)指令)指令指令格式指令格式 BSWAP BSWAP regreg指令的意義是把指令的意義是把3232位通用寄存器的第位通用寄存器的第1 1字節(jié)與第字節(jié)與第4 4字字節(jié)交換,第節(jié)交換,第2 2字節(jié)與第字節(jié)與第3 3字節(jié)交換。如指令:字節(jié)交換。如指令: BSWAP EAXBSWAP EAX若執(zhí)行前若執(zhí)行前EAX=12345678H,EAX=12345678H,指令執(zhí)行后指令執(zhí)行后EAX=78563412HEAX=78563412H

48、。使用字節(jié)交換指令,將數(shù)據(jù)段中以使用字節(jié)交換指令,將數(shù)據(jù)段中以BXBX為偏移地址的為偏移地址的連續(xù)四單元的內(nèi)容顛倒過(guò)來(lái),編寫的程序段如下:連續(xù)四單元的內(nèi)容顛倒過(guò)來(lái),編寫的程序段如下: MOV EAXMOV EAX,BXBX BSWAP EAX BSWAP EAX MOV BX MOV BX,EAXEAX494. 4. 棧操作指令棧操作指令堆棧的概念堆棧的概念l堆棧中數(shù)據(jù)的存取遵循堆棧中數(shù)據(jù)的存取遵循“先進(jìn)后出先進(jìn)后出”的原則。的原則。l堆棧的活動(dòng)端稱為棧頂,固定端稱為棧底。堆棧的活動(dòng)端稱為棧頂,固定端稱為棧底。 l80 x8680 x86的堆棧的伸展方向是從高地址向低地址。的堆棧的伸展方向是從

49、高地址向低地址。l堆棧操作都是堆棧操作都是字或雙字操作字或雙字操作, ,進(jìn)棧時(shí)進(jìn)棧時(shí)SPSP自動(dòng)減自動(dòng)減2/4,2/4,出棧時(shí)出棧時(shí)SPSP自動(dòng)加自動(dòng)加2/42/4。 3.1 3.1 數(shù)據(jù)傳送類指令數(shù)據(jù)傳送類指令50(1)(1)進(jìn)棧指令進(jìn)棧指令 格式:格式:PUSH sourcePUSH sourceSP0040HSP003FHSP003EH1234例:例:AX=1234HAX=1234H PUSH AX PUSH AX執(zhí)行執(zhí)行AXAH AL12 34執(zhí)行過(guò)程如下圖:執(zhí)行過(guò)程如下圖:3.1 3.1 數(shù)據(jù)傳送類指令數(shù)據(jù)傳送類指令51(2)(2)出棧指令出棧指令 格式:格式:POP POP des

50、tdestBXBH BLSP0040HSP003FH12SP003EH34執(zhí)行執(zhí)行1234例:例:POP BXPOP BX執(zhí)行過(guò)程如下圖:執(zhí)行過(guò)程如下圖:3.1 3.1 數(shù)據(jù)傳送類指令數(shù)據(jù)傳送類指令52使用棧操作指令實(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.1 數(shù)據(jù)傳送類指令數(shù)據(jù)傳送類指令533.1 3.1 數(shù)據(jù)傳送類指令數(shù)據(jù)傳送類指令(3 3)通用寄存器進(jìn)棧)通用寄存器進(jìn)棧PUSHA/PUSHADPUS

51、HA/PUSHAD和出棧指令和出棧指令POPA/POPADPOPA/POPADPUSHAPUSHA指令執(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。543.1 3.1 數(shù)據(jù)傳送類指令數(shù)據(jù)傳送類指令PUSHADPUSHAD指令執(zhí)行的操作是將指令執(zhí)行的操作是將3232位通用寄存器進(jìn)棧,位通用寄存器進(jìn)棧,進(jìn)棧次序?yàn)椋哼M(jìn)棧次序?yàn)椋篍AXEAX、ECXECX、EDXEDX、EBXEBX、ESP(ESP(指令執(zhí)行前指令執(zhí)行前的值的值) )、EBPEB

52、P、ESIESI、EDIEDI,指令執(zhí)行后,指令執(zhí)行后ESP-32ESP-32。(4)(4)標(biāo)志寄存器進(jìn)棧和出棧指令標(biāo)志寄存器進(jìn)棧和出棧指令1616位標(biāo)志寄存器進(jìn)棧位標(biāo)志寄存器進(jìn)棧/ /出棧指令:出棧指令:PUSHF/POPFPUSHF/POPF3232位標(biāo)志寄存器進(jìn)棧位標(biāo)志寄存器進(jìn)棧/ /出棧指令:出棧指令:PUSHFD/POPFDPUSHFD/POPFD55加減運(yùn)算的操作數(shù):加減運(yùn)算的操作數(shù):注:注:l兩操作數(shù)需類型相同,不能同為存儲(chǔ)器兩操作數(shù)需類型相同,不能同為存儲(chǔ)器l加減法指令執(zhí)行后的結(jié)果將影響狀態(tài)標(biāo)志加減法指令執(zhí)行后的結(jié)果將影響狀態(tài)標(biāo)志 3.2 3.2 加減運(yùn)算指令加減運(yùn)算指令56

53、1.1.加法類指令加法類指令 (1 1)加法指令)加法指令A(yù)DDADD格式:格式:ADD ADD destdest,sourcesource操作:操作: source + source + destdest destdest 即將源操作數(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 ADC destdest,sourcesource操作:操作:destdest + source + + source + CFdestCFdest ; CFCF

54、為前為前面指令產(chǎn)生的面指令產(chǎn)生的CFCF57例例 3 3個(gè)個(gè)3232位無(wú)符號(hào)數(shù)位無(wú)符號(hào)數(shù)12345678H12345678H、8765ABCDH8765ABCDH和和2468FEDCH2468FEDCH相加,相加,其和(仍為其和(仍為3232位無(wú)符號(hào)數(shù))存入雙字變量位無(wú)符號(hào)數(shù))存入雙字變量EQEQ中。用中。用1616位通用位通用寄存器編寫的程序段如下程序段如下:寄存器編寫的程序段如下程序段如下: MOV DXMOV DX,1234H1234H MOV AX MOV AX,5678H5678H ADD AX ADD AX,0ABCDH 0ABCDH ADC DX ADC DX,8765H8765

55、H ADD AX ADD AX,0FEDCH0FEDCH ADC DX ADC DX,2468H2468H MOV WORD PTR EQ,AX MOV WORD PTR EQ,AX MOV WORD PTR EQ+2,DX MOV WORD PTR EQ+2,DX58用用3232位通用寄存器編寫的程序段如下:位通用寄存器編寫的程序段如下:MOV EAXMOV EAX,12345678H12345678HADD EAXADD EAX,8765ABCDH8765ABCDHADD EAXADD EAX,2468FEDCH2468FEDCHMOV EQ,EAXMOV EQ,EAX59 格式:格式:I

56、NC INC destdest 操作:操作:dest+1destdest+1dest 例:例: MOV BXMOV BX,1 1 INC BX INC BX ; BX=0002HBX=0002Hl該指令該指令不影響不影響CFCF,對(duì)其它標(biāo)志位的影響同,對(duì)其它標(biāo)志位的影響同 ADD dest,1 ADD dest,1l操作數(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)有類型

57、立即數(shù)沒(méi)有類型l該指令常用于修改偏移地址和計(jì)數(shù)次數(shù)該指令常用于修改偏移地址和計(jì)數(shù)次數(shù)(3 3)增量指令)增量指令I(lǐng)NCINC60 格式:格式:DEC DEC destdest 操作:操作:destdest1dest1dest(1 1) 減法指令減法指令SUBSUB 2. 2. 減法類指令減法類指令格式:格式:SUB SUB destdest,sourcesource操作:操作:destdest source source destdest(2 2)帶借位減指令帶借位減指令SBBSBB格式:格式:SBB SBB destdest,sourcesource操作:操作: destdest sourc

58、e source CFCF destdest ;CF ;CF為前面為前面指令產(chǎn)生的進(jìn)位指令產(chǎn)生的進(jìn)位( (借位借位) )(3 3)減量指令減量指令DECDEC61例:例:2 2個(gè)個(gè)3232位無(wú)符號(hào)數(shù)位無(wú)符號(hào)數(shù)8765ABCDH 8765ABCDH 和和2468FEDCH2468FEDCH相減,其差放雙相減,其差放雙字變量字變量EQEQ中。用中。用1616位通用寄存器編寫的程序段如下:位通用寄存器編寫的程序段如下: MOV AX MOV AX,0ABCDH0ABCDH SUB AX SUB AX,0FEDCH0FEDCH MOV DX MOV DX,8765H8765H SBB DX SBB D

59、X,2468H2468H MOV WORD PTR EQ,AX MOV WORD PTR EQ,AX MOV WORD PTR EQ+2,DX MOV WORD PTR EQ+2,DX用用3232位通用寄存器編寫的程序段如下:位通用寄存器編寫的程序段如下: MOV EAX MOV EAX,8765ABCDH8765ABCDH SUB EAX SUB EAX,2468FEDCH2468FEDCH MOV EQ,EAX MOV EQ,EAX62 (3 3)比較指令)比較指令 CMPCMP 格式:格式:CMP CMP destdest,sourcesource 操作操作: : destdest so

60、urcesourcel 執(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)程序的分支的分支63 1.1.求補(bǔ)指令求補(bǔ)指令格式:格式:NEG NEG destdest操作:將操作數(shù)中的內(nèi)容求補(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ī)

溫馨提示

  • 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)論