x86的尋址方式與基本指令.ppt
《x86的尋址方式與基本指令.ppt》由會員分享,可在線閱讀,更多相關(guān)《x86的尋址方式與基本指令.ppt(54頁珍藏版)》請在裝配圖網(wǎng)上搜索。
,,,,2019/12/5,1,匯編語言程序設(shè)計,第4章 80x86的尋址方式 與基本指令,4.1 指令系統(tǒng)概述 4.2 80x86的尋址方式 4.3 數(shù)據(jù)處理類指令 4.4 控制轉(zhuǎn)移類指令 4.5 其他類指令,,,,,2019/12/5,2,匯編語言程序設(shè)計,4.1 指令系統(tǒng)概述,第4章 80x86的尋址方式與基本指令,,指令——計算機(jī)執(zhí)行的各種操作的命令的形式。 指令系統(tǒng)——計算機(jī)所能執(zhí)行的全部指令。 向上兼容——每種計算機(jī)有自己固有的指令系統(tǒng),如Intel 8086/8088和MC68000的指令系統(tǒng)各不相同。但是486微處理器可以執(zhí)行8086/8088、286、386的指令系統(tǒng),這就是向上兼容的緣故。 程序——指令的集合或指令的序列。,,,,1. 幾個概念,3,匯編語言程序設(shè)計,2019/12/5,4.1 指令系統(tǒng)概述,,操作碼 操作數(shù),……,操作數(shù) 80x86的運(yùn)算指令采用二地址指令,即: 操作碼 (目的)操作數(shù),(源)操作數(shù) 操作碼——指出要執(zhí)行的操作。 操作數(shù)——指出指令操作的對象??赡苁遣僮鲾?shù)本身,也可能是操作數(shù)地址。 源操作數(shù)——指出操作數(shù)的來源。 目的操作數(shù)——指出指令的操作結(jié)果存放何處。在許多指令中,同時又指出另一操作數(shù)的來源。注意原來的數(shù)據(jù)丟失。,,,,2. 指令的一般格式,2019/12/5,4,匯編語言程序設(shè)計,,[例] MOV AL,34H ;操作數(shù)本身,立即數(shù)。 ADD AL,DATA1 ;操作數(shù)地址 MUL CL ;單操作數(shù) 指令的形式有: 雙操作數(shù)指令 單操作數(shù)指令 DEC CX 隱含操作數(shù)指令 AAA,,,,2019/12/5,5,匯編語言程序設(shè)計,,(1) 立即數(shù)——操作數(shù)本身,存放在指令代碼中。 (2) 寄存器操作數(shù)——操作數(shù)存放在CPU內(nèi)部寄存器中。 (3) 內(nèi)存操作數(shù)——操作數(shù)存放在內(nèi)存中,一般在數(shù)據(jù)段、附加段、甚至堆棧段。給出的是操作數(shù)的地址。 (4) 端口操作數(shù)——在I/O指令中,給出的端口地址。如 IN AL,34H OUT 43H,AL,,,,3. 操作數(shù)的種類,2019/12/5,6,匯編語言程序設(shè)計,,,,,2019/12/5,7,匯編語言程序設(shè)計,第4章 80x86的尋址方式與基本指令,一、與數(shù)據(jù)有關(guān)的尋址方式 二、與轉(zhuǎn)移地址有關(guān)的尋址方式,4.2 80x86的尋址方式,,尋址方式——如何尋找(規(guī)定)操作數(shù)的方式。即指令中用于說明操作數(shù)所在地址的方法。,,,,一、與數(shù)據(jù)有關(guān)的尋址方式,2019/12/5,8,匯編語言程序設(shè)計,,一、與數(shù)據(jù)有關(guān)的尋址方式,操作數(shù)直接放在指令中,緊跟在操作碼之后,與操作碼一起存放在代碼段中??梢允亲止?jié)/字/雙字。 例 MOV AL,5 MOV AX,3087H MOV EAX,12345678H 如下圖所示:,,,,1. 立即尋址方式(Immediate addressing),2019/12/5,9,匯編語言程序設(shè)計,,一、與數(shù)據(jù)有關(guān)的尋址方式,,,,2019/12/5,10,匯編語言程序設(shè)計,,,,,,立即尋址主要用途是給寄存器賦初值。用來表示常數(shù)。 注意只能用于源操作數(shù),不能用于目的操作數(shù)。,2019/12/5,11,匯編語言程序設(shè)計,,一、與數(shù)據(jù)有關(guān)的尋址方式,操作數(shù)在寄存器中,指令指定寄存器號。 對于16位操作數(shù),寄存器可以是AX、BX、CX、DX、SI、DI、SP、BP;對于8位操作數(shù),寄存器可以是AH、AL、BH、BL、CH、CL、DH、DL。對于32位操作數(shù),寄存器可以是EAX、EBX、ECX、EDX、ESI、EDI、ESP、EBP; 例: MOV AX,BX MOV ECX,EDX MOV DL,AL,,,,2.寄存器尋址方式(Register addressing),2019/12/5,12,匯編語言程序設(shè)計,,,,,,寄存器尋址方式由于操作數(shù)在寄存器中,不需要訪問存儲器,所以速度最快,也最常用。 寄存器尋址方式尋找操作數(shù)的示意圖如下:,,MOV AX,BX,如:,2019/12/5,13,匯編語言程序設(shè)計,,一、與數(shù)據(jù)有關(guān)的尋址方式,除上述兩種尋址方式外,以下的尋址方式的操作數(shù)都在除代碼段以外的存儲區(qū)中,稱為內(nèi)存操作數(shù)。 內(nèi)存操作數(shù)的地址由段基地址和偏移地址相加而取得。 在實模式和保護(hù)模式下,段基地址的取得方法不同。,,,,內(nèi)存操作數(shù),內(nèi)存操作數(shù),2019/12/5,14,匯編語言程序設(shè)計,,一、與數(shù)據(jù)有關(guān)的尋址方式,有效地址EA(Effective Address)——在各種尋址方式中,操作數(shù)的偏移地址可由各種成分組成,稱為有效地址,用EA表示。 內(nèi)存操作數(shù)的各種不同的尋址方式,僅是它們的EA的組成不同。,,,,有效地址,2019/12/5,15,匯編語言程序設(shè)計,,一、與數(shù)據(jù)有關(guān)的尋址方式,有效地址EA由四種成分組成: (1)位移量——8/16/32位地址偏移量 (2)基址——基址寄存器的內(nèi)容。通常用來指示數(shù)組或字符串的首地址。 (3)變址——變址寄存器的內(nèi)容。通常用來訪問數(shù)組或字符串中的某個元素。 (4)比例因子——386以后機(jī)型有。值為1,2,4,8。乘以變址寄存器的內(nèi)容得到變址值。,,,,有效地址的計算公式: EA=基址+(變址比例因子)+位移量,有效地址的計算,2019/12/5,16,匯編語言程序設(shè)計,,一、與數(shù)據(jù)有關(guān)的尋址方式,16/32位尋址時EA四種成分的組成,,,,位移量 基址寄存器 變址寄存器 比例因子,0,8,16位 BX,BP SI,DI 無,0,8,16,32位 任何32位通用寄存器 32位通用寄存器(除ESP) 1,2,4,8,16位尋址,32位尋址,,,,2019/12/5,17,匯編語言程序設(shè)計,,一、與數(shù)據(jù)有關(guān)的尋址方式,在指令中大多隱含段地址。段地址有個基本的規(guī)定(約定,默認(rèn)),也允許超越(可修改),見下表所示:,,,,段約定和段超越,2019/12/5,18,匯編語言程序設(shè)計,,一、與數(shù)據(jù)有關(guān)的尋址方式,段約定和段超越: 存取方式 約定段 可修改段 偏移地址 取指令 CS 無 IP 堆棧操作 SS 無 SP 源串 DS CS,ES,SS SI 目的串 ES 無 DI BP作基址 SS CS,DS,ES EA 通用數(shù)據(jù)讀寫 DS CS,ES,SS EA,,,,,,,2019/12/5,19,匯編語言程序設(shè)計,,一、與數(shù)據(jù)有關(guān)的尋址方式,操作數(shù)在內(nèi)存中,,有效地址EA在指令的代碼段中,它在操作碼之后。 例 MOV AX,[2000H] 如下圖所示:,,,,3.直接尋址方式(Direct addressing),2019/12/5,20,匯編語言程序設(shè)計,,一、與數(shù)據(jù)有關(guān)的尋址方式 3.直接尋址方式,,,,2019/12/5,21,匯編語言程序設(shè)計,,一、與數(shù)據(jù)有關(guān)的尋址方式 3.直接尋址方式,,,,注意幾點: (1) MOV AX,[2000H]與 MOV AX,2000H的區(qū)別。 (2) MOV AX,[2000H]與 MOV AL,[2000H]的區(qū)別。 (3) MOV AX,[2000H]等同于 MOV AX,DS:[2000H]。 (4) 若VALUE是符號地址,則 MOV AX,VALUE同 MOV AX,[VALUE]。,2019/12/5,22,匯編語言程序設(shè)計,,一、與數(shù)據(jù)有關(guān)的尋址方式,操作數(shù)的有效地址在基址寄存器BP、BX和變址寄存器SI、DI中,而操作數(shù)在內(nèi)存中。 例 MOV AX,[BX] 如下圖所示:,,,,4.寄存器間接尋址方式 (Register indirect addressing),2019/12/5,23,匯編語言程序設(shè)計,,一、與數(shù)據(jù)有關(guān)的尋址方式 4.寄存器間接尋址方式,,,,,,2019/12/5,24,匯編語言程序設(shè)計,,一、與數(shù)據(jù)有關(guān)的尋址方式 4.寄存器間接尋址方式,,,,,,必須注意:如果指令中指定的寄存器是BX、SI、DI之一,則操作數(shù)在數(shù)據(jù)段中,用DS的內(nèi)容作為段地址;如果指令中指定的寄存器是BP,則操作數(shù)在堆棧段中,用SS的內(nèi)容作為段地址。 另外,指令中也可以指定段超越來訪問其它段中的數(shù)據(jù)。如:MOV AX,ES:[BX]。,2019/12/5,25,匯編語言程序設(shè)計,,一、與數(shù)據(jù)有關(guān)的尋址方式,或稱為(直接)變址尋址。 操作數(shù)的有效地址是BP、BX、SI、DI之一的內(nèi)容加上指令中指定的8位或16位位移量。 例: MOV AX,COUNT[BX] 如下圖所示:,,,,5. 寄存器相對尋址方式 (Register relative addressing),2019/12/5,26,匯編語言程序設(shè)計,,一、與數(shù)據(jù)有關(guān)的尋址方式 5. 寄存器相對尋址方式,,,,,,2019/12/5,27,匯編語言程序設(shè)計,,一、與數(shù)據(jù)有關(guān)的尋址方式 5. 寄存器相對尋址方式,,,,,,同樣注意:出現(xiàn)BP則是堆棧段中的數(shù)據(jù)。 又例:MOV AL,[100H+DI] MOV AX,BUF[BX],2019/12/5,28,匯編語言程序設(shè)計,,一、與數(shù)據(jù)有關(guān)的尋址方式,操作數(shù)的有效地址是BP、BX之一和SI、DI之一的內(nèi)容之和。兩個寄存器均由指令指定。 例: MOV AX,[BX][SI] MOV AX,[BX+DI] 示意圖類似,不同的是組成EA的兩個地址不盡相同。,,,,6. 基址變址尋址方式 (Based indexed addressing),2019/12/5,29,匯編語言程序設(shè)計,,一、與數(shù)據(jù)有關(guān)的尋址方式 6.基址變址尋址方式,,,,,,同樣注意BP的問題。 例:MOV AX,[BX][DI] MOV AX,[BX+SI] MOV DX,[BP+DI] MOV DX,ES:[BP][DI],2019/12/5,30,匯編語言程序設(shè)計,,一、與數(shù)據(jù)有關(guān)的尋址方式,操作數(shù)的有效地址是BP、BX之一和SI、DI之一的內(nèi)容和8位或16位偏移量三者之和。兩個寄存器均由指令指定。 例: MOV AX,COUNT[BX][SI] MOV AX,MASK[BX+SI] 示意圖也類似,不同的是EA是由三個地址組成。,,,,,7. 相對基址變址尋址方式 (Relative based indexed addressing),2019/12/5,31,匯編語言程序設(shè)計,,一、與數(shù)據(jù)有關(guān)的尋址方式 7. 相對基址變址尋址方式,,,,,,同樣有BP的問題。 又如:MOV AX,200H[BX][SI] MOV AX,[200H+BX+SI] MOV DX,2[BP][DI] MOV AX,2[BP+SI],2019/12/5,32,匯編語言程序設(shè)計,,一、與數(shù)據(jù)有關(guān)的尋址方式,操作數(shù)的有效地址變址寄存器的內(nèi)容乘以指令中指定的比例因子再加上偏移量三者之和。(除ESP以外的32位通用寄存器) 例: MOV EAX,COUNT[ESI*4] 把雙字?jǐn)?shù)組COUNT中的元素3送到EAX中。如下圖所示。,,,,8. 比例變址尋址方式 (scaled indexed addressing),2019/12/5,33,匯編語言程序設(shè)計,,一、與數(shù)據(jù)有關(guān)的尋址方式,操作數(shù)的有效地址變址寄存器的內(nèi)容乘以指令中指定的比例因子再加上基址寄存器的內(nèi)容三者之和。 例: MOV ECX,[EAX][EDX*8] 該尋址方式比基址變址尋址方式更靈活。,,,,,9. 基址比例變址尋址方式 (based scaled indexed addressing),2019/12/5,34,匯編語言程序設(shè)計,,一、與數(shù)據(jù)有關(guān)的尋址方式,操作數(shù)的有效地址變址寄存器的內(nèi)容乘以指令中指定的比例因子再加上基址寄存器的內(nèi)容,再加上位移量,四者之和。 例: MOV EAX,TABLE[EBP][EDI*4] 該尋址方式比相對基址變址尋址方式更靈活。,,,,10. 相對基址比例變址尋址方式 (relative based scaled indexed addressing),2019/12/5,35,匯編語言程序設(shè)計,,,用來確定轉(zhuǎn)移指令(如JMP,JC等)及CALL指令的轉(zhuǎn)向地址。,,,,二、與地址有關(guān)的尋址方式,2019/12/5,36,匯編語言程序設(shè)計,,二、與地址有關(guān)的尋址方式,轉(zhuǎn)向的有效地址是當(dāng)前IP寄存器的內(nèi)容+指令中指定的8位或16位位移量。 例如:JMP NEXT JMP SHORT NEXT JMP NEAR PTR NEXT,,,,1. 段內(nèi)直接尋址 (intrasegment direct addressing),2019/12/5,37,匯編語言程序設(shè)計,,二、與地址有關(guān)的尋址方式 1. 段內(nèi)直接尋址,這是一種相對尋址方式,轉(zhuǎn)向有效地址用相對于當(dāng)前IP值的位移量來表示。 位移量為8位時稱為短轉(zhuǎn)移。 位移量為16位時稱為近轉(zhuǎn)移。 386及以后機(jī)型,偏移地址在EIP中,位移量為8位或32位。,,,,,2019/12/5,38,匯編語言程序設(shè)計,,二、與地址有關(guān)的尋址方式,轉(zhuǎn)向的有效地址是一個寄存器或存儲單元的內(nèi)容,取代IP寄存器的內(nèi)容。 例如: JMP BX JMP TABLE[BX] JMP [BX][SI] JMP ECX JMP WORD PTR TABLE[ESI],,,,,2.段內(nèi)間接尋址 (intrasegment indirect addressing),2019/12/5,39,匯編語言程序設(shè)計,,二、與地址有關(guān)的尋址方式,指令中直接提供了轉(zhuǎn)向的段地址和偏移地址,分別取代CS和IP的內(nèi)容,即可完成從一個段到另一個段的轉(zhuǎn)移。 例如: JMP FAR PTR NEXT 386以后的機(jī)型則修改CS和EIP。,,,,,3.段間直接尋址 (intersegment direct addressing),2019/12/5,40,匯編語言程序設(shè)計,,匯編語言程序設(shè)計 第三章 80x86的尋址方式和指令系統(tǒng),二、與地址有關(guān)的尋址方式,用存儲器中兩個相繼字單元的內(nèi)容取代CS和IP的內(nèi)容,達(dá)到段間轉(zhuǎn)移的目的。 例如: JMP DWORD PTR [INTERS+BX] JMP DWORD PTR [EDI],,,,4.段間間接尋址 (intersegment indirect addressing),2019/12/5,41,匯編語言程序設(shè)計,,,,,2019/12/5,42,匯編語言程序設(shè)計,第4章 80x86的尋址方式與基本指令,一、數(shù)據(jù)傳送指令 二、算術(shù)運(yùn)算指令 三、邏輯運(yùn)算指令 四、移位指令 五、串操作指令 六、輸入輸出指令,4.3 數(shù)據(jù)處理類指令,,,,,2019/12/5,43,匯編語言程序設(shè)計,第4章 80x86的尋址方式與基本指令,一、 數(shù)據(jù)傳送指令,通用數(shù)據(jù)傳送指令 MOV MOVSX MOVZX XCHG 堆棧操作指令 PUSH POP PUSHA/PUSHAD POPA/POPAD 地址傳送指令 LEA LDS LES LFS LGS LSS 標(biāo)志寄存器傳送指令 LAHF SAHF PUSHF POPF,,一、數(shù)據(jù)傳送指令,MOV指令 格式:MOV DST,SRC ;W/B 操作:(DST) ——(SRC) 其中: DST:目的操作數(shù),可以是M(存儲器)、R(寄存器)、A(累加器); SRC:源操作數(shù),可以是M、R、A、立即數(shù)。 不影響標(biāo)志位。 數(shù)據(jù)傳送的示意圖如下:,,,,,1. 通用數(shù)據(jù)傳送指令,2019/12/5,44,匯編語言程序設(shè)計,,一、數(shù)據(jù)傳送指令 1. 通用數(shù)據(jù)傳送指令,,,,,,2019/12/5,45,匯編語言程序設(shè)計,,一、數(shù)據(jù)傳送指令 1. 通用數(shù)據(jù)傳送指令,,,,可以分為四種傳送類別: (1) 寄存器之間數(shù)據(jù)傳送 MOV AX,BX MOV DL,AH MOV DX,ES MOV DS,AX MOV BP,SI 注意:CS和IP不參加數(shù)據(jù)傳送,CS作源操作數(shù)是可以的,如“MOV AX,CS”,但一般不用。,2019/12/5,46,匯編語言程序設(shè)計,,一、數(shù)據(jù)傳送指令 1. 通用數(shù)據(jù)傳送指令,,,,(2) 立即數(shù) —通用寄存器(不能是段寄存器) MOV AL,25 MOV BX,052AH MOV SI,OFFSET TABLE MOV SP,0A2C0H 注意:立即數(shù)不能作目的操作數(shù)。,2019/12/5,47,匯編語言程序設(shè)計,,一、數(shù)據(jù)傳送指令 1. 通用數(shù)據(jù)傳送指令,,,,(3) 寄存器與存儲器之間的數(shù)據(jù)傳送 MOV AL,BUFFER MOV AX,[SI] MOV LAST[BX+DI],DL MOV SI,ES:[BP] MOV ALFA[BX][DI],ES 注意:CS和IP不參與數(shù)據(jù)傳送(CS只能作源操作數(shù)),2019/12/5,48,匯編語言程序設(shè)計,,一、數(shù)據(jù)傳送指令 1. 通用數(shù)據(jù)傳送指令,,,,(4) 立即數(shù)到存儲器的數(shù)據(jù)傳送 MOV ALFA,25 MOV DS:DATA[BP],30A0H MOV BYTE PTR [SI],75 MOV [BX+DI+LAST],0FFH 注意:立即數(shù) ——存儲器,一定要使它們的類型一致。,2019/12/5,49,匯編語言程序設(shè)計,,一、數(shù)據(jù)傳送指令 1. 通用數(shù)據(jù)傳送指令,,,,存儲器之間不能直接傳送! 如“MOV ALFA2,ALFA1”,是錯誤的。 存儲器之間只能借助通用寄存器間接傳送: MOV AL,ALFA1 MOV ALFA2,AL 程序例:DATA1處的100個字節(jié)數(shù)據(jù)傳送到DATA2處。 分析:通過累加器間接傳送,用循環(huán)的方法,CX作計數(shù)器。,2019/12/5,50,匯編語言程序設(shè)計,,一、數(shù)據(jù)傳送指令 1. 通用數(shù)據(jù)傳送指令,,,,MOV SI,OFFSET DATA1 ;源數(shù)指針 MOV DI,OFFSET DATA2 ;目的數(shù)指針 MOV CX,100 ;計數(shù)器初值 NEXT: MOV AL,[SI] ;傳送一個數(shù) MOV [DI],AL ; INC SI ;修改地址指針 INC DI DEC CX ;計數(shù)器減1 JNZ NEXT ;未傳完,轉(zhuǎn)NEXT,2019/12/5,51,匯編語言程序設(shè)計,,一、數(shù)據(jù)傳送指令 1. 通用數(shù)據(jù)傳送指令,,,,或者: MOV SI,0 ;變址寄存器初值 MOV DI,0 ; MOV CX,100 ;計數(shù)器初值 NEXT: MOV AL,DATA1[SI] ;變址尋址 MOV DATA2[DI],AL ;傳送一個數(shù) INC SI ;修改地址指針 INC DI DEC CX ;計數(shù)器減1 JNZ NEXT ;未傳完,轉(zhuǎn)NEXT,2019/12/5,52,匯編語言程序設(shè)計,,一、數(shù)據(jù)傳送指令 1. 通用數(shù)據(jù)傳送指令,MOVSX 帶符號擴(kuò)展傳送指令 格式:MOVSX DST,SRC 操作:(DST) ——符號擴(kuò)展(SRC) 兩種形式: MOVSX reg1,reg2 MOVSX reg,mem 例如: MOVSX EAX,CL MOVSX EDX,[EDI] 不影響標(biāo)志位。,,,,,2019/12/5,53,匯編語言程序設(shè)計,,一、數(shù)據(jù)傳送指令 1. 通用數(shù)據(jù)傳送指令,MOVZX 帶零擴(kuò)展傳送指令 格式:MOVZX DST,SRC 操作:(DST) ——零擴(kuò)展(SRC) 兩種形式: MOVZX reg1,reg2 MOVZX reg,mem 例如: MOVZX DX,AL MOVZX EAX,DATA 不影響標(biāo)志位。,,,,,2019/12/5,54,匯編語言程序設(shè)計,- 1.請仔細(xì)閱讀文檔,確保文檔完整性,對于不預(yù)覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
14.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計者僅對作品中獨創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- x86 尋址 方式 基本 指令
鏈接地址:http://m.jqnhouse.com/p-2962329.html