3微型計(jì)算機(jī)的指令系統(tǒng)課件_第1頁(yè)
3微型計(jì)算機(jī)的指令系統(tǒng)課件_第2頁(yè)
3微型計(jì)算機(jī)的指令系統(tǒng)課件_第3頁(yè)
3微型計(jì)算機(jī)的指令系統(tǒng)課件_第4頁(yè)
3微型計(jì)算機(jī)的指令系統(tǒng)課件_第5頁(yè)
已閱讀5頁(yè),還剩179頁(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)介

第三章微型計(jì)算機(jī)的指令系統(tǒng)

§1指令的構(gòu)成和操作數(shù)的類型

一、指令構(gòu)成一條指令由操怍碼字段和操作數(shù)字段構(gòu)成。1、操作碼字段操作碼字段表明指令執(zhí)行何種性質(zhì)的操作。2、操作數(shù)字段操作數(shù)字段是指明指令執(zhí)行的操作所需要的操作數(shù).

該字段中,可以是操作數(shù)本身或是操作數(shù)地址。

1

二、操作數(shù)類型操作數(shù)有以下三種類型:立即數(shù)操作數(shù)、寄存器操 作數(shù)和存儲(chǔ)器操作數(shù)。

1、立即數(shù)操作數(shù) 立即數(shù)只能作為源操作數(shù),而不能作為目標(biāo)操作 數(shù)。立即數(shù)可以是8位和16位帶符號(hào)數(shù)或者無(wú)符號(hào) 數(shù),并只能是整數(shù),不能是小數(shù)。

2、寄存器操作數(shù)寄存器操作數(shù)可以存放于CPU內(nèi)部寄存器中,即通 用寄存器、地址指針寄存器、變址寄存器、段寄存 器。所有的通用寄存器和地址指針寄存器既可以用 作源操作數(shù),又可以用作目標(biāo)操作數(shù)。

3、存儲(chǔ)器操作數(shù)存儲(chǔ)器操作數(shù)的數(shù)據(jù)可能是8位、16位和32位的二進(jìn) 制數(shù)。在指令中,存儲(chǔ)器操作數(shù)可以分別作為源操 作數(shù)和目標(biāo)操作數(shù),但是不允許二者同時(shí)都為存儲(chǔ) 器操作數(shù)。二、操作數(shù)類型2

§28086的尋址方式

一、立即尋址 操作數(shù)包含在指令中,此操作數(shù)又稱為立即數(shù),(立 即數(shù)只能作源操作數(shù))立即數(shù)可為8位,也可為16 位,它用來(lái)給寄存器存貯器賦初值。二、寄存器尋址 操作數(shù)在某一寄存器中。一條指令中,可以對(duì)源 操作數(shù)采用寄存器尋址,也可對(duì)目的操作數(shù)采用 寄存器尋址,還可兩者都用寄存器尋址。寄存器可為:AX,BX,CX,DX,SI,DI,SP,BP AH,AL,BH,BL,CH,CL,DH,DL。

§28086的尋址方式3

三、直接尋址操作數(shù)的地址包含在指令中。 (注意:此地址為16位偏移地址) 通常操作數(shù)一般在數(shù)據(jù)段區(qū)域中,如果要對(duì)其他段 寄存器所指出的存貯區(qū)進(jìn)行尋址(所謂段超越),則在本條指令中,須用前綴指出段寄存器名。

三、直接尋址4四、寄存器間接尋址 操作數(shù)的地址在某寄存器中, 這些寄存器可以為:BX,BP,SI,DI之一。

有效地址:EA=[BX或BP或SI或DI]注:如果指令前沒(méi)有用前綴指明具體的段寄存器,則 尋址時(shí)默認(rèn)為DS/SS。 采用寄存器間址允許在指令中指定一個(gè)位移量(8位 或16位)。其有效地址EA為寄存器內(nèi)容加上此位移 量。(稱寄存器相對(duì)尋址)

有效地址:EA=[(BX或BP或SI或DI)+位移量(帶符號(hào)數(shù))]51、數(shù)據(jù)段基址尋址用BX寄存器進(jìn)行間接尋址。2、堆棧段基址尋址用BP寄存器進(jìn)行間接尋址。3、變址尋址用SI,DI寄存器進(jìn)行間接尋址。4、基址加變址尋址用BX、BP和SI、DI寄存器組合起來(lái)進(jìn)行間接尋址。有效地址EA=[(BX或BP)+(SI或DI)]

注:只要用上BP寄存器,那么默認(rèn)的段寄存器就是SS,在其他情況,則為DS。否則應(yīng)用前綴指出相應(yīng)段寄存器名。1、數(shù)據(jù)段基址尋址6

附:幾種常見(jiàn)的書寫形式

MOVAX,VALUE→MOVAX,[VALUE](VALUE為符號(hào)地址)MOVAX,ES:VALUE→MOVAX,ES:[VALUE]MOVAX,COUNT[SI]→MOVAX,[COUNT+SI](COUNT為位移量的符號(hào)地址)MOVAX,[BX][DI]→MOVAX,[BX+DI]MOVAX,MASK[BX][SI]→MOVAX,MASK[BX+SI] →MOVAX,[MASK+BX+SI]7

5、例1:DS=2000H,ES=2100H,SS=1500H,SI=00A0H,BX=0100H,BP=0010H, VAL=0050H,請(qǐng)指出下列的源操作數(shù)字段是什么尋址方式? 它的物理地址是多少?A、MOVAX,OABHB、MOVAX,BXC、MOVAX,[VAL+100H]D、MOVAX,[BX]E、MOVAX,ES:[BX]F、MOVAX,[BP]G、MOVAX,[SI]H、MOVAX,[VAL+BX+SI]5、例1:DS=2000H,ES=2100H,SS8例2:根據(jù)以下要求寫出相應(yīng)的匯編語(yǔ)言指令A、把數(shù)OB5H與(AL)相加,結(jié)果送回AL中。

B、把BX和DX內(nèi)容相加,結(jié)果存入DX中。

C、用位移量0524H的直接尋址方式把存貯器中一個(gè)字 與數(shù)2A59相加,結(jié)果送回存貯單元中。

D、用BX和SI的基址變址尋址方式,把存貯器中一個(gè)字 節(jié)與AL內(nèi)容相加,結(jié)果存入AL中。

E、用BX和位移量OB2H的寄存器相對(duì)尋址方式把存貯 器中一個(gè)字和CX相加,結(jié)果存入內(nèi)存單元中。

例2:根據(jù)以下要求寫出相應(yīng)的匯編語(yǔ)言指令hijiyi.co9

§38086/8088CPU指令系統(tǒng)一、數(shù)據(jù)傳送指令

1、通用數(shù)據(jù)傳送指令<1>MOV傳送指令格式:MOVDST,SRC DST:目的操作操作:DSTSRCSRC:源操

A、立即數(shù)到寄存器存貯器reg,data

注:不包括段寄mem,data

10

B、從寄存器到寄存器reg,reg從存貯器到寄存器mem,reg從寄存器到存貯器reg,mem注:不包括段寄

11C、從存貯器/寄存器到段寄存器(mem/reg,segreg)

注:不能往CS中傳送數(shù)據(jù).D、從段寄存器到存貯器/寄存器(segreg,mem/reg)

12

注:1,不影響標(biāo)志 2,不允許兩操作數(shù)都使用存儲(chǔ)器3,不允許往CS中送數(shù) 4,8位傳送/16位傳送決定于指令中寄存器及立 即數(shù)形式 5,凡給SS賦值時(shí),系統(tǒng)會(huì)自動(dòng)禁止中斷,等下 條指令執(zhí)行完后才會(huì)恢復(fù)E、例:一批數(shù)的傳送

13<2>PUSH進(jìn)棧與POP出棧指令

A、堆棧 堆棧是以“后進(jìn)先出”方式工作的一個(gè)存貯區(qū)。它存 在于堆棧段中.堆棧在計(jì)算機(jī)工作中起著重要作用, 它在子程序結(jié)構(gòu)的程序以及中斷程序中是不可少 的。堆棧指針寄存器SP用來(lái)指示堆棧在那里。它始 終指向當(dāng)前堆棧的棧頂。

注:在8086中堆棧的存取是以字為單位進(jìn)行的

B、PUSH/POP指令格式與操作格式:PUSHSRC操作:1,SP-1SP2,高字節(jié)(SP)3,SP-1SP4,低字節(jié)(SP)格式:POPDST操作:1,低字節(jié)彈出2,SP+1SP3,高字節(jié)彈出4,SP+1SP<2>PUSH進(jìn)棧與POP出棧指令14C、注:PUSH/POP指令可使用除立即數(shù)以外的所有尋址 方式。指令也可以指定段寄為操作數(shù),但POP指 令不允許用CS寄存器。所有標(biāo)志不受影響。D、例1:兩寄存器內(nèi)容交換分析下面程序段:設(shè)SP=2000H,SS=1000H

ST:PUSHBXPUSHCX POPBX POPCX

15例2:設(shè)BX=2A0CH,CX=A530H,SS=2000H 程序執(zhí)行后,BX=AX=CX=SP= ST:MOVSP,1000H PUSHBX PUSHCX MOVAX,62CEH ADDAX,SP POPBX HLT例3:分析下面程序: ST:MOVCX,5 POPCX L1:PUSHCX DECCX MOVCX,10JNZL1L2:DECCXHLT JNZL2

例2:設(shè)BX=2A0CH,CX=A530H,SS=16

<3>XCHG指令(交換)

A、XCHG指令格式與操作XCHGOPR1,OPR2 OPR1←→OPR2B、XCHG指令可以在寄存器之間或寄存器與存貯器之 間交換信息。C、例

注:不允許使用段寄。 該指令不影響標(biāo)志位。

17

2、累加器專用傳送指令

<1>IN/OUT輸入輸出指令A、指令的格式與操作長(zhǎng)格式:INAL,PORTAL←(PORT) INAX,PORTAX←(PORT+1,PORT)OUTPORT,AL(PORT)←ALOUTPORT,AX(PORT+1,PORT)←AX短格式:INAL,DXAL←(DX)INAX,DXAX←(DX+1,DX)OUTDX,AL(DX)←ALOUTDX,AX(DX+1,DX)←AX注:I/O指令中只能用AX/AL與DX和8位的端口地址。

18

B、用長(zhǎng)格式時(shí)可以在指令中直接指定端口號(hào),但只限

于外設(shè)的前256個(gè)端口,當(dāng)端口號(hào)≥256時(shí),只能使

用短格式,(間接),必須注意端口號(hào)即為外設(shè)地

址,它與段寄無(wú)關(guān)。I/O指令不影響標(biāo)志位。C、例1:

D、例2:

OUTDX,ALB、用長(zhǎng)格式時(shí)可以在指令中直接指定端口號(hào),但只限

19

<2>XLAT換碼指令A、指令格式與操作XLATOPR或XLAT AL←[BX+AL]B、注:使用XLAT指令,應(yīng)先建立一個(gè)表格。

表格首址存入BX中,需轉(zhuǎn)換的代碼應(yīng)是相對(duì)于 表格首址的位移量(即項(xiàng)號(hào))也提前放入AL 中。 表格的內(nèi)容(即項(xiàng)值)則是所要換取的代碼 它將存入AL中。指令格式中的OPR為表格首址(符號(hào)地址)。

所有標(biāo)志不受影響。所有標(biāo)志不受影響。hijiyi.co20C、例設(shè):BX=0040H,AL=02H,DS=F000H項(xiàng)號(hào) 項(xiàng)值表格:0(F0040H)=11H(0040H為表格首址) 1(F0041H)=22H2(F0042H)=33H 3(F0043H)=44H 4(F0044H)=55H 5(F0045H)=66H

則:執(zhí)行XLAT后,AL=21

3、地址傳送指令

A、指令格式與操作

偏移地址送寄存器LEAREGREGSRC 把源操作數(shù)的偏移地址送寄存器。

指針?biāo)图拇嫫骱虳SLDSREG,SRCREG(SRC)DS(SRC+2) 把源操作數(shù)提供的32位數(shù)送寄存器與段寄DS

指針?biāo)图拇嫫骱虴SLESREG,SRCREG(SRC) ES(SRC+2)把源操作數(shù)提供的32位數(shù)送寄存器與段寄ES注:所有標(biāo)志不受影響REG必須為16位通用寄存器SRC為內(nèi)存單元地址。

22B、例

LEABX,[BX+SI]

執(zhí)行前:BX=0400HSI=003CH 執(zhí)行后:BX=

LDSSI,[10H]

執(zhí)行前:DS=C000H,(C0010H)=0180H (0012H)=2000H 執(zhí)行后:SI=DS=

LESDI,[BX]

執(zhí)行前:DS=B000H,BX=080AH (B080AH)=05AEH,(B080CH)=4000H 執(zhí)行后:DI=ES=234、標(biāo)志寄存器傳送指令 標(biāo)志送AH:LAHFAH←PSW的低字節(jié) AH送標(biāo)寄:SAHFPSW的低字節(jié)←AH 標(biāo)志進(jìn)棧:PUSHFSP←SP-2; (SP+1,SP)←PSW標(biāo)志出棧:POPFPSW←(SP+1,SP) SP←SP+2PSW15870

AH////OFDFIFTFSFZF/AF/PF/CF///////OFDFIFTFSFZF/AF/PF/24

三、算術(shù)運(yùn)算指令1、加法指令

加:ADDDST,SRC DST←SRC+DSTreg,reg;reg,mem;mem,regreg,data;mem,data;ac,data

帶進(jìn)位加:ADCDST,SRC (DST)←(SRC)+(DST)+CFreg,reg;reg,mem;mem,regreg,data;mem,data;ac,data 加1:INCOPR (OPR)←─(OPR)+1(reg;mem) 注:INC指令不影響CF標(biāo)志三、算術(shù)運(yùn)算指令252、減法指令

減:SUBDST,SRC DST←DST-SRC 帶借位減:SBBDST,SRC OST←DST-SRC-CF

減1:DECOPR OPR←OPR-1 求補(bǔ):NEGOPROPR←0-DPR

比較:CMPOPR1,OPR2 OPR1-OPR2

注:CMP指令執(zhí)行減操作,但它不保存結(jié)果,只是 根據(jù)操作結(jié)果設(shè)置條件標(biāo)志位。CMP指令后 往往跟著一條條件快移指令,實(shí)現(xiàn)程序分支。DEC指令不影響CF標(biāo)志。263、乘法指令格式:無(wú)符號(hào)數(shù)乘 MULSRC (reg/mem)

帶符號(hào)數(shù)乘IMVLSRC操作:字節(jié)操作AL*(SRC)AX字操作AX*(SRC)DX,AX

注:執(zhí)行前,必須將被乘數(shù)送入AX/AL中。 MUL:當(dāng)積的高位為0,則CF=0,OF=0否則均為1。IMVL:當(dāng)積的高一半是低一半的符號(hào)擴(kuò)展則 CF=OF=0,否則為1。

例:設(shè)AL=04HBH=02HAH=E5H則執(zhí)行MULBH后AX=

27

4、除法指令格式:無(wú)符號(hào)數(shù)除DIVSRC (reg/mem)

帶符號(hào)數(shù)除IDIVSRC操作:字節(jié)操作:AX÷(SRC)→商AL,余AH字操作:DX,AX÷(SRC)→商AX,余DX

注:IDIV、DIV執(zhí)行前,必須將被除數(shù)送入指定寄存器 AX,DX中。用除法指令時(shí),必須注意它要求商為8位(字節(jié))/ 16位(字),如果被除數(shù)的高8位(字節(jié))或16位 (字)大于除數(shù)的絕對(duì)值,商就會(huì)產(chǎn)生溢出,此時(shí) 會(huì)作除數(shù)為0的情況來(lái)處理。例:設(shè)AX=0009HBH=02H則執(zhí)行DIVBH后AL=AH=

4、除法指令28

D、字節(jié)轉(zhuǎn)換為字指令: 格式:CBW操作:AL的內(nèi)容符號(hào)擴(kuò)展到AH。

字轉(zhuǎn)換為雙字指令: 格式:CWD操作:AX的內(nèi)容符號(hào)擴(kuò)展到DX。

注:CBW,CWD指令不影響條件碼。

例:設(shè)有兩個(gè)16位數(shù)存于AX,BX中,求Z=AX/BX

5、十進(jìn)制調(diào)整指令A、壓縮的BCD碼:用4位2進(jìn)制表示一個(gè)十進(jìn)制數(shù)位。 如502D─→0101,0000,0010B

非壓縮的BCD碼:以8位為一組表示一個(gè)十進(jìn)制數(shù) 位,其中低4位為BCD碼,高4位沒(méi) 有意義如:502D─→00110101,00110000,0011,0010B。 注:ASCII碼是一種非壓縮的BCD碼。D、字節(jié)轉(zhuǎn)換為字指令: 格式:C29

B、壓縮的BCD碼調(diào)正指令 DAA: 條件:用ADD或ADC將兩個(gè)壓縮BCD碼 相加,和存于AL中。操作:將和AL調(diào)正到壓縮的BCD格式存入AL中。

DAS: 條件:用SUB或SBB將兩個(gè)壓縮BCD碼 相減,差存于AL中。操作:將AL中的差調(diào)正到壓縮的BCD格 式存入AL中。

注:DAA/DAS對(duì)OF標(biāo)志無(wú)定義對(duì)其他標(biāo)志有影響。

30

例1:設(shè):AL=28H,BL=68H執(zhí)行:ADDAL,BLDAA 指令后:AL=CF=AF=

例2:設(shè):AL=86H,BL=07H執(zhí)行:SUBAL,BLDAS 指令后:AL=CF=AF=

31C、非壓縮的BCD碼調(diào)整指令A(yù)AA:加法的ASCII調(diào)正指令 條件:用ADD/ADC將2個(gè)非壓縮BCD碼相加, 和存于AL中。 操作:將AL中和調(diào)正到非壓縮的BCD格式。將 調(diào)正產(chǎn)生的進(jìn)位值加到AH中。

AAS:減法的ASCII調(diào)正指令 條件:用SUB/SBB將2個(gè)非壓縮BCD碼相減, 差存于AL中。 操作:將AL中差調(diào)正到非壓縮BCD格式,其調(diào) 正產(chǎn)生的借位從AH中減去。

32

AAM:乘法的ASCII調(diào)正指令。(對(duì)結(jié)果調(diào)正) 條件:用MUL將2個(gè)非壓縮BCD碼相乘(要求高4 位為0),結(jié)果存于AL中。 操作:將AL內(nèi)容除以O(shè)AH,其商存于AH中,余 數(shù)存于AL中。

AAD:除法的ASCII調(diào)整指令(對(duì)被除數(shù)必須進(jìn)行調(diào)整) 操作:AH*10+AL→AL;0→AH 將AX中的被除數(shù)(非壓縮BCD碼,高4位為0)調(diào) 整成二進(jìn)制數(shù)例:a、設(shè):AX=0505H,BL=09H執(zhí)行:ADDAL,BLAAA后:AX=b、設(shè):AL=07H,BL=09H執(zhí)行:MULAL,BLAAM后:AH=AL=c、設(shè):AX=0604H執(zhí)行:AAD后:AX=AAM:乘法的ASCII調(diào)正指令。(對(duì)結(jié)果調(diào)正)h33

6、舉例A、試編一程序計(jì)算一批數(shù)中,0的個(gè)數(shù)。

34B、設(shè)有100個(gè)無(wú)符號(hào)字節(jié)數(shù)存于以TAB為首址的單元中,試將其最大值存于AL中.最小值存于BL中。

B、設(shè)有100個(gè)無(wú)符號(hào)字節(jié)數(shù)存于以TAB為首址的單元35

C、試分析下面程序功能:

ST:LEASI,DATA1

LEADI,DATA2 MOVCX,5

CLC

L1:MOVAL,[SI]

MOVBL,[DI]

ADCAL,BL

DAA

MOV[SI],AL

INCSI

INCDI

LOOPL1

MOVAL,0

ADCAL,0

MOV[SI],AL

HLT

C、試分析下面程序功能:

ST:LEA36

四、邏輯運(yùn)算和移位指令1、邏輯運(yùn)算指令(按位操作)邏輯與:ANDDST,SRCDST←DST∧SRC reg,regreg,memmem,reg reg,datamem,data

邏輯或:ORDST,SRCDST←DST∨URC

邏輯非:NOTOPR OPR←OPR

異或:XORDST,SRCDST←DSTVSRC

測(cè)試:TESTOPR1,OPR2OPR1∧OPR2注:NOT不影響標(biāo)志位,其余4條將使CF=OF=0,AF無(wú) 定義, 對(duì)SF,ZF,PF有影響。邏輯運(yùn)算指令對(duì)處理操作數(shù)的某些位很有用。它可 屏蔽某些位,可使某些位置“1”,可測(cè)試某些位等.四、邏輯運(yùn)算和移位指令37

2、移位指令邏輯左移:SHLOPR,CNT

邏輯右移:SHROPR,CNT

算術(shù)左移:SALOPR,CNT算術(shù)右移:SAROPR,CNT

2、移位指令38

循環(huán)左移:ROLOPR,CNT循環(huán)右移:ROROPR,CNT帶進(jìn)位循環(huán)左移:RCLOPR,CNT帶進(jìn)位循環(huán)右移:RCROPR,CNT其中:OPR:reg;memCNT:1或CL循環(huán)左移:39

注:移位指令:OF位當(dāng)CNT=1有效,在移位后D7值發(fā) 生變化時(shí)1→OF,否則為o。它影響SF,ZF,PF,對(duì)AF無(wú)定義。循環(huán)指令:不影響除OF,CF以外的其它條件標(biāo)志。 OF影響同移位指令

例:a、設(shè):SI=1450H則:執(zhí)行MOVCL,2SHLSI,CL后,SI=CF=b、計(jì)算BX*6

c、計(jì)算AX/256,結(jié)果存于AL中

注:移位指令:OF位當(dāng)CNT=1有效,在移位后D7值發(fā)40

五、串處理指令串處理指令是指用一條指令實(shí)現(xiàn)對(duì)一串字符或數(shù)據(jù) 的操作。8086的串處理指令有如下幾個(gè)特點(diǎn):a、通過(guò)加重復(fù)前綴(REPREPNZ等)實(shí)現(xiàn)串操作。b、可以對(duì)字節(jié)/字串進(jìn)行操作c、用SI對(duì)源操作數(shù)進(jìn)行間接尋址(在DS段中),用DI對(duì) 目的操作數(shù)進(jìn)行間接尋址(在ES段中)。d、串操作時(shí),地址的修改與方向標(biāo)志DF有關(guān),當(dāng)DF=1 時(shí),SI/DI作自動(dòng)減量修改,當(dāng)DF=0時(shí),SI/DI作 自動(dòng)增量修改。e、在執(zhí)行串操作指令過(guò)程中,IP保持指向重復(fù)前綴 (前綴本身也是一條指令)的偏移地址。

41

1、字符串傳送指令與重復(fù)前綴指令

A、REPCX←CX-1,當(dāng)CX=0退出重復(fù),否則 執(zhí)行其后的串指令。

B、MOVSB (DI)←─(SI)

MOVSW SI←SI±1或2 DI←DI±1或2。 (DF=0為"+";DF=1為"-")

注:MOVSB(字節(jié))/MOVSW(字)指令前通常加REP,

該指令不影響F標(biāo)志。42

C、例:一批數(shù)的傳送

a、43

b、

c、b、44

2、取字符串指令

LODSB AC←(SI)

LODSWSI←SI±1減2 (DF=0為"+";DF=1為"-")注:此指令前,通常不加REP,它不影響F標(biāo)志。

例:數(shù)0的個(gè)數(shù)存于CH中

2、取字符串指令例:數(shù)0的個(gè)數(shù)存于CH中hij45

3、存字符串指令 STOSB (DI)←AC

STOSWDI←DI±1或2. DF=0為"+";DF=1為"-"注:該指令前加REP后,可以使一批內(nèi)存單元,填滿 相同的數(shù)。該指令不影響F標(biāo)志。

例:使0400H開(kāi)始的256個(gè)單元清0

3、存字符串指令例:使0400H開(kāi)始的2546

4、字符串比較指令與相等/不相等,為0/不為0,重復(fù)前綴指令

A、REPE CX←CX-1,當(dāng)CX=0或ZF=0

REPZ退出重復(fù),否則執(zhí)行其后的串指令

B、REPNE CX←CX-1,當(dāng)CX=0或ZF=1

REPNZ退出重復(fù),否則執(zhí)行其后的串指令

C、CMPSB (SI)-(DI)

CMPSWSI←SI±1或2; DI←DI±1或2。DF=0為“+”;DF=1為“-”47D、例:判一批數(shù)是否與要求的數(shù)相同

48

5、字符串檢索指令按累加器中給出的字節(jié)/字對(duì)ES:DI所指的字節(jié)/字串進(jìn)行檢索,建立相應(yīng)標(biāo)志。

A、SCASBAC-(DI)

SCASWDI←DI±1或±2

B、例:100個(gè)字符存于以TAB為首址單元中,試檢索A字符的位置,位置值存于DX中,若無(wú)A字使A=-1

5、字符串檢索指令49

六、控制轉(zhuǎn)移指令

1、轉(zhuǎn)移指令

<1>段內(nèi)與段間:段內(nèi)轉(zhuǎn)移:在同一段內(nèi)進(jìn)行的轉(zhuǎn)移 段間轉(zhuǎn)移:段與段之間進(jìn)行的轉(zhuǎn)移

<2>轉(zhuǎn)移指令的尋址方式A、段內(nèi)直接尋址它是一種相對(duì)尋址,其轉(zhuǎn)移的有效地址為IP的當(dāng) 前值與位移量8位/16位(帶符號(hào)數(shù))之和,其中條 件轉(zhuǎn)移指令只能采用這種尋址方式,位移量為8位.B、段內(nèi)間接尋址:(只適用于無(wú)條件轉(zhuǎn)移指令)段內(nèi)間接尋址的轉(zhuǎn)移有效地址為寄存器的內(nèi)容或 存貯單元的內(nèi)容。它可以用數(shù)據(jù)尋址方式中除立即 數(shù)以外的任一種尋址方式取得。

六、控制轉(zhuǎn)移指令50

C、段間直接尋址:(只適用無(wú)條件轉(zhuǎn)移指令)段間直接尋址的轉(zhuǎn)移地址的段值和偏移量直接由指 令給出。產(chǎn)生轉(zhuǎn)移時(shí),其段值送CS,偏移量送IP。

D、段間間接尋址:(只適用無(wú)條件轉(zhuǎn)移指令)段間間接尋址用存貯器中2個(gè)相繼字的內(nèi)容取代IP 與CS內(nèi)容,以達(dá)到段間轉(zhuǎn)移之目的。其中相繼字的 存貯單元地址將由指令指定的除立即數(shù)/寄存器方 式以外的任一種數(shù)據(jù)尋址方式取得。

兩個(gè)相繼字中,前一個(gè)為偏移量,后一個(gè)為段值。

<3>無(wú)條件轉(zhuǎn)移指令JMPSHORTPTROPRIP←IP+8位位移量段內(nèi)直接短轉(zhuǎn)移

JMPNEARPTROPRIP←IP+16位位移量段內(nèi)直接近轉(zhuǎn)移

JMPWORDPTROPRIP←─(EA)段內(nèi)間接轉(zhuǎn)移C、段間直接尋址:(只適用無(wú)條件轉(zhuǎn)移指令)51

JMPFARPTROPRIP←OPR(偏移地址)段間直接轉(zhuǎn)移 CS←OPR(段地)

JMPDWORDPTROPR IP←(EA)段間間接轉(zhuǎn)移 CS←EA+2

<4>條件轉(zhuǎn)移指令A、JZ(JE)OPR條件ZF=1結(jié)果為零(相等轉(zhuǎn))

JNZ(JNE)OPRZF=0結(jié)果不為零(不等轉(zhuǎn))

JSOPRSF=1為負(fù)轉(zhuǎn)

JNSOPRSF=0為正轉(zhuǎn)

JOOPROF=1有溢出轉(zhuǎn)

JNOOPROF=0無(wú)溢出轉(zhuǎn)

JPOPRPF=1偶轉(zhuǎn)

JNPOPRPF=0奇轉(zhuǎn)JMPFARPTROPR52

B、無(wú)符號(hào)數(shù)條件轉(zhuǎn)移 JB(JNAE,JC)OPR條件:CF=1小于轉(zhuǎn)

JNP(JAE,JNC)OPRCF=0大于等于轉(zhuǎn)

JBE(JNA)OPRCFVZF=1小于等于轉(zhuǎn)

JNBE(JA)OPRCFVZF=0大于轉(zhuǎn)

C、帶符號(hào)數(shù)條件轉(zhuǎn)移 JL(JNGE)OPR條件:SF≯OF=1小于轉(zhuǎn)

JNL(JGE)OPRSF≯OF=0大于等于轉(zhuǎn)

JLE(JNG)OPR(SF≯OF)∨ZF=1小于等于轉(zhuǎn)

JNLE(JG)OPR(SF≯OF)∨ZF=0大于轉(zhuǎn)

D、JCXZOPRCX=0CX=0轉(zhuǎn)

B、無(wú)符號(hào)數(shù)條件轉(zhuǎn)移53

<5>例:

A、設(shè):DS=2600H,BX=1256H,SI=528FTAB(位移量)=20A1HPC當(dāng)=2000H [232F7H]=3280H,[264E5H]=2450H執(zhí)行JMP1000H后IP= JMPBX后IP=JMP[BX+TAB]后IP=JMP[BX+SI]后IP=JMP2000H:1000H后IP=CS=54B、試分析下面程序ST:MOVAL,XSHLAL,1JCL2CMPAL,YJNZL1MOVZ,0HLTL1:JBL3L2:MOVZ,1HLTL3:MOVZ,-1HLTB、試分析下面程序55

2、子程序調(diào)用和返回指令

A、調(diào)用指令:把下一條指令的地址(CS/IP即斷點(diǎn)) 壓棧,并實(shí)現(xiàn)轉(zhuǎn)移(DST送IP/CS)

CALLDST

段內(nèi)直接SP←SP-2調(diào)用[SP+1,SP]←IP/IP←IP+D16

段內(nèi)間接SP←SP-2 調(diào)用 [SP+1,SP]←IP/IP←EA

段間直接SP←SP-2[SP+1,SP]←CS調(diào)用SP←SP-2[SP+1,SP]←IPIP←偏移地址CS←段地址

2、子程序調(diào)用和返回指令56

段間間接SP←SP-2,[SP+1,SP]←CS調(diào)用SP←SP-2,[SP+1,SP]←IPIP←(EA)CS←(EA+2)

B、返回指令RET

段內(nèi)返回

IP←[SP+1,SP] SP←SP+2

RETEXP

段內(nèi)帶立即數(shù)返回

IP←[SP+1,SP] SP←SP+2 SP←SP+D16(出棧后修改SP)

段間間接SP←SP-2,[SP+1,SP]57

RET IP←[SP+1,SP]

段間返回 SP←SP+2 CS←[SP+1,SP] SP←SP+2

RETEXPIP←[SP+1,SP]

段間帶立即數(shù)返回 SP←SP+2 CS←[SP+1,SP] SP←SP+D16

注:EXP是一個(gè)表達(dá)式,其值為D16(位移量)。它用來(lái)在 返回地址出棧后修改堆棧指針。這便于調(diào)用程序在 用CAIL之前把子程序所需參數(shù)入棧,以便子程序使 用。當(dāng)子程序返回后,這些參數(shù)已不再有用,就可 以修改棧指針使其指向參數(shù)入棧以前的值。58

C例:CALL1000HCALLAXCALL2500H:3600H

CALLDWORDPTR[DI]

RET6

593、循環(huán)控制指令LOOPOPR CX←CX-1,當(dāng)CX≠0時(shí):則:IP←IP+D8實(shí)現(xiàn)循環(huán) 否則:IP值不變,退出循環(huán)

LOOPZ(LOOPE)OPR CX←CX-1,當(dāng)CX≠0,ZF=1時(shí):則:IP←IP+D8實(shí)現(xiàn)循環(huán) 否則:IP值不變,退出循環(huán)

LOOPNZ(LOOPNE)OPR CX←CX-1,當(dāng)CX≠0,ZF=0時(shí): 則:IP←IP+D8實(shí)現(xiàn)循環(huán) 否則:IP值不變,退出循環(huán)注:循環(huán)控制指令不影響條件碼。LOOPZ/LOOPNZ提供了提前結(jié)束循環(huán)的可能性。60

例:試分析下面程序ST:MOVCX,MMOVAX,0MOVSI,AXL1:ADDAX,[ARRAY+SI]ADDSI,2LOOPL1MOV[TOTAL],AX HLT

614、中斷指令和中斷返回指令

A、INT SP←SP-2;[SP+1,SP]←PSW

INTTYPESP←SP-2;[SP+1,SP]←CSSP←SP-2;[SP+1,SP]←IP IP←(TYPE*4) CS←(TYPE*4+2)

注:TYPE為類型號(hào),其值為0~255。(TYPE不能為0) INT是一個(gè)字節(jié)的中斷指令,它隱含的類型號(hào)為3。 (斷點(diǎn)中斷) INT指令在執(zhí)行完上述操作后,將0→IF→TF。62

B、INTO若OF=1則:SP←SP-2;[SP+1,SP]←PSW,SP←SP-2;[SP+1,SP]←CS SP←SP-2;[SP+1,SP]←IP IP←[00010H,00011H] CS←[00012H,00013H]注:INTO為若溢出則中斷的指令。(類型號(hào)為4)C、IRETIP←[SP+1,SP],SP←SP+2CS←[SP+1,SP],SP←SP+2 PSW←[SP+1,SP],SP←SP+2注:中斷指令:保存現(xiàn)場(chǎng):PSW、CS、IP 實(shí)現(xiàn)轉(zhuǎn)移:[TYPE*4]→IP [TYPE*4+2]→CS

635、處理器控制指令

A、CLC0→CF進(jìn)位位置"0"

CMCCF→CF進(jìn)位求反

STC1→CF進(jìn)位置"1"

CLD0→DF方向標(biāo)志置"0"

STD1→DF方向標(biāo)志置"1"

CLI0→IF中斷標(biāo)志置"0"STI1→IF中斷標(biāo)志置"1"

B、NOP 無(wú)(空)操作

HLT 停機(jī)

WAIT等待64

C、ESCmem交權(quán)(調(diào)用協(xié)處理器工作) ESC指令把mem存貯單元的內(nèi)容送到 數(shù)據(jù)總線。這條指令在使用協(xié)處理器 執(zhí)行某些操作時(shí),可以從存貯器取得 指令或操作數(shù)。

D、LOCK 封鎖 該指令是一種前綴,它可以與其它指 令聯(lián)合,用來(lái)維持總線的鎖存信號(hào)直 到與其聯(lián)合的指令執(zhí)行完為止。 當(dāng)CPU與其他處理機(jī)協(xié)同工作時(shí),該 指令可避免破壞有用信息。

65

小結(jié)

一、CPU結(jié)構(gòu)

1、通用寄存器:AX,BX,CX,DX/AH,AL,BH,BL,CH,CL,DH,DL專用寄存器:SP,BP,SI,DI。標(biāo)志寄存器:F,(AF,CF,OF,SF,PF,ZF//DF,IF,TF,)段地址寄存器:CS,DS,ES,SS指針寄存器:IP

2、一個(gè)20位的物理地址可表示成段地址:偏移地址, 其計(jì)算方法如下:

物理地址=(段地址X10H)+偏移地址

66

二、尋址方式

1、立即尋址:操作數(shù)由指令給出MOVDX,100H

2、寄存器尋址:操作數(shù)在寄存器中ADDAX,BX

3、直接尋址:操作數(shù)有效地址由指令給出MOVAX,[100]MOVAX,VAR

4、寄存器間接尋址:操作數(shù)的地址在寄存器中,這些寄存器可以為BX,BP;SI,DI.其操作數(shù)地址為:A、┌BX┐(數(shù)據(jù)段基址尋址)│SI│+位移量+[DS]*16(變址尋址)└DI┘(變址尋址)[BP]+位移量+[SS]*16(堆棧段基址尋址)

二、尋址方式67B、┌SI┐││+[BX]+位移量+[DS]*16(基址加變址)└DI┘┌SI┐││+[BP]+位移量+[SS]*16(基址加變址)└DI┘

注:只要用上BP,那就默認(rèn)段寄為SS,其他情況為DS5、編寫指令時(shí)應(yīng)注意的幾個(gè)問(wèn)題A、注意區(qū)別立即尋址方式和直接尋址方式如:MOVAX,126與MOVAX,[126]B、使用寄存器間址時(shí),應(yīng)注意和寄存器尋址方式的區(qū)別如:MOVAX,BX與MOVAX,[BX]B、┌SI┐68

C、在雙操作數(shù)指令中,源操作數(shù)和目的操作數(shù)的地

址不能同時(shí)為存貯器地址。如:M1和M2為兩個(gè)存貯器變量, 則:ADD[M1],[M2]是錯(cuò)誤指令。D、代碼段寄存器CS不能用作指令的目的寄存器。

三、指令1、數(shù)據(jù)傳送指令A(yù)、MOVDST,SRC(DST:目的操作數(shù),SRC源操作數(shù)) 指令的7種格式與注意事項(xiàng)。PUSHSRC指令的操作過(guò)程,SP的變化情況

69

POPDST指令的操作過(guò)程,SP的變化情況XCHGOPR1,OPR2(交換)

B、INAC,PORT只能用AX/AL,DX//64K空間OUTPORT,ACXLAT(換碼)AL←[BX+AL]BX為表格首址,AL為項(xiàng)號(hào)C、LEAREG,SRC有效地址送寄存器REG為通用寄存器LDSREG,SRC指針?biāo)图拇嫫骱虳SLESREG,SRC指針?biāo)图拇嫫骱虴S

70

D、LAHF標(biāo)志送AHSAHFAH送標(biāo)寄

2、算術(shù)運(yùn)算指令A(yù)、ADDDST,SRCADCDST,SRCINCOPRINC指令不影響CF

B、SUBDST,SRCSBBDST,SRCDECOPRDEC指令不影響CFNEGOPRCMPOPR1,OPR1建立標(biāo)志/后跟條轉(zhuǎn)D、LAHF標(biāo)志送AH71

C、MULSRC字節(jié):AL*(SRC)→AX字:AX*(SRC)→DX,AXIMULSRC(帶符號(hào))DIVSRC字節(jié):AX÷(SRC)→AL(余在AH)字:DX,AX÷(SRC)→AX(余在DX)IDIVSRC(帶符號(hào))

D、CBW(字節(jié)轉(zhuǎn)換為字)/(AL擴(kuò)展到AH)CWD(字轉(zhuǎn)換為雙字)/(AX擴(kuò)展到DX)E、DAA(BCD碼加調(diào)正/壓縮碼)DAS(BCD碼減調(diào)正/壓縮碼)AAA(非壓縮BCD碼加調(diào)正)AAS(非壓縮BCD碼減調(diào)正)C、MULSRC字節(jié):AL*(SRC)→72

AAM非壓縮BCD碼乘調(diào)正將AL積除OA,商存AH;除數(shù)存AL中。AAD非壓縮BCD碼除調(diào)正將被除數(shù)AX調(diào)正為2進(jìn)制數(shù);H*10+AL→AL3、邏輯運(yùn)算和移位指令A(yù)、ANDDST,SRCORDST,SRCNOTOPRXORDST,SRCTESTOPR1,OPR2(OPR1∧OPR2)

73

B、SHLOPR,CNT(CNT為1或CL)SALOPR,CNT算術(shù)左移SHROPR,CNT邏輯右移SAROPR,CNT算術(shù)右移ROLOPR,CNT循環(huán)左移ROROPR,CNT循環(huán)右移RCLOPR,CNT帶進(jìn)位循環(huán)左移RCROPR,CNT帶進(jìn)位循環(huán)右移4、串處理指令(使用串指令的條件)A、REP重復(fù)前綴CX≠0重復(fù)MOVSB字符串傳送(DI)←(SI)MOVSW指針自動(dòng)修改條件:SI,DI,CX及DF賦值后才可用MOVSB/W)

74

B、LODSB取字符串AC←(SI)LODSWC、STOSB存字符串(DI)←ACSTOSWD、REPE/REPZ重復(fù)前綴CX≠0,ZF=1時(shí)重復(fù)REPNE/REPNZ重復(fù)前綴CX≠0,ZF=0時(shí)重復(fù)CMPSB字符串比較(SI)-(DI)CMPSW自動(dòng)修改指針E、SCASB字符串撿索/AC-(DI)SCASW關(guān)鍵字要事先存入AL,AX中

755、控制轉(zhuǎn)移指令A(yù)、JMPSHORTPTROPR段內(nèi)直接短轉(zhuǎn)移JMPNEARPTROPR段內(nèi)直接近轉(zhuǎn)移JMPWORDPTROPR段內(nèi)間接轉(zhuǎn)移JMPFARPTROPR段間直接轉(zhuǎn)移JMPDWORDPRTOPR段間間接轉(zhuǎn)移B、JZ/JEOPRZF=1JNE/JNEOPRZF=0JSOPRSF=1JNSOPRSF=076

JOOPROF=1JNOOPROF=0JPOPRPF=1JNPOPRPF=0JB/JNAE/JCOPRCF=1無(wú)符號(hào)數(shù)小于轉(zhuǎn)JNB/JAE/JNCOPRCF=0無(wú)符號(hào)數(shù)大于等于轉(zhuǎn)JBE/JNAOPRCF∨ZF=1無(wú)符號(hào)數(shù)小于等于轉(zhuǎn)JNBE/JAOPRCF∨ZF=0無(wú)符號(hào)數(shù)大于轉(zhuǎn)JL(JNGE)OPRSF≯OF=1帶符號(hào)數(shù)小于轉(zhuǎn)JOOPROF=177

JNL(JGE)OPRSF≯OF=0帶符號(hào)數(shù)大于等于轉(zhuǎn)JLE/JNGOPR(SF≯OF)∨ZF=1帶符號(hào)數(shù)小于等于轉(zhuǎn)JNLE/JGOPR(SF≯OF)∨ZF=0帶符號(hào)數(shù)大于轉(zhuǎn)JCXZOPR(CX)=0CX=0轉(zhuǎn)

C、CALLDST指令的操作過(guò)程RET(EXP)指令的操作過(guò)程/EXP的含義

78

D、LOOPOPR循環(huán)控制,CX≠0轉(zhuǎn)移LOOPZ/LOOPEOPR循環(huán)控制,CX≠0;ZF=1則轉(zhuǎn)移LOOPNZ/LOOPNEOPR循環(huán)控制,CX≠0;ZF=0則轉(zhuǎn)移E、INT指令操作過(guò)程INTTYPEINTOIRET

F、CLC進(jìn)位位(CF)置"0"CMC進(jìn)位位(CF)求反STC進(jìn)位位(CF)置"1"CLD方向標(biāo)志置"0"D、LOOPOPR循環(huán)控制,79

STD方向標(biāo)志置"1"CLI中斷標(biāo)志置"0"STI中斷標(biāo)志置"1"NOPHLTWAIT等待ESCmem交權(quán)LOCK封鎖/前綴

6、使用指令時(shí),應(yīng)注意的幾個(gè)問(wèn)題

A、指令對(duì)地址還是對(duì)地址中的內(nèi)容進(jìn)行操作,要嚴(yán)加區(qū)分。如:LEABX,MESSMESS的偏移地址→BX

STD方向標(biāo)80

B、使用指令時(shí),要清楚指令隱含的操作寄存器如:乘法隱含的目的操作數(shù):AX/AL除法隱含的目的操作數(shù):DX,AX/AL串指令隱含的操作數(shù)為:SI,DI與AL等。重復(fù)前綴:CX十進(jìn)制調(diào)正指令隱含地使用了AL換碼指令:XLAT[BX+AL]→AL循環(huán)指令:CX輸入、輸出指令:AX/AL,DX

C、對(duì)帶符號(hào)數(shù)和無(wú)符號(hào)數(shù)的操作應(yīng)正確選擇相應(yīng)的條件轉(zhuǎn)移指令。

81

D、用移位指令來(lái)倍增或倍減一個(gè)值時(shí),要注意對(duì)

帶符號(hào)數(shù)和無(wú)符號(hào)數(shù)所使用的指令應(yīng)是不同的。如:AX=8520H當(dāng)AX為無(wú)符號(hào)數(shù)時(shí),AX/2可用SHRAX,1結(jié)果為4290H;當(dāng)AX為帶符號(hào)數(shù)時(shí),AX/2應(yīng)用SARAX,1結(jié)果為C290H。

E、標(biāo)號(hào)是程序中指令的符號(hào)地址,要注意和變量(數(shù)據(jù)符號(hào))的區(qū)別。如:定義VAR為一變量,LAB為一標(biāo)號(hào)JMPLAB指令的轉(zhuǎn)移地址為L(zhǎng)ABJMPVAR為一非法指令。

D、用移位指令來(lái)倍增或倍減一個(gè)值時(shí),要注意對(duì)

82

四、舉例

1、指出下列指令的錯(cuò)誤A、MOVAH,BXB、MOV[BX],[SI]C、MOVAX,[SI][DI]D、MOV[BX][SI],ES:AXE、MOVBYTEPTR[BX],1000H

F、MOVCS,AXG、MOVDS,BPH、INC[AX]83

2、求雙字長(zhǎng)數(shù)DX:AX的補(bǔ)碼數(shù)

3、將DX:AX中雙字長(zhǎng)數(shù)乘以2/除以2

84

4、兩字節(jié)數(shù)相加,設(shè)兩字節(jié)數(shù)存于BL、DL中,和存于AX中。A、無(wú)符號(hào)數(shù)

B、帶符號(hào)數(shù)

4、兩字節(jié)數(shù)相加,設(shè)兩字節(jié)數(shù)存于BL、DL中,hi855、比較AX,BX,CX中帶符號(hào)數(shù)大小,將最大數(shù)存于AX中。

6、已知內(nèi)存中有一以ARRAY為首址的100個(gè)字的數(shù)組,試將數(shù)組中每個(gè)數(shù)加1

5、比較AX,BX,CX中帶符號(hào)數(shù)大小,hijiyi.c86

7、試將ELEMS中的100個(gè)字節(jié)數(shù)據(jù)的位置顛倒過(guò)來(lái)

87

1X>08、設(shè)Y=0X=0已知一個(gè)8位帶符號(hào)數(shù)存于X單-1X<0元中試求Y值存于AL中。

889、有3個(gè)數(shù)存于TAB為首址單元中,試將中值存于A中設(shè)數(shù)為帶符號(hào)數(shù)

9、有3個(gè)數(shù)存于TAB為首

溫馨提示

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