微型計(jì)算機(jī)原理及應(yīng)用:第3章8086的尋址方法和指令系統(tǒng)



《微型計(jì)算機(jī)原理及應(yīng)用:第3章8086的尋址方法和指令系統(tǒng)》由會員分享,可在線閱讀,更多相關(guān)《微型計(jì)算機(jī)原理及應(yīng)用:第3章8086的尋址方法和指令系統(tǒng)(130頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
1、 2.3 8086指令系統(tǒng)和匯指令系統(tǒng)和匯編語言編語言第三章第三章 8086的尋址方法和指令系統(tǒng)的尋址方法和指令系統(tǒng)3.1 8086尋址方式尋址方式3.2 8086 指令系統(tǒng)指令系統(tǒng)2.3.1 尋址方式尋址方式3.1 80863.1 8086尋址方式尋址方式概念:概念:指令指令:是微處理器執(zhí)行某種操作的命令是微處理器執(zhí)行某種操作的命令.指令系統(tǒng)指令系統(tǒng):微處理器全部指令的集合。微處理器全部指令的集合。指令有兩種書寫格式:機(jī)器指令和符號指令。指令有兩種書寫格式:機(jī)器指令和符號指令。符號指令是用規(guī)定的助記符和規(guī)定的書寫格式書寫符號指令是用規(guī)定的助記符和規(guī)定的書寫格式書寫 的指令。符號指令的書寫格式
2、為:的指令。符號指令的書寫格式為:操作碼助記符操作碼助記符 操作數(shù)助記符操作數(shù)助記符MOV AL,1 MOV AL,1 10110000 000000011 1操作數(shù)的尋址方式操作數(shù)的尋址方式 尋址方式尋址方式:尋找指令中:尋找指令中操作數(shù)地址操作數(shù)地址的方式。的方式。操作數(shù)有三種可能的存放方式:操作數(shù)有三種可能的存放方式:直接包含在直接包含在指令中指令中 立即數(shù)立即數(shù) 立即數(shù)立即數(shù)尋址尋址包含在某個包含在某個寄存器中寄存器中 寄存器操作數(shù)寄存器操作數(shù) 寄存器寄存器尋址尋址在在內(nèi)存內(nèi)存中中 存儲器操作數(shù)(內(nèi)存操作數(shù))存儲器操作數(shù)(內(nèi)存操作數(shù))存儲器存儲器尋址尋址(1 1)立即尋址)立即尋址 (
3、2 2)寄存器尋址)寄存器尋址 (3 3)直接尋址)直接尋址 (4 4)寄存器間接尋址)寄存器間接尋址 (5 5)寄存器相對尋址方式)寄存器相對尋址方式 (6 6)基址變址尋址方式)基址變址尋址方式 (7 7)相對基址變址尋址方式)相對基址變址尋址方式 內(nèi)存實(shí)際地址內(nèi)存實(shí)際地址由兩部分組成:存儲單元所在由兩部分組成:存儲單元所在段的基地址段的基地址/段段內(nèi)偏移地址內(nèi)偏移地址(偏移量)(偏移量)MOV ES:3000H,ALMOV ES:3000H,AL段內(nèi)偏移地址(段內(nèi)偏移地址(EAEA)可以由如下四個部分組成(偏移地址四可以由如下四個部分組成(偏移地址四元素):元素):基址寄存器內(nèi)容基址寄存
4、器內(nèi)容變址寄存器內(nèi)容變址寄存器內(nèi)容比例因子比例因子位移量位移量有效地址有效地址EAEA:由四元素組合形成的偏移地址稱為由四元素組合形成的偏移地址稱為有效地址有效地址EA:EA:EA=EA=基址基址+(變址變址 比例因子比例因子)+)+位移量位移量對于實(shí)模式(對于實(shí)模式(1616位尋址)位尋址):基址寄存器:基址寄存器:BX,BPBX,BP變址寄存器:變址寄存器:SI,DISI,DI比例因子:比例因子:0,10,1位移量:位移量:0,8,160,8,16位位對于保護(hù)模式(對于保護(hù)模式(3232位尋址)位尋址):基址寄存器:任何基址寄存器:任何3232位通用寄存器位通用寄存器變址寄存器:除變址寄存
5、器:除ESPESP外的任何外的任何3232位通用寄存器位通用寄存器比例因子:比例因子:1,2,4,8 1,2,4,8位移量:位移量:0,8,32 0,8,32位位各種尋址方式各種尋址方式(1 1)立即尋址:)立即尋址:操作數(shù)作為立即數(shù)直接存在指令中,可為字操作數(shù)作為立即數(shù)直接存在指令中,可為字節(jié)、字、雙字。節(jié)、字、雙字。僅用于源操作數(shù)僅用于源操作數(shù),主要是給寄存器賦初值。,主要是給寄存器賦初值。例如:例如:MOV AXMOV AX,1234H 1234H;十六進(jìn)制數(shù)十六進(jìn)制數(shù)12341234H H送入送入AXAX。如圖所示。如圖所示。A AH HA AL L操操作作碼碼1 1 2 23 3 4
6、 4A AX XMOV ECX,12345678H低地址低地址 高地高地 址址CS段段操作碼操作碼78H56H34H12H78H56H34H12HECX(2 2)寄存器尋址)寄存器尋址 操作數(shù)存放在指令規(guī)定的操作數(shù)存放在指令規(guī)定的寄存器寄存器中,對于中,對于1616位位操作數(shù),操作數(shù),寄存器可以是寄存器可以是AXAX,BXBX,CXCX,DXDX,SISI,DIDI,SPSP或或BPBP;而對而對8 8位位操作數(shù),寄存器可以是操作數(shù),寄存器可以是AHAH,ALAL,BHBH,BLBL,CHCH,CLCL,DHDH或或DLDL。注意注意:源操作數(shù)的長度必須與目標(biāo)操作數(shù)一致。源操作數(shù)的長度必須與目
7、標(biāo)操作數(shù)一致。例如:例如:MOV AXMOV AX,BX BX;將寄存器將寄存器BXBX的內(nèi)容送入的內(nèi)容送入AXAX中。中。MOV ECX,EDX MOV ECX,EDX如圖所示。如圖所示。X XX XA AX XB BX X78H56H34H12HECX78H56H34H12HEDX寄存器尋址由于無需從存儲器中取操作數(shù),故執(zhí)行速度快寄存器尋址由于無需從存儲器中取操作數(shù),故執(zhí)行速度快(3 3)直接尋址)直接尋址 指令中的操作數(shù)部分直接給出操作數(shù)指令中的操作數(shù)部分直接給出操作數(shù)的有效地址的有效地址EAEA,操作數(shù)可以是操作數(shù)可以是1616位或位或3232位整數(shù),操作數(shù)位整數(shù),操作數(shù)默認(rèn)默認(rèn)在在D
8、SDS段中段中例如:例如:MOV ALMOV AL,DS:2000H DS:2000H;將邏輯地址為將邏輯地址為DS:2000DS:2000單元內(nèi)的字節(jié)單元內(nèi)的字節(jié)送入送入ALAL。若段基址若段基址DS=4000HDS=4000H,則段起始物理地則段起始物理地址為址為40004000H H左移左移4 4位,即位,即4000040000H H,此指此指令將數(shù)據(jù)段中物理地址為令將數(shù)據(jù)段中物理地址為4200042000H H 單單元的內(nèi)容元的內(nèi)容5656H H傳至傳至ALAL寄存器。寄存器。如圖所示。如圖所示。4000H 56HA AX X D DS S 40000H2000H操作碼操作碼00H20
9、H56H42000H MOV AX,3000H低地址低地址 CS段段操作碼操作碼00H30H34H12H34H12HAXDS段段5000053000DS5000 0300053000+如果操作數(shù)在如果操作數(shù)在DSDS以外以外的其他段(的其他段(CS,SS,ES,FS,GSCS,SS,ES,FS,GS)中,指令中必須指明段寄存器,這稱為中,指令中必須指明段寄存器,這稱為段超越段超越。MOV AX,ES:3000H低地低地 址址高地址高地址 CS段段操作碼操作碼00H30H34H12H34H12HAXES段段2000023000ES2000 0300023000+4.4.寄存器間接尋址寄存器間接尋
10、址操作數(shù)地址的偏移量(有效地址操作數(shù)地址的偏移量(有效地址EAEA)存放在寄存器中存放在寄存器中1616位尋址:偏移地址放在位尋址:偏移地址放在SI,DI,BP,BXSI,DI,BP,BX中中以以SI,DI,BXSI,DI,BX間接尋址,默認(rèn)操作數(shù)在間接尋址,默認(rèn)操作數(shù)在DSDS段中段中MOV AX,SIMOV AX,SI以以BPBP間接尋址,默認(rèn)操作數(shù)在間接尋址,默認(rèn)操作數(shù)在S SS S段中段中MOV AX,BPMOV AX,BP3232位尋址:偏移地址放在位尋址:偏移地址放在8 8個個3232位通用寄存器中除位通用寄存器中除ESP,EBPESP,EBP默認(rèn)段寄存器為默認(rèn)段寄存器為SSSS外
11、,其余均外,其余均默認(rèn)段寄存器為默認(rèn)段寄存器為DSDSMOV EAX,ESPMOV EAX,ESP例如:例如:MOV AXMOV AX,BXBX ;BXBX內(nèi)容為有效地址內(nèi)容為有效地址EAEA(偏移量)。偏移量)。若若DS=4000HDS=4000H,BX=100HBX=100H,此指令將物理地址此指令將物理地址4010040100H H 單元的內(nèi)單元的內(nèi)容傳至容傳至ALAL寄存器(段基地址同樣為寄存器(段基地址同樣為4000040000H H)。)。如圖所示。如圖所示。4000H34H 25HA AX X D DS S 40000H0100H25H40100H34H0100H B BX X數(shù)
12、據(jù)段代碼段低地低地 址址高地址高地址 CS段段操作碼操作碼34H12H34H12HAXSS段段7000073000SS7000 0300073000+MOV AX,BPBP(5 5)基址尋址)基址尋址 (寄存器相對尋址)(寄存器相對尋址)EA=EA=基址寄存器基址寄存器+位移量位移量1616位尋址:位尋址:BP,BXBP,BX為為基址寄存器基址寄存器BXBX,DSDS為默認(rèn)段寄存器為默認(rèn)段寄存器BPBP,SSSS為默認(rèn)段寄存器為默認(rèn)段寄存器3232位尋址:位尋址:8 8個個3232位通用寄存器均可作為基位通用寄存器均可作為基址寄存器,除址寄存器,除ESP,EBPESP,EBP默認(rèn)段寄存器為默認(rèn)
13、段寄存器為SSSS外,外,其余均默認(rèn)段寄存器為其余均默認(rèn)段寄存器為DSDS MOV EAX,BX+24MOV EAX,BX+24 MOV DX,EAX+1500MOV DX,EAX+1500(5 5)基址尋址)基址尋址例如:例如:MOV AL,BX+5MOV AL,BX+5;若若DS=6000H,BX=2000HDS=6000H,BX=2000H,BXBX的內(nèi)容加上的內(nèi)容加上8 8位位移量位位移量0505H H作為操作數(shù)的有效地作為操作數(shù)的有效地址。傳送數(shù)據(jù)段中的一個址。傳送數(shù)據(jù)段中的一個字節(jié)到字節(jié)到ALAL中。如果使用中。如果使用BPBP,則隱含地表示操作數(shù)存放則隱含地表示操作數(shù)存放在堆棧段
14、中。如圖所示。在堆棧段中。如圖所示。6000H 9AHAXAX DS DS操作碼操作碼05H9AH2000H BX BX數(shù)據(jù)段代碼段EA2000H+05H=2005H62005 60000低地址低地址 高高 地址地址CS段段操作碼操作碼00H15H34H12H34H12HAXFS段段7000073500BX150073500+MOV DX,BX+1500DS7000 02000(6 6)變址尋址變址尋址EA=EA=變址寄存器變址寄存器+位移量位移量1616位尋址:位尋址:SI,DISI,DI為變址寄存器為變址寄存器,DSDS為默認(rèn)段寄存為默認(rèn)段寄存器器3232位尋址:除位尋址:除ESPESP外
15、其余外其余7 7個個3232位通用寄存器均可作位通用寄存器均可作為變址寄存器,為變址寄存器,EBPEBP默認(rèn)默認(rèn)SSSS為段寄存器,其余均默為段寄存器,其余均默認(rèn)段寄存器為認(rèn)段寄存器為DSDSMOV AH,SI+5MOV AH,SI+5變址尋址適用于對一維數(shù)組的元素進(jìn)行操作。變址尋址適用于對一維數(shù)組的元素進(jìn)行操作。(7 7)比例變址尋址比例變址尋址EA=EA=變址寄存器變址寄存器 比例因子比例因子+位移量位移量只適用于只適用于3232位尋址位尋址 MOV EAX,ESIMOV EAX,ESI*4+504+50比例變址尋址適用于一維數(shù)組操作,當(dāng)數(shù)組元素大比例變址尋址適用于一維數(shù)組操作,當(dāng)數(shù)組元素
16、大小為小為2/4/82/4/8字節(jié)時,它更方便、有效字節(jié)時,它更方便、有效(8 8)基址變址尋址方式)基址變址尋址方式 EA=EA=基址寄存器基址寄存器+變址變址寄存器寄存器;適用于適用于1616位和位和3232位尋址位尋址 MOV AX,BX+SIMOV AX,BX+SIMOV EAX,EDX+EBPMOV EAX,EDX+EBP基址加變址尋址主要用于二基址加變址尋址主要用于二維數(shù)組操作和二重循環(huán)維數(shù)組操作和二重循環(huán)例如:例如:MOV AXMOV AX,BX+SIBX+SI;BXBX的內(nèi)容與的內(nèi)容與SISI的內(nèi)容之和作為操的內(nèi)容之和作為操作數(shù)的有效地址。傳送數(shù)據(jù)段作數(shù)的有效地址。傳送數(shù)據(jù)段中
17、的一個字。如圖所示。中的一個字。如圖所示。5000HABH 78HA AX X D DS S操作碼操作碼 78HABH2000H B BX X數(shù)據(jù)段代碼段EA2000H+06H=2006H52006H 50000H EA0006H S SI I(9 9)基址加比例變址尋址基址加比例變址尋址EA=EA=變址寄存器變址寄存器 比例因子比例因子+基址寄存器基址寄存器 只適用于只適用于3232位尋址位尋址 MOV EAX,EDXMOV EAX,EDX*8+EAX8+EAX適用于數(shù)組元素大小為適用于數(shù)組元素大小為2/4/82/4/8字節(jié)時二維數(shù)組操作字節(jié)時二維數(shù)組操作(1010).帶位移的(相對)基址加
18、變址尋址帶位移的(相對)基址加變址尋址EA=EA=基址寄存器基址寄存器+變址寄存器變址寄存器+位移量位移量適用于適用于1616位和位和3232位尋址位尋址 MOV AX,BX+SI+50MOV AX,BX+SI+50 MOV EAX,EDX+EBP+0FFFF000H MOV EAX,EDX+EBP+0FFFF000H主要用于二維數(shù)組操作主要用于二維數(shù)組操作,位移量為數(shù)組起始地址位移量為數(shù)組起始地址(1010).帶位移的基址加變址尋址帶位移的基址加變址尋址相對基址變址尋址方式相對基址變址尋址方式 例如:例如:MOV AHMOV AH,BX+DI+1234HBX+DI+1234H ;BXBX的內(nèi)
19、容加上的內(nèi)容加上DIDI的內(nèi)的內(nèi)容再加上位移量容再加上位移量12341234H H作作為操作數(shù)的有效地址。如為操作數(shù)的有效地址。如圖圖2-172-17所示。所示。4000H50H AL ALAXAX DS DS34H12H 50H0200H BX BX數(shù)據(jù)段代碼段EA0200H+00101234H=1444H41444H 40000H EA0010H DI DI 操作碼操作碼(1111).帶位移的基址加比例變址尋址帶位移的基址加比例變址尋址EA=EA=變址寄存器變址寄存器 比例因子比例因子+基址寄存器基址寄存器+位移量位移量只適用于只適用于3232位尋址位尋址 MOV AX,BX+SI+50M
20、OV AX,BX+SI+50 MOV EAX,EDX+EBP+0FFFF000H MOV EAX,EDX+EBP+0FFFF000H適用于數(shù)組元素大小為適用于數(shù)組元素大小為2/4/82/4/8字節(jié)時二維數(shù)組操作字節(jié)時二維數(shù)組操作,位移量位移量為數(shù)組起始地址為數(shù)組起始地址存儲器操作時段和偏移地址寄存器的約定存儲器操作時段和偏移地址寄存器的約定存儲器操作類型默認(rèn)段寄存器允許超越段寄存器段內(nèi)偏移地址來源 取指令 CS 無 IP 堆棧操作 SS 無 SP通用數(shù)據(jù)讀寫 DSCS,ES,SS按尋址方式取得串操作源串地址 DSCS,ES,SS SI串操作目標(biāo)串地址 ES 無 DIBP作為基址寄存器 SSCS
21、,DS,ES按尋址方式取得程序只能在代碼段,堆棧操作數(shù)只能在堆棧段、目的串操作數(shù)只能在程序只能在代碼段,堆棧操作數(shù)只能在堆棧段、目的串操作數(shù)只能在附加數(shù)據(jù)段外,其他的操作雖然有默認(rèn)段,但都允許進(jìn)行段超越。附加數(shù)據(jù)段外,其他的操作雖然有默認(rèn)段,但都允許進(jìn)行段超越。其它的尋址方式:其它的尋址方式:(1)隱含尋址(2)I/O端口尋址(3)轉(zhuǎn)移類指令尋址3.2 80863.2 8086的指令系統(tǒng)的指令系統(tǒng)1 1數(shù)據(jù)傳送類數(shù)據(jù)傳送類2 2算術(shù)運(yùn)算類算術(shù)運(yùn)算類3 3邏輯運(yùn)算與移位指令邏輯運(yùn)算與移位指令4 4字符串處理字符串處理5 5控制轉(zhuǎn)移指令控制轉(zhuǎn)移指令6 6處理器控制指令處理器控制指令要求:掌握每條指
22、令的助記符、操作數(shù)和正確書寫格式及指令執(zhí)行要求:掌握每條指令的助記符、操作數(shù)和正確書寫格式及指令執(zhí)行后對標(biāo)志位的影響。后對標(biāo)志位的影響。部分部分80888088常用指令常用指令指令類型指令類型助記符助記符數(shù)據(jù)傳送數(shù)據(jù)傳送MOV,PUSH/POP,XCHG、XLAT等地址傳送LEA,LDS,LES標(biāo)志位傳送LAHF、SAHF、PUSHF、POPF輸入輸出IN,OUT算術(shù)運(yùn)算加法ADD,ADC,INC減法SUB,SBB,DEC,NEG,CMP乘/除法MUL,IMUL,DIV,IDIV邏輯AND,OR,NOT,XOR,TEST移位SHL/SHR/SAR,ROL/ROR,RCL/RCR串操作MOVS,
23、CMPS,SCAS,LODS,STOS控制轉(zhuǎn)移JMP,JXX,LOOP,CALL/RET,INT/IRET1 1數(shù)據(jù)傳送類數(shù)據(jù)傳送類(執(zhí)行后不影響標(biāo)志位,源操作執(zhí)行后不影響標(biāo)志位,源操作數(shù)不變數(shù)不變)(1 1)通用數(shù)據(jù)傳送指令)通用數(shù)據(jù)傳送指令 這種指令共這種指令共5 5條,如表?xiàng)l,如表3 34 4所示。所示。(2 2)輸入)輸入/輸出指令輸出指令(3 3)標(biāo)志位傳送指令)標(biāo)志位傳送指令 這組指令包括三條指令。這組指令包括三條指令。(4 4)目標(biāo)地址傳送指令)目標(biāo)地址傳送指令表表3 31 1 通用數(shù)據(jù)傳送指令格式通用數(shù)據(jù)傳送指令格式一、通用數(shù)據(jù)傳送指令一、通用數(shù)據(jù)傳送指令1.1.MOVMOV指
24、令指令MOV MOV 目標(biāo)操作數(shù),目標(biāo)操作數(shù),源操作數(shù)源操作數(shù)源操作數(shù)可以是源操作數(shù)可以是8/16/328/16/32位的立即數(shù)、寄存器、內(nèi)存儲器。位的立即數(shù)、寄存器、內(nèi)存儲器。目標(biāo)操作數(shù)不允許為立即數(shù)和目標(biāo)操作數(shù)不允許為立即數(shù)和CSCS。其余同源操作數(shù)。源、目其余同源操作數(shù)。源、目不能同時為內(nèi)存操作數(shù)。不能同時為內(nèi)存操作數(shù)。注注:(P101 P101 圖圖3 38 8)(1 1)立即數(shù)和段寄存器)立即數(shù)和段寄存器CSCS不能作為目標(biāo)操作數(shù);不能作為目標(biāo)操作數(shù);(2 2)立即數(shù)不能直接傳送到段寄存器;)立即數(shù)不能直接傳送到段寄存器;(3 3)兩個存儲單元之間不能直接傳送數(shù)據(jù);)兩個存儲單元之間
25、不能直接傳送數(shù)據(jù);(4 4)兩個段寄存器之間不能直接傳送數(shù)據(jù);)兩個段寄存器之間不能直接傳送數(shù)據(jù);(5 5)源、目的操作數(shù)類型要匹配。源、目的操作數(shù)類型要匹配。例:例:MOV DS,1000H ;(2)MOV DS,1000H ;(2)MOV CS,AX ;(1)MOV CS,AX ;(1)MOV VALUE1,CX ;(1)MOV VALUE1,CX ;(1)MOV BX,SI ;(3)MOV BX,SI ;(3)MOV DS,ES ;(4)MOV DS,ES ;(4)MOV AX,CX MOV AX,CX MOV DATBP+DI,ES MOV DATBP+DI,ES MOV AH,BX
26、;(5)MOV AH,BX ;(5)MOV BYTE PTRBX,1000 ;(5)MOV BYTE PTRBX,1000 ;(5)2.2.堆棧操作指令堆棧操作指令 (子程序調(diào)用或處理中斷時,堆棧用來存子程序調(diào)用或處理中斷時,堆棧用來存放當(dāng)前的斷點(diǎn)地址和現(xiàn)場數(shù)據(jù),斷點(diǎn)地址的保存是由子程序調(diào)放當(dāng)前的斷點(diǎn)地址和現(xiàn)場數(shù)據(jù),斷點(diǎn)地址的保存是由子程序調(diào)用指令和中斷響應(yīng)來完成的,現(xiàn)場數(shù)據(jù)保存可通過堆棧操作指用指令和中斷響應(yīng)來完成的,現(xiàn)場數(shù)據(jù)保存可通過堆棧操作指令來實(shí)現(xiàn)令來實(shí)現(xiàn))PUSH PUSH 源操作數(shù)源操作數(shù)進(jìn)棧指令進(jìn)棧指令.SP-2-SP,SP-2-SP,再把再把1616位源操作數(shù)壓入堆棧,先高位后
27、低位源操作數(shù)壓入堆棧,先高位后低位。源操作數(shù)可以是通用寄存器、段寄存器、存儲器。位。源操作數(shù)可以是通用寄存器、段寄存器、存儲器。PUSH AXPUSH AX (P102 P102 例)例)POP POP 目標(biāo)操作數(shù)目標(biāo)操作數(shù) 出棧指令,先從棧頂彈出出棧指令,先從棧頂彈出1616位操作數(shù)到目標(biāo)操作數(shù),位操作數(shù)到目標(biāo)操作數(shù),SPSP2-SP2-SP。目標(biāo)操作數(shù)可以是通用寄存器、段寄存器(目標(biāo)操作數(shù)可以是通用寄存器、段寄存器(CSCS除外)、存儲器。除外)、存儲器。POP AXPOP AX3.3.交換指令交換指令(將一個字或字節(jié)的源操作數(shù)與目的操作數(shù)進(jìn)行(將一個字或字節(jié)的源操作數(shù)與目的操作數(shù)進(jìn)行交換
28、)交換)XCHG XCHG 目標(biāo)操作數(shù),目標(biāo)操作數(shù),源操作數(shù)源操作數(shù) 例:例:XCHG BX,BP+SIXCHG BX,BP+SI BX=6F30H BX=6F30H BP=0200H BP=0200H SI=0046H SI=0046H SS=2F00H SS=2F00H 2F246H=1234H 2F246H=1234H 例如:例如:XCHG ALXCHG AL,BL BL ;ALAL與與BLBL間進(jìn)行字節(jié)交換間進(jìn)行字節(jié)交換 XCHG 2200H,DX ;DXXCHG 2200H,DX ;DX與與2200H2200H、2201H 2201H 兩單元間的字交換兩單元間的字交換注注:(1 1)
29、源、目不能同為內(nèi)存儲單元;源、目不能同為內(nèi)存儲單元;(2 2)段寄存器和立即數(shù)不能作為操作數(shù))段寄存器和立即數(shù)不能作為操作數(shù)結(jié)果:結(jié)果:(BX)=1234H(2F246H)=6F30H4.4.查表指令查表指令(完成一個字節(jié)的查表轉(zhuǎn)換完成一個字節(jié)的查表轉(zhuǎn)換)XLAT XLAT 表頭變量名表頭變量名查表指令,用來取表中某指定數(shù)的值查表指令,用來取表中某指定數(shù)的值,完成一個字節(jié)的查完成一個字節(jié)的查表轉(zhuǎn)換。將表轉(zhuǎn)換。將AL-BX+ALAL 目標(biāo)操作數(shù)目標(biāo)操作數(shù)ADC ADC 目標(biāo)操作數(shù),目標(biāo)操作數(shù),源操作數(shù)源操作數(shù)源操作數(shù)源操作數(shù)+目標(biāo)操作數(shù)目標(biāo)操作數(shù)+CFCF 目標(biāo)操作數(shù)目標(biāo)操作數(shù)影響影響A,C,O
30、,P,S,ZA,C,O,P,S,Z 6 6個標(biāo)志位個標(biāo)志位P106P106例題例題INC INC 目標(biāo)操作數(shù)目標(biāo)操作數(shù)目標(biāo)操作數(shù)目標(biāo)操作數(shù)+1+1 目標(biāo)操作數(shù)目標(biāo)操作數(shù)影響影響A A,O,P,S,ZO,P,S,Z5 5個標(biāo)志位個標(biāo)志位例例1:MOV DX,4652H ADD DX,0f0f0h 4 6 5 2+f 0 f 0 3 7 4 21 0 1 0 0 0 1 1 0 0 1 0 1 0 0 1 0+1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 0 0 1 1 0 1 1 1 0 1 0 0 0 0 1 11執(zhí)行后:執(zhí)行后:(DX)=3742H z=0 s=0 c=1
31、o=0 對無符號數(shù)對無符號數(shù) 溢出溢出 結(jié)果錯結(jié)果錯 對有符號數(shù)對有符號數(shù) 不溢出不溢出 結(jié)果正確結(jié)果正確 有符號數(shù)的溢出用溢出標(biāo)志有符號數(shù)的溢出用溢出標(biāo)志 o 判斷;判斷;無符號數(shù)的溢出用進(jìn)位標(biāo)志無符號數(shù)的溢出用進(jìn)位標(biāo)志 c 判斷。判斷。例例2:在內(nèi)存的:在內(nèi)存的First和和Secontd開始的區(qū)開始的區(qū)域中分存放著域中分存放著2F365H和和 5E024 H兩個數(shù),兩個數(shù),要求求其和,并存入要求求其和,并存入Third中。中。2 F 3 6 5 +5 E 0 2 4 8 D 3 8 9 FirstSecondThird65F302 0024E00500MOV AX,FirstADD AX
32、,SecondMOV Third,AXMOV AX,First+2ADC AX,Second+2MOV Third+2,AX 2 F 3 6 5 F 3 6 5 +5 E 0 2 4 +E 0 2 4 8 D 3 8 9 D 3 8 9 1 0 0 0 2 +0 0 0 5 0 0 0 821FirstSecondThird65F302 0024E0050089D308002.減法指令減法指令SUB SUB 目標(biāo)操作數(shù),目標(biāo)操作數(shù),源操作數(shù)源操作數(shù)目標(biāo)操作數(shù)目標(biāo)操作數(shù)-源操作數(shù)源操作數(shù) 目標(biāo)操作數(shù)目標(biāo)操作數(shù)注注:(1 1)要求源和目標(biāo)操作數(shù)同時為帶符號數(shù)或同時為無符號數(shù),且長度相等,要求源和目
33、標(biāo)操作數(shù)同時為帶符號數(shù)或同時為無符號數(shù),且長度相等,源操作數(shù)可以是寄存器、存儲器、或立即數(shù)。目標(biāo)操作數(shù)只能是寄存器或源操作數(shù)可以是寄存器、存儲器、或立即數(shù)。目標(biāo)操作數(shù)只能是寄存器或存儲器,且兩個操作數(shù)不能同時為存儲器。存儲器,且兩個操作數(shù)不能同時為存儲器。(2 2)減法(換為補(bǔ)碼的加法時)無進(jìn)位,表示有借位。)減法(換為補(bǔ)碼的加法時)無進(jìn)位,表示有借位。(3 3)對于有符號數(shù))對于有符號數(shù)OF OF 表示溢出,結(jié)果超出范圍,對于無符號數(shù)表示溢出,結(jié)果超出范圍,對于無符號數(shù)CFCF表示溢出,結(jié)果表示溢出,結(jié)果出錯。出錯。SBB SBB 目標(biāo)操作數(shù),目標(biāo)操作數(shù),源操作數(shù)源操作數(shù)目標(biāo)操作數(shù)目標(biāo)操作數(shù)
34、-源操作數(shù)源操作數(shù)CFCF 目標(biāo)操作數(shù)目標(biāo)操作數(shù)DEC DEC 目標(biāo)操作數(shù)目標(biāo)操作數(shù)目標(biāo)操作數(shù)目標(biāo)操作數(shù)-1-1 目標(biāo)操作數(shù)目標(biāo)操作數(shù)NEG NEG 目標(biāo)操作數(shù)目標(biāo)操作數(shù) 例:例:NEG ALNEG AL0-0-目標(biāo)操作數(shù)目標(biāo)操作數(shù) 目標(biāo)操作數(shù)目標(biāo)操作數(shù) ADD ALADD AL,100100影響影響A,C,O,P,S,ZA,C,O,P,S,Z 6 6個標(biāo)志位個標(biāo)志位 完成完成100100ALAL 例:例:SUB DH,BP+4 (DH)=41H (SS)=0000H (BP)=00E4H (00E8H)=5AH結(jié)果:結(jié)果:(DH)=0E7H S=1 Z=0 C=1 O=0 如果為有符號數(shù)則結(jié)
35、果正確(無溢出)如果為有符號數(shù)則結(jié)果正確(無溢出)如果為無符號數(shù)則結(jié)果錯誤(有溢出)如果為無符號數(shù)則結(jié)果錯誤(有溢出)4 1 -5 A E 7 0 1 0 0 0 0 0 1 -0 1 0 1 1 0 1 0 1 1 1 0 0 1 1 111例:例:雙精度數(shù)運(yùn)算雙精度數(shù)運(yùn)算 W=X+Y+24-ZXYZW65F302 0024E0050089D30800MOV AX,X MOV DX,X+2ADD AX,YADC DX,Y+2 ;X+YADD AX,24ADC DX,0 ;X+Y+24 SUB AX,Z SBB DX,Z+2 ;X+Y+24-ZMOV W,AXMOV W+2,DX ;送入送入w
36、 CMP CMP 目標(biāo)操作數(shù),目標(biāo)操作數(shù),源操作數(shù)源操作數(shù)比較指令比較指令 OPRD1-OPRD2 OPRD1-OPRD2 只影響標(biāo)志位不改變操作數(shù)只影響標(biāo)志位不改變操作數(shù)比較結(jié)果判斷:比較結(jié)果判斷:(1 1)若)若ZF=1ZF=1,則兩數(shù)相等,否則不等。則兩數(shù)相等,否則不等。(2 2)對無符號數(shù),)對無符號數(shù),(JA)JA)若若CFCF1 1,則則OPRD1OPRD2OPRD1OPRD2OPRD1OPRD2 (3)(3)對有符號數(shù),對有符號數(shù),(JG)JG)若若SFSF異或異或OFOF0 0,則則OPRD1OPRD2OPRD1OPRD2 若若SFSF異或異或OFOF1 1,則則OPRD1OP
37、RD2OPRD1 字字 CWD CWD 字字 雙字雙字操作數(shù)隱含規(guī)定在累加器中,將符號位擴(kuò)展。操作數(shù)隱含規(guī)定在累加器中,將符號位擴(kuò)展。擴(kuò)展規(guī)則:擴(kuò)展規(guī)則:1 1、若、若AL80H,AL80H,則則AHAH=80H,AL=80H,則則AHAHFFHFFH2 2、若、若AX8000H,AX8000H,則則DXDX=8000H,AL=8000H,則則DXDX9&0FH9,或,或AF=1AF=1則則(ALAL)(ALAL)+6+6(AFAF)11(CFCF)(AFAF)(AHAH)(AHAH)+1+1(ALAL)(ALAL)&0FH&0FH例如:兩個非組合的十進(jìn)制數(shù)例如:兩個非組合的十進(jìn)制數(shù)06+07
38、06+07,結(jié)果應(yīng)為非組合,結(jié)果應(yīng)為非組合的十進(jìn)制數(shù)的十進(jìn)制數(shù)01030103,其操作過程如下:,其操作過程如下:0000 01100000 01110000 11010001 00110000 00000000 00010000 11110000 0011011011&0000 0001=AX0103+ALAFAH=+06070DH;非組合非組合BCD;不是非;不是非組合組合BCD;調(diào)整;調(diào)整;組合;組合BCD;再調(diào)整;再調(diào)整AF1;AHAH+1;AL&0FH;結(jié)果送結(jié)果送AX中中程序?yàn)椋撼绦驗(yàn)椋篗OV AX,06MOV BX,07ADD AX,BX ;AX=0DHAAA ;執(zhí)行后;執(zhí)行后
39、AX=0103H(3 3)組合十進(jìn)制數(shù)減法調(diào)整指令)組合十進(jìn)制數(shù)減法調(diào)整指令DASDASDAS指令對組合指令對組合BCDBCD碼相減結(jié)果進(jìn)行調(diào)整,緊跟在減法指碼相減結(jié)果進(jìn)行調(diào)整,緊跟在減法指令之后,調(diào)整后的結(jié)果仍為組合令之后,調(diào)整后的結(jié)果仍為組合BCDBCD碼,碼,DASDAS對結(jié)果是進(jìn)對結(jié)果是進(jìn)行行-6-6調(diào)整。調(diào)整。例:例:SUB AL,BHSUB AL,BH DAS DAS 執(zhí)行指令前,執(zhí)行指令前,AL=86H,BH=07HAL=86H,BH=07H執(zhí)行執(zhí)行SUBSUB指令后,指令后,AL=7FH,CF=0,AF=1AL=7FH,CF=0,AF=1執(zhí)行執(zhí)行DASDAS指令后指令后,因因A
40、F=1AF=1,需進(jìn)行調(diào)整。,需進(jìn)行調(diào)整。AL=AL-6=7FH-AL=AL-6=7FH-6=79H6=79H。CF=0CF=0,AF=1AF=1。結(jié)果調(diào)整為結(jié)果調(diào)整為7979的壓縮的壓縮BCDBCD碼。碼。(4 4)非組合十進(jìn)制數(shù)減法調(diào)整指令)非組合十進(jìn)制數(shù)減法調(diào)整指令A(yù)ASAASAASAAS與與AAAAAA類似,但有兩點(diǎn)不同:類似,但有兩點(diǎn)不同:(1 1)AAAAAA指令中的(指令中的(ALAL)(ALAL)+6+6操作對應(yīng)操作對應(yīng) AASAAS中則應(yīng)改為(中則應(yīng)改為(ALAL)(ALAL)-6-6;(2 2)AAAAAA指令中的(指令中的(AHAH)(AHAH)+1+1操作對操作對 應(yīng)應(yīng)
41、AASAAS中則應(yīng)改為(中則應(yīng)改為(AHAH)(AHAH)-1-1;(5 5)非組合十進(jìn)制數(shù)乘法調(diào)整指令)非組合十進(jìn)制數(shù)乘法調(diào)整指令A(yù)AMAAM調(diào)整后的結(jié)果仍為一個正確的非組合調(diào)整后的結(jié)果仍為一個正確的非組合BCDBCD碼,放回碼,放回AXAX中。中。例如:實(shí)現(xiàn)例如:實(shí)現(xiàn)080809=070209=0702的程序?yàn)椋旱某绦驗(yàn)椋篗OV ALMOV AL,0808 MOV BL MOV BL,0909 MUL BL MUL BL;(;(ALAL)(BLBL)(AXAX)AAM AAM ;結(jié)果;結(jié)果(AXAX)=0702=0702(6 6)非組合十進(jìn)制除法調(diào)整指令)非組合十進(jìn)制除法調(diào)整指令A(yù)ADAA
42、D除法調(diào)整指令除法調(diào)整指令A(yù)ADAAD應(yīng)放在除法指令之前,先將應(yīng)放在除法指令之前,先將AXAX中的非中的非組合組合BCDBCD碼的被除數(shù)調(diào)整為二進(jìn)制數(shù),再進(jìn)行相除。碼的被除數(shù)調(diào)整為二進(jìn)制數(shù),再進(jìn)行相除。例如:要實(shí)現(xiàn)例如:要實(shí)現(xiàn)0103010306=0206=02余余0101,程序如下:,程序如下:MOV AXMOV AX,0103 0103 ;取被除數(shù);取被除數(shù) MOV BLMOV BL,06 06 ;取除數(shù);取除數(shù) AADAAD DIV BL DIV BL ;相除,得(;相除,得(ALAL)=02=02,(,(AHAH)=1=13.2.3 3.2.3 邏輯運(yùn)算與移位指令邏輯運(yùn)算與移位指令F邏
43、輯運(yùn)算指令邏輯運(yùn)算指令A(yù)NDAND目標(biāo)操作數(shù),源操作數(shù)目標(biāo)操作數(shù),源操作數(shù)OROR目標(biāo)操作數(shù),源操作數(shù)目標(biāo)操作數(shù),源操作數(shù)XORXOR目標(biāo)操作數(shù),源操作數(shù)目標(biāo)操作數(shù),源操作數(shù)NOTNOT目標(biāo)操作數(shù)目標(biāo)操作數(shù)注注:(1 1)所有指令都對操作數(shù)進(jìn)行按位操作,操作數(shù)可以是字節(jié)或字。所有指令都對操作數(shù)進(jìn)行按位操作,操作數(shù)可以是字節(jié)或字。(2 2)目標(biāo)操作數(shù)不能是立即數(shù);)目標(biāo)操作數(shù)不能是立即數(shù);(3 3)兩個操作數(shù)不能都為存儲器操作數(shù)。)兩個操作數(shù)不能都為存儲器操作數(shù)。(4 4)操作數(shù)不能是段寄存器。)操作數(shù)不能是段寄存器。F位操作位操作AND(與)主要用于將二進(jìn)制數(shù)的某些位清與)主要用于將二進(jìn)制數(shù)的
44、某些位清0AND BL,0FHxxxxxxxx (BL)00001111 0F0000 xxxx 結(jié)果結(jié)果ANDF位操作位操作OR主要用于將二進(jìn)制數(shù)的某些位置主要用于將二進(jìn)制數(shù)的某些位置1OR BL,0FHxxxxxxxx (BL)00001111 0Fxxxx1111 結(jié)果結(jié)果ORF位操作位操作XORXOR主要用于將二進(jìn)制數(shù)的某些位求反主要用于將二進(jìn)制數(shù)的某些位求反 或?qū)⒓拇嫫骱突驅(qū)⒓拇嫫骱虲FCF同時清同時清0 0。XOR AL,ALXOR BL,0FHxxxxxxxx (BL)00001111 0Fxxxxxxxx 結(jié)果結(jié)果XORF位測試位測試TESTTEST OPRD1 OPRD2 O
45、PRD1 OPRD2 用于測試二進(jìn)制數(shù)的某些位用于測試二進(jìn)制數(shù)的某些位(一般為一般為1 1位位)當(dāng)被測試位為當(dāng)被測試位為0 0時,時,ZFZF置位(置位(ZF=1ZF=1);當(dāng)被測試位為當(dāng)被測試位為1 1時,時,ZFZF復(fù)位(復(fù)位(ZF=0ZF=0)不將結(jié)果送回目標(biāo)操作數(shù),只影響標(biāo)志位。不將結(jié)果送回目標(biāo)操作數(shù),只影響標(biāo)志位。TEST AL,01HTEST AL,01HJNZ THERE ;ZF=0,JNZ THERE ;ZF=0,則寄存器的第則寄存器的第0 0位為位為1 1,轉(zhuǎn)移到,轉(zhuǎn)移到THERE THERE TESTTEST AL,1 AL,1JNZ JNZ RIGHT RIGHTTEST
46、 AL,128TEST AL,128JNZ JNZ LEFT LEFTF移位操作移位操作 (P95-96 圖圖3.17-3.18)指令格式:指令格式:SHL/SAL/SHR/SAR 目標(biāo)操作數(shù),計(jì)數(shù)目標(biāo)操作數(shù),計(jì)數(shù)移移1位時,計(jì)數(shù)值可以為立即數(shù)位時,計(jì)數(shù)值可以為立即數(shù)1移多位時,計(jì)數(shù)值必須先存入移多位時,計(jì)數(shù)值必須先存入CL寄存器寄存器MOV CL,3SHL AX,CL循環(huán)移位指令ROL/ROR/RCL/RCR 目標(biāo)操作數(shù),計(jì)數(shù)目標(biāo)操作數(shù),計(jì)數(shù)移移1位時,計(jì)數(shù)值可以為立即數(shù)位時,計(jì)數(shù)值可以為立即數(shù)1移多位時,計(jì)數(shù)值必須先存入移多位時,計(jì)數(shù)值必須先存入CL寄存器寄存器3.2.4 3.2.4 串操
47、作指令串操作指令F串傳送串傳送(MOVS)MOVS)目標(biāo)串,源串目標(biāo)串,源串(MOVSB/MOVSWMOVSB/MOVSW)F串比較串比較(CMPS)CMPS)目標(biāo)串,源串目標(biāo)串,源串(CMPSB/CMPSWCMPSB/CMPSW)F串搜索串搜索(SCAS)SCAS)目標(biāo)串,源串目標(biāo)串,源串(SCASB/SCASWSCASB/SCASW)F取操作取操作(LODS)LODS)目標(biāo)串目標(biāo)串(LODSB/LODSWLODSB/LODSW)F存操作存操作(STOS)STOS)目標(biāo)串目標(biāo)串(STOSB/STOSWSTOSB/STOSW)串操作指令的共同點(diǎn):串操作指令的共同點(diǎn):(1 1)約定)約定DS:S
48、IDS:SI為尋址源串為尋址源串,以,以ES:DIES:DI為尋址目標(biāo)串為尋址目標(biāo)串,指令中不被顯式指,指令中不被顯式指明操作數(shù)。源串明操作數(shù)。源串DSDS可加段超越可加段超越前綴而改變,目串前綴而改變,目串ESES不可段超越。不可段超越。(2 2)用方向標(biāo)志)用方向標(biāo)志 規(guī)定串處理方向。規(guī)定串處理方向。DFDF0 0 從低地址向高地址處理。從低地址向高地址處理。(3 3)每次操作后)每次操作后SISI和和DIDI根據(jù)根據(jù)DFDF的值的值自動增或減自動增或減。(4 4)當(dāng)在串操作前加)當(dāng)在串操作前加重復(fù)指令或重復(fù)前綴重復(fù)指令或重復(fù)前綴時。必須以時。必須以CXCX為計(jì)數(shù)器,存放為計(jì)數(shù)器,存放處理
49、元素的個數(shù)。串操作指令執(zhí)行一次,處理元素的個數(shù)。串操作指令執(zhí)行一次,CXCX自動減一,為自動減一,為0 0時停止時停止。(5 5)重復(fù)的數(shù)據(jù)串處理過程可以被中斷。)重復(fù)的數(shù)據(jù)串處理過程可以被中斷。F重復(fù)前綴重復(fù)前綴(不能單獨(dú)使用,只能加在串操作指令之前,用來控制不能單獨(dú)使用,只能加在串操作指令之前,用來控制 其后的基本串操作指令是否重復(fù)其后的基本串操作指令是否重復(fù))1.1.在在MOVSMOVS、LODSLODS、STOS STOS指令前加指令前加REPREP,執(zhí)行步驟如下:執(zhí)行步驟如下:(1 1)若)若CXCX0 0,則退出,否則:則退出,否則:(2 2)CX-CXCX CX執(zhí)行執(zhí)行REPNE
50、 后的串操作。后的串操作。重復(fù)重復(fù) 538005A3 72SouceDest23D005A192SIDI例:字比較例:字比較 Lea si,souce Lea di,dest Mov cx,25 CldAgain:Cmpsw Jnz Found Dec cx Jnz Again mov ax,0 jmp exitFound:dec si dec si mov ax,si Exit:hlt si-di O D S Z A P C0 0 1 0 0 1 0 0 0 23D005AB 92SouceDest23D005A192SIDIF串搜索串搜索SCASSCASBSCASW在首地址為在首地址為ES
51、:DIES:DI的串中搜索某個元素的串中搜索某個元素(字節(jié)(字節(jié)/字)字),自動修改指針自動修改指針DIDI事先要將待搜索的元素存入事先要將待搜索的元素存入AL/AXAL/AX,然后與然后與ES:DIES:DI指定的目標(biāo)指定的目標(biāo)串進(jìn)行比較串進(jìn)行比較.該指令不改變累加器和目標(biāo)串的內(nèi)容。該指令不改變累加器和目標(biāo)串的內(nèi)容。通過標(biāo)通過標(biāo)志位來體現(xiàn)結(jié)果志位來體現(xiàn)結(jié)果指令前指令前通常加重復(fù)前綴通常加重復(fù)前綴REPNZ/REPNEREPNZ/REPNE,從而當(dāng)發(fā)現(xiàn)待搜索的從而當(dāng)發(fā)現(xiàn)待搜索的元素時結(jié)束搜索。元素時結(jié)束搜索。例:例:F串搜索串搜索MOV DI,OFFSET StringMOV CX,xxMOV
52、 AL,hCLD REPNZ SCASBJNZ Not_FoundFound:Not_ Found:.例:尋找字符串中是否有字符例:尋找字符串中是否有字符 A。Lea di,souce Mov cx,30 Mov al,A cldagain:Scasb Jz find Dec cx Jnz again Mov bx,0 Jmp exit find:Dec di Mov bx,di exit:Hlt al-di O D S Z A P C0 0 1 0 0 1 0 0 0 53714149 68SouceDI例:尋找字符串中是否有字符例:尋找字符串中是否有字符 A。al-di O D S Z A
53、 P C0 0 1 0 0 1 0 0 0 5300710041004900 6800SouceDI Lea di,souce Mov cx,30 Mov ax,A cldagain:Scasw Jz find Dec cx Jnz again Mov bx,0 Jmp exit find:Dec di Dec di Mov bx,di exit:Hlt 例:尋找字符串中是否有字符例:尋找字符串中是否有字符 A。與。與 Repe/Repz,Repne/Repnz 配合使用。配合使用。Lea di,souce Mov cx,30 Mov al,A cldRepne Scasb Jz find M
54、ov bx,0 Jmp exit find:Dec di Mov bx,di exit:Hlt 53714149 68SouceDI CX不為不為 0 且且 AL 與與 di 不不 相等相等(ZF=0)時重復(fù)時重復(fù) 檢測檢測 CX=0?或或 ZF=1?是,退出是,退出 否,進(jìn)行否,進(jìn)行CX 1 CX執(zhí)行執(zhí)行REPNE 后的串操作。后的串操作。重復(fù)重復(fù) F串裝入串裝入LODSLODSBLODSW將地址為將地址為DS:SIDS:SI的一個字節(jié)的一個字節(jié)/字裝入字裝入AL/AXAL/AX,同時同時自動修改自動修改SISI串裝入指令一般沒有重復(fù)前綴串裝入指令一般沒有重復(fù)前綴例:例:MOV SI,OFF
55、SET StringMOV CX,xxMOV AH,2CLDLODSBMOV DL,ALINT 21 ;顯示器輸出字符;顯示器輸出字符LOOP NextCharNextChar:F串裝入串裝入例:在數(shù)據(jù)段例:在數(shù)據(jù)段DS中有一字符串,試將其中有一字符串,試將其每一個字符加每一個字符加 1 后送入附加段后送入附加段ES中。中。Lea si,souce Lea di,dest Mov cx,30 Cldagain:Lodsb ;只自動修改;只自動修改SI Inc al Mov es:di,al Inc di Dec cx Jnz again Hlt 23D005AB92SouceDest24D10
56、6ACSIDISI ALSI+1 SI例:在數(shù)據(jù)段例:在數(shù)據(jù)段DS中有一字符串,試將其中有一字符串,試將其每一個字加一后送入附加段每一個字加一后送入附加段ES中。中。Lea si,souce Lea di,dest Mov cx,20 Cldagain:Lodsw Inc ax Mov es:di,ax Inc di Inc di Dec cx Jnz again Hlt 23D005AB92SouceDest24D006ABSIDISI AXSI+2 SILods 指令一般不與指令一般不與Rep指令配合使用指令配合使用F串存儲串存儲STODSSTODSBSTODSW將將AL/AX的值存入地址
57、為的值存入地址為ES:DI的內(nèi)存單元,自動修改的內(nèi)存單元,自動修改DI,使其使其指向下一個單元指向下一個單元利用重復(fù)前綴利用重復(fù)前綴REP,可可以建立一個取值相同的以建立一個取值相同的數(shù)據(jù)串?dāng)?shù)據(jù)串CX=0?CX-1CXSTOS例:初始化內(nèi)存,使其內(nèi)容全部為例:初始化內(nèi)存,使其內(nèi)容全部為0。Lea di,dest mov al,0 Mov cx,30 Cldagain:Stosb Dec cx Jnz again Hlt 23D005AB92Dest00000000DI(AL)DI(DI)+1 DI例:初始化內(nèi)存,使其內(nèi)容全部位例:初始化內(nèi)存,使其內(nèi)容全部位0。Lea di,dest mov a
58、x,0 Mov cx,15 Cldagain:Stosw Dec cx Jnz again Hlt 23D005AB92Dest00000000DI(AL)DI(DI)+2 DI例:初始化內(nèi)存,使其內(nèi)容全部為例:初始化內(nèi)存,使其內(nèi)容全部為0。與與 Rep 指令指令 配合使用。配合使用。Lea di,dest mov al,0 Mov cx,30 Cld Rep Stosb Hlt 23D005AB92Dest00000000DI例:在數(shù)據(jù)段例:在數(shù)據(jù)段DS中有一字符串,試將其中有一字符串,試將其每一個字符加一后送入附加段每一個字符加一后送入附加段ES中。中。Lea si,souce Lea d
59、i,dest Mov cx,30 Cldagain:Lodsb Inc al Stosb Dec cx Jnz again Hlt 23D005AB92SouceDest24D106ACSIDI例:在起始地址為例:在起始地址為Block的內(nèi)存中有一數(shù)據(jù)塊,其中有正數(shù),的內(nèi)存中有一數(shù)據(jù)塊,其中有正數(shù),也有負(fù)數(shù),要求將正負(fù)數(shù)分開,分別送至同一段的兩個區(qū)域也有負(fù)數(shù),要求將正負(fù)數(shù)分開,分別送至同一段的兩個區(qū)域 p_data和和M_data中中 Lea si,block Lea di,P_data Lea bx,M_data Mov ax,seg block Mov ds,ax Mov es,ax cl
60、dGoon:Lodsb Test al,80h Jnz minu Stosb Jmp again538205blockM_data82DIDSP_dataBXSI5305minu:Xchg bx,di Stosb xchg bx,diagain:dec cx jnz goon hlt 五、控制轉(zhuǎn)移指令五、控制轉(zhuǎn)移指令JMP OPRDJNZ OPRD(等)(等)LOOP OPEDLOOPE/LOOPZ OPRDLOOPNE/LOOPNZ OPRDCALL OPRDRETINT NINTOIRET無條件轉(zhuǎn)移無條件轉(zhuǎn)移根據(jù)上一條指令設(shè)置的根據(jù)上一條指令設(shè)置的標(biāo)志位的情況轉(zhuǎn)移標(biāo)志位的情況轉(zhuǎn)移計(jì)數(shù)非零循
61、環(huán)計(jì)數(shù)非零循環(huán)計(jì)數(shù)非零循環(huán)且結(jié)果為計(jì)數(shù)非零循環(huán)且結(jié)果為0循環(huán)循環(huán)計(jì)數(shù)非零循環(huán)且結(jié)果不為計(jì)數(shù)非零循環(huán)且結(jié)果不為0循環(huán)循環(huán)調(diào)用子程序調(diào)用子程序從子程序返回從子程序返回軟中斷軟中斷溢出時中斷溢出時中斷中斷返回中斷返回1.無條件轉(zhuǎn)移調(diào)用和返回類指令無條件轉(zhuǎn)移調(diào)用和返回類指令JMPJMP和和CALLCALL指令都是通過改變指令都是通過改變CSCS和和IPIP值改變程序執(zhí)行的,但不同的值改變程序執(zhí)行的,但不同的是,是,CALLCALL指令要先將指令要先將IPIP和和CSCS的當(dāng)前值入棧保存的當(dāng)前值入棧保存,以務(wù)返回時使用;,以務(wù)返回時使用;RETRET指令則將指令則將CALLCALL指令入棧保存的值彈回到
62、指令入棧保存的值彈回到CSCS和和IPIP中,實(shí)現(xiàn)正確的中,實(shí)現(xiàn)正確的返回。返回。80868086的轉(zhuǎn)移、調(diào)用和返回指令根據(jù)轉(zhuǎn)移地址在的轉(zhuǎn)移、調(diào)用和返回指令根據(jù)轉(zhuǎn)移地址在段內(nèi)段內(nèi)或或段外段外,又分為,又分為段內(nèi)轉(zhuǎn)移段內(nèi)轉(zhuǎn)移和和段間轉(zhuǎn)移段間轉(zhuǎn)移即即近轉(zhuǎn)移(近轉(zhuǎn)移(NEARNEAR)和遠(yuǎn)轉(zhuǎn)移()和遠(yuǎn)轉(zhuǎn)移(FARFAR)若轉(zhuǎn)移到若轉(zhuǎn)移到當(dāng)前代碼段,則目標(biāo)屬性為當(dāng)前代碼段,則目標(biāo)屬性為NEARNEAR,只修改只修改IPIP;若目標(biāo)地址在其他的若目標(biāo)地址在其他的段,則目標(biāo)屬性為段,則目標(biāo)屬性為FARFAR,稱為稱為段間轉(zhuǎn)移段間轉(zhuǎn)移,同時修改同時修改IPIP與與CSCS。段內(nèi)和段間的轉(zhuǎn)移指令尋址方法又有兩
63、種,即:段內(nèi)和段間的轉(zhuǎn)移指令尋址方法又有兩種,即:直接尋址和間接尋址直接尋址和間接尋址直接轉(zhuǎn)移直接轉(zhuǎn)移:轉(zhuǎn)移的目標(biāo)地址直接出現(xiàn)在指令中;:轉(zhuǎn)移的目標(biāo)地址直接出現(xiàn)在指令中;間接轉(zhuǎn)移間接轉(zhuǎn)移:轉(zhuǎn)移的目標(biāo)地址間接存儲在某一:轉(zhuǎn)移的目標(biāo)地址間接存儲在某一寄存器寄存器或或內(nèi)存變量內(nèi)存變量中。中。段內(nèi)轉(zhuǎn)移段內(nèi)轉(zhuǎn)移段間轉(zhuǎn)移段間轉(zhuǎn)移段內(nèi)直接短轉(zhuǎn)移段內(nèi)直接短轉(zhuǎn)移段內(nèi)直接近轉(zhuǎn)移段內(nèi)直接近轉(zhuǎn)移段內(nèi)間接轉(zhuǎn)移段內(nèi)間接轉(zhuǎn)移段間直接轉(zhuǎn)移段間直接轉(zhuǎn)移段間間接轉(zhuǎn)移段間間接轉(zhuǎn)移分類分類名稱名稱指令指令-128127-3276832767-3276832767轉(zhuǎn)移范圍轉(zhuǎn)移范圍段間段間段間段間 段內(nèi)直接短轉(zhuǎn)移段內(nèi)直接短轉(zhuǎn)移 操作數(shù):
64、操作數(shù):短短-標(biāo)號標(biāo)號 執(zhí)行的操作執(zhí)行的操作:(IP)(IP)+8 位位移量位位移量 轉(zhuǎn)移范圍:轉(zhuǎn)移范圍:-128 +127 段內(nèi)直接近轉(zhuǎn)移段內(nèi)直接近轉(zhuǎn)移 操作數(shù):操作數(shù):NEAR-標(biāo)號標(biāo)號 執(zhí)行的操作執(zhí)行的操作:(IP)(IP)+16 位位移量位位移量 轉(zhuǎn)移范圍:轉(zhuǎn)移范圍:-32768 +32767段內(nèi)直接轉(zhuǎn)移段內(nèi)直接轉(zhuǎn)移 JMP 標(biāo)號標(biāo)號 05A20010EB03A200 20F4Short 當(dāng)前當(dāng)前IP+8位移量位移量Near 當(dāng)前當(dāng)前IP+16位移量位移量 mov al,bl cmp al,0 jnS pdata mov 1000,al jmp nextpdata:mov 2000,a
65、l next:hlt JMP next+127-128-32768+3276710510610710810910a10b10c10d10eNextpdataJmp bx (bx)=120 jmp 120Ip=(bx)=120Jmp datasi data=1000 SI=500 jmp 1500Ip=1500Jmp bx10510610710810910a120121122123Mov 段內(nèi)間接轉(zhuǎn)移段內(nèi)間接轉(zhuǎn)移 操作數(shù):操作數(shù):16位通用寄存器、存儲器位通用寄存器、存儲器 執(zhí)行的操作執(zhí)行的操作:(IP)(EA)轉(zhuǎn)移范圍:轉(zhuǎn)移范圍:-32768 +32767例:例:段間直接轉(zhuǎn)移段間直接轉(zhuǎn)移 操作
66、數(shù):操作數(shù):far-標(biāo)號標(biāo)號 執(zhí)行的操作執(zhí)行的操作:(IP)標(biāo)號所在段的段內(nèi)偏移地址標(biāo)號所在段的段內(nèi)偏移地址 (CS)標(biāo)號所在段的段地址標(biāo)號所在段的段地址 轉(zhuǎn)移范圍:段間轉(zhuǎn)移范圍:段間 例如:例如:JMP FAR PTR TABLE段間間接轉(zhuǎn)移段間間接轉(zhuǎn)移 操作數(shù):存儲器(操作數(shù):存儲器(32位)位)執(zhí)行的操作執(zhí)行的操作:(IP)(EA)(CS)(EA+2)轉(zhuǎn)移范圍:段間轉(zhuǎn)移范圍:段間 例如:例如:JMP DWORD TABLESPSI 例:例:間接轉(zhuǎn)移間接轉(zhuǎn)移若若BX0002H,且變量定義為:,且變量定義為:DBT1 DW 0400HDBT2 DD 01000020HTAB DW 0600H,0640H 06A0HJMP BX 段內(nèi)間接轉(zhuǎn)移段內(nèi)間接轉(zhuǎn)移 IP=0002H JMP DBT1 段內(nèi)間接轉(zhuǎn)移段內(nèi)間接轉(zhuǎn)移 IP=0400H JMP DBT2 段間間接轉(zhuǎn)移段間間接轉(zhuǎn)移 CS:IP0100:0020HJMP TABBX+2.段內(nèi)間接轉(zhuǎn)移段內(nèi)間接轉(zhuǎn)移IP06A0HJMP WORD PTR BX段內(nèi)間接轉(zhuǎn)移段內(nèi)間接轉(zhuǎn)移段內(nèi)段內(nèi)調(diào)用調(diào)用段間段間調(diào)用調(diào)用直接調(diào)用直接調(diào)用間接調(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度組織生活會個人“4個方面”對照檢查材料文稿
- 2024年組織生活會個人對照檢查發(fā)言材料(普通黨員)例文
- 2025年旅游業(yè)高質(zhì)量發(fā)展行動方案文稿
- 2025年機(jī)關(guān)組織生活會班子對照檢查材料范文
- 普通黨員2024年組織生活會個人發(fā)言提綱(圍繞“四個帶頭”方面)文稿
- 鄉(xiāng)班子領(lǐng)導(dǎo)干部2024年度民主生活會“四個帶頭”對照檢查發(fā)言材料文稿
- 2024年度黨員領(lǐng)導(dǎo)干部民主生活會整改落實(shí)方案例文
- 關(guān)于2024年度民主生活會個人問題的整改方案例文
- 2025年醫(yī)療保障工作要點(diǎn)范文
- 青年人才“育苗蹲苗”培養(yǎng)實(shí)施方案范文
- 2025駐村第一書記組織生活會對照檢查材料例文
- 國企公司2025年安全生產(chǎn)工作要點(diǎn)范文
- 2024年度國企個人組織生活會前準(zhǔn)備情況、上年度整改落實(shí)情況范文
- 2024年度組織生活會黨支部委員會全年工作開展情況匯報(bào)例文
- 機(jī)關(guān)黨組2024年度從案件中汲取教訓(xùn)做好以案促改專題民主生活會整改落實(shí)情況報(bào)告例文
相關(guān)資源
更多