第五章 指令系統(tǒng)_第1頁
第五章 指令系統(tǒng)_第2頁
第五章 指令系統(tǒng)_第3頁
第五章 指令系統(tǒng)_第4頁
第五章 指令系統(tǒng)_第5頁
已閱讀5頁,還剩141頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第5章86系列微型計(jì)算機(jī)的指令系統(tǒng)5.1匯編語言指令語句格式5.280x86指令(編碼)格式及尋址方式

5.38086/8088指令系統(tǒng)

難點(diǎn)和重點(diǎn)

5.1匯編語言指令語句格式MOV傳送CMP比較ADD加法OUT輸出立即數(shù)寄存器存儲(chǔ)器(地址信息)1.指令:讓計(jì)算機(jī)完成某種操作的命令稱為指令。2.指令系統(tǒng):指令的集合即為指令系統(tǒng)。3.指令的一般格式:[標(biāo)號(hào):]操作碼[操作數(shù)][,操作數(shù)];[注釋]

計(jì)算機(jī)中的指令由標(biāo)號(hào)、操作碼字段和操作數(shù)字段組成。[]:任選項(xiàng)。標(biāo)號(hào)字段:是一個(gè)任選字段,性質(zhì)為符號(hào)偏移量,一般用于標(biāo)記跳轉(zhuǎn)指令的目的地址.在匯編過程中標(biāo)號(hào)會(huì)被替換為一個(gè)16位的數(shù)值偏移量.標(biāo)號(hào)必須位于語句開頭,結(jié)尾必須使用冒號(hào)。操作碼字段:也稱為指令助記符,指令助記符是必不可少的,指計(jì)算機(jī)所要執(zhí)行的操作,或稱為指出操作類型,是一種助記符。5.1匯編語言指令語句格式操作數(shù)字段:指在指令執(zhí)行操作的過程中所需要的操作數(shù)。該字段除可以是操作數(shù)本身外,也可以是操作數(shù)地址或是地址的一部分,還可以是指向操作數(shù)地址的指針或其它有關(guān)操作數(shù)的信息。注釋字段:是一個(gè)任選字段,用于說明程序片段或指令的功能,匯編過程中不處理這樣的字段,它只是用于提高源程序的可讀性.注釋必須使用分號(hào)作為開始。注釋是對(duì)該條或該段程序的解釋,可選項(xiàng)。

不同的計(jì)算機(jī)有不同的指令系統(tǒng),匯編語言的指令語句都與機(jī)器指令一一對(duì)應(yīng),匯編語言通過匯編程序?qū)⑵浞g成機(jī)器指令代碼(目標(biāo)代碼),讓CPU執(zhí)行某種操作。5.1匯編語言指令語句格式5.28086/8088的尋址方式與數(shù)據(jù)有關(guān)的尋址方式:以MOV指令為例立即尋址MOVAX,3069H寄存器尋址MOVAL,BH直接尋址MOVAX,[2000H]寄存器間接尋址MOVAX,[BX]

寄存器相對(duì)尋址MOVAX,COUNT[SI]

基址變址尋址MOVAX,[BP][DI]相對(duì)基址變址尋址MOVAX,MASK[BX][SI]存儲(chǔ)器尋址(1)立即尋址方式*——操作數(shù)在指令中給出指令格式:MOVAL,5MOVAX,3064HMOVAL,‘A’*

只能用于SRC字段MOV40H,AL

*SRC和DST的字長(zhǎng)一致

MOVAH,3064H

立即數(shù)尋址的功能立即數(shù)尋址的執(zhí)行例如:MOVAL,80H ;將8位立即數(shù)80H送入AL寄存器中。MOVAX,1234H ;將16位立即數(shù)1234H送入AX寄存器中,其中 (AH)=12H,(AL)=34H。ADDAX,3064H ;將立即數(shù)3064H與AX內(nèi)容相加,結(jié)果存入AX中,即 (AX)+3064H→(AX)。圖5.1立即數(shù)尋址方式舉例(a)MOVAL,80H;(b)MOVAX,1234H(2)寄存器尋址方式*—操作數(shù)在指定的寄存器中

MOVAX,BXMOVAL,BH*

字寄存器AX、BX、CX、DX、SI、DI、SP或BP*

字節(jié)寄存器只有AHALBHBLCHCLDHDL*SRC和DST的字長(zhǎng)一致MOVAH,BX寄存器尋址的功能寄存器尋址的執(zhí)行INCCX ;將CX的內(nèi)容加1,即(CX)+1→(CX)。MOVAX,CX ;將CX的內(nèi)容傳送到AX寄存器中,即CX)→(AX)。圖4.6MOVAX,CX指令的尋址及執(zhí)行示意圖(3)直接尋址方式*—有效地址EA由指令直接給出

例:MOVAX,[2000H]

EA=2000H,假設(shè)(DS)=3000H,那么PA=32000H*

隱含的段為數(shù)據(jù)段DS*

可使用段跨越前綴

MOVAX,ES:[2000H]*操作數(shù)地址可由變量(符號(hào)地址)表示,但要注意VALUEDB10變量的屬性MOVAH,VALUE

MOVAX,VALUEMOVAX,WORDPTRVALUE5030

32000AHAL3050(AX)=3050H直接尋址的功能直接尋址的執(zhí)行例如MOVAL,[1064H];將有效地址EA=1064H單元中的內(nèi)容傳送到AL寄存器中。圖4.7直接尋址示意圖(4)寄存器間接尋址*—EA在基址寄存器(BX/BP)

或變址寄存器(SI/DI)中

MOVAX,[BX]PA=16d(DS)+(BX)MOVAX,ES:[BX]PA=16d(ES)+(BX)MOVAX,[BP]PA=16d(SS)+(BP)*不允許使用AX、CX、DX存放EAMOVAX,[CX]*

SRC和DST的字長(zhǎng)一致

MOVDL,[BX];[BX]指示一個(gè)字節(jié)單元MOVDX,[BX];[BX]指示一個(gè)字單元*

適于數(shù)組、字符串、表格的處理寄存器間接尋址的功能寄存器間接尋址的執(zhí)行例如:

MOVAX,[BX];將BX中的內(nèi)容作為有效地址,對(duì)有效地址進(jìn)行字的 讀操作,并傳送到AX中。

有效地址=(BX)(BP)8位(SI)16位(DI)+位移量(5)寄存器相對(duì)尋址方式*指令格式:MOVAX,COUNT[SI]或MOVAX,[COUNT+SI]

假設(shè)(DS)=3000H,(SI)=2000H,COUNT=3000H,則:PA=35000H

假設(shè)(35000H)=1234H,那么(AX)=1234H適于數(shù)組、字符串、表格的處理如果使用BP,則隱含地表示操作數(shù)存放在堆棧段中。寄存器相對(duì)尋址的功能寄存器相對(duì)尋址的執(zhí)行圖4.9寄存器相對(duì)尋址操作過程示意圖(6)基址變址尋址方式*指令格式:MOVAX,[BX][DI]MOVAX,[BX+DI]MOVAX,ES:[BX][SI]*適于數(shù)組、字符串、表格的處理*必須是一個(gè)基址寄存器和一個(gè)變址寄存器的組合

MOVAX,[BX][BP]MOVAX,[SI][DI]有效地址=(BX)(SI)(BP)(DI)+基址變址尋址的功能基址變址尋址的執(zhí)行(7)相對(duì)基址變址尋址方式

MOVAX,MASK[BX][SI]

或MOVAX,MASK[BX+SI]或MOVAX,[MASK+BX+SI]如果使用BP,則隱含地表示操作數(shù)存放在堆棧段中。

有效地址=(BX)(SI)8位(BP)(DI)16位++位移量相對(duì)基址變址尋址的功能相對(duì)基址變址尋址的執(zhí)行例如:MOVAH,[BX+DI+1234H]若DS=4000H,BX=0200H,DI=0010H,則此指令計(jì)算出的有效地址EA=1444H,操作數(shù)的物理地址為41444H,執(zhí)行本指令后將41444H單元中的內(nèi)容傳送至AH寄存器中。訪問存儲(chǔ)器的方式默認(rèn)的段寄存器可跨越的段寄存器偏移地址取指令CS無IP堆棧操作SS無SP一般數(shù)據(jù)訪問DSCSESSS有效地址EABP作為基址的尋址SSCSDSESBP串操作的源操作數(shù)DSCSESSSSI串操作的目的操作數(shù)ES無DI段寄存器的使用規(guī)定

數(shù)據(jù)傳送指令算術(shù)指令邏輯指令串處理指令控制轉(zhuǎn)移指令處理機(jī)控制與雜項(xiàng)操作指令5.38086/8088指令系統(tǒng)數(shù)據(jù)傳送指令:

通用數(shù)據(jù)傳送指令MOV、PUSH、POP、XCHG累加器專用傳送指令I(lǐng)N、OUT、XLAT目標(biāo)地址傳送指令LEA、LDS、LES標(biāo)志寄存器傳送指令LAHF、SAHF、PUSHF、POPF類型轉(zhuǎn)換指令CBW、CWD5.3.1數(shù)據(jù)傳送類指令傳送指令:MOVDST,SRC執(zhí)行操作:(DST)(SRC)注意:

*DST、SRC不能同時(shí)為段寄存器MOVDS,ES*立即數(shù)不能直接送段寄存器

MOVDS,2000H*DST不能是立即數(shù)和CSMOVCS,AX

*DST、SRC不能同時(shí)為存儲(chǔ)器尋址*不影響標(biāo)志位1

通用數(shù)據(jù)傳送指令表基本傳送指令MOV進(jìn)棧指令:PUSHSRC執(zhí)行操作:(SP)(SP)–2((SP)+1,(SP))(SRC)

出棧指令:POPDST執(zhí)行操作:(DST)((SP)+1,(SP)) (SP)(SP)+2堆棧:‘先進(jìn)后出’的存儲(chǔ)區(qū),段地址存放在SS中,

SP在任何時(shí)候都指向棧頂,進(jìn)出棧后自動(dòng)修改SP。

注意:

*堆棧操作必須以字為單位。

*不影響標(biāo)志位

*不能用立即尋址方式PUSH1234H

*DST不能是CSPOPCS例:假設(shè)(AX)=2107H,執(zhí)行PUSHAX(SP)低地址高地址(SP)

07H21H低地址高地址********PUSHAX執(zhí)行前PUSHAX執(zhí)行后進(jìn)棧操作:先SP減2,再內(nèi)容進(jìn)棧。進(jìn)棧方向例:POPBX(SP)低地址高地址(SP)07H21H低地址高地址

(BX)=2107HPOPBX執(zhí)行前POPBX執(zhí)行后********出棧方向07H21H出棧操作:先棧頂內(nèi)容出棧,再修改SP,使SP加2。(字操作)例:PUSHAXPUSHBXPUSHCX……;其間用到AX、BX、CXPOPCX;后進(jìn)先出POPBXPOPAX交換指令

XCHGOPR1,OPR2執(zhí)行操作:(OPR1)(OPR2)注意:

*不影響標(biāo)志位*不允許使用段寄存器 *兩操作數(shù)不能均為內(nèi)存單元例:XCHGBX,[BP+SI]XCHGAL,BH2

累加器專用傳送指令(只限使用AX或AL)

輸入指令I(lǐng)N(I/OCPU)

直接尋址:INAL,PORT(字節(jié))INAX,PORT(字)執(zhí)行操作:(AL)(PORT)(字節(jié))(AX)(PORT+1,PORT)(字)間接尋址:INAL,DX(字節(jié))INAX,DX(字)執(zhí)行操作:(AL)((DX))(字節(jié))(AX)((DX)+1,(DX))(字)

輸出指令OUT(CPUI/O)直接尋址:OUTPORT,AL(字節(jié))OUTPORT,AX(字)執(zhí)行操作:(PORT)(AL)(字節(jié))(PORT+1,PORT)(AX)(字)間接尋址:OUTDX,AL(字節(jié))OUTDX,AX(字)執(zhí)行操作:((DX))(AL)(字節(jié))((DX)+1,(DX))(AX)(字)注意:

*不影響標(biāo)志位*

前256個(gè)端口號(hào)00H~FFH可直接在指令中指定(直接尋址)*如果端口號(hào)256,端口號(hào)

DX(間接尋址)例:INAX,28H;MOVDX,28H;INAX,DXMOVDATA_WORD,AX例:MOVDX,3FCHINAX,DX例:OUT5,AL例:測(cè)試某狀態(tài)寄存器(端口號(hào)27H)的第2位是否為1INAL,27HTESTAL,00000100BJNZERROR;若第2位為1,轉(zhuǎn)ERROR處理換碼指令:將一種字節(jié)代碼轉(zhuǎn)換成另一種字節(jié)代碼XLAT或XLATOPR執(zhí)行操作:(AL)((BX)+(AL))例:MOVBX,OFFSETTABLE;(BX)=0040HMOVAL,3XLAT指令執(zhí)行后(AL)=33H注意:

*不影響標(biāo)志位*字節(jié)表格(長(zhǎng)度不超過256)

首地址(BX)*需轉(zhuǎn)換的代碼位移量(AL)(BX)30HF004031HF0041(AL)=332HF004233HF0043TABLE(DS)=F000H3.地址傳送指令

有效地址送寄存器指令:LEAREG,SRC執(zhí)行操作:(REG)SRC

指針?biāo)图拇嫫骱虳S指令:LDSREG,SRC執(zhí)行操作:(REG)(SRC)(DS)(SRC+2)

相繼二字寄存器(通常是SI)、DS

指針?biāo)图拇嫫骱虴S指令:LESREG,SRC執(zhí)行操作:(REG)(SRC)(ES)(SRC+2)

相繼二字寄存器(通常是DI)、ES例:40H00H00H30H

TABLE(DS):1000HMOVBX,TABLE;(BX)=0040HMOVBX,OFFSETTABLE

;(BX)=1000HLEABX,TABLE

;(BX)=1000HLDSBX,TABLE;(BX)=0040H

;(DS)=3000HLESBX,TABLE;(BX)=0040H

;(ES)=3000H注意:

*不影響標(biāo)志位*REG不能是段寄存器*SRC必須為存儲(chǔ)器尋址方式例:LEAAX,[2728H];(AX)=2728LEACX,[BX][DI]若執(zhí)行前:(BX)=1000H,(DI)=500H則執(zhí)行后:(CX)=1000+500=1500HLDSSI,[500H]若執(zhí)行前:(DS)=2000H則執(zhí)行后:(SI)=1234H(DS)=3000HLESDI,50H[BX]若執(zhí)行前:(DS)=2000H,(BX)=200H(20250H)=0237H,(20252)=40000H則執(zhí)行后:(DI)=0237H(ES)=4000H34H12H00H30H

20500H20502H圖LEA和LDS指示執(zhí)行示意(a)LEABX,[BX+SI+jjkk]圖4.13LEA和LDS指示執(zhí)行示意(b)LDSSI,[jjkk]4.標(biāo)志傳送指令圖LAHF指令的功能↓↓標(biāo)志寄存器傳送指令

標(biāo)志送AH指令:LAHF執(zhí)行操作:(AH)(PSW的低字節(jié))

AH送標(biāo)志寄存器指令:SAHF執(zhí)行操作:(PSW的低字節(jié))(AH)

標(biāo)志進(jìn)棧指令:PUSHF執(zhí)行操作:(SP)(SP)-2((SP)+1,(SP))(PSW)

標(biāo)志出棧指令:POPF執(zhí)行操作:(PSW)((SP)+1,(SP))(SP)(SP)+2*影響標(biāo)志位

PUSHF和POPF指令一般用在子程序和中斷處理程序的首尾,用以保存主程序標(biāo)志和恢復(fù)主程序標(biāo)志。有時(shí)還被用于改變陷阱標(biāo)志TF的狀態(tài)。PUSHF ;將Flag各標(biāo)志位壓入堆棧。POPAX ;彈出標(biāo)志至AX中。ORAH,01H;TF位置“1”。PUSHAX ;修改后的標(biāo)志,各位壓入堆棧。POPF ;從堆棧中彈出一個(gè)字(此時(shí)為修改后的16 位標(biāo)志),送入標(biāo)志寄存器。5.3.2算術(shù)運(yùn)算指令

加法指令

ADD、ADC、INC

減法指令

SUB、SBB、DEC、NEG、CMP

乘法指令

MUL、IMUL

除法指令

DIV、IDIV加法指令

加法指令:ADDDST,SRC執(zhí)行操作:(DST)(SRC)+(DST)

帶進(jìn)位加法指令:ADCDST,SRC執(zhí)行操作:(DST)(SRC)+(DST)+CF

加1指令:INCOPR執(zhí)行操作:(OPR)(OPR)+1注意:

*除INC指令不影響CF標(biāo)志外,均對(duì)條件標(biāo)志位有影響。加法指令對(duì)條件標(biāo)志位的影響CF位表示無符號(hào)數(shù)相加的溢出。OF位表示帶符號(hào)數(shù)相加的溢出。1結(jié)果為負(fù)0否則SF=1結(jié)果為00否則ZF=1和的最高有效位有向高位的進(jìn)位0否則CF=1兩個(gè)操作數(shù)符號(hào)相同,而結(jié)果符號(hào)與之相反0否則OF=舉例:n=8bit帶符號(hào)數(shù)(-128~127),無符號(hào)數(shù)(0~255)

00000100+0000101100001111帶:(+4)+(+11)=+15OF=0無:4+11=15CF=0帶符號(hào)數(shù)和無符號(hào)數(shù)都不溢出00001001+0111110010000101帶:(+9)+(+124)=-123

OF=1無:9+124=133CF=0帶符號(hào)數(shù)溢出無符號(hào)數(shù)溢出00000111+11111011100000010帶:(+7)+(-5)=+2OF=0無:7+251=2

CF=1帶符號(hào)數(shù)和無符號(hào)數(shù)都溢出10000111+11110101101111100帶:(-121)+(-11)=+124

OF=1無:135+245=124

CF=1例:雙字的加法

(DX)=0002H(AX)=0F365H

(BX)=0005H(CX)=8100H指令序列

ADDAX,CX;(1)

ADCDX,BX;(2)

(1)執(zhí)行后,(AX)=7465H

CF=1OF=0SF=0ZF=0(2)執(zhí)行后,(DX)=0008HCF=0OF=0SF=0ZF=0ADD指令的常用形式還有:ADDCX,2000H ;立即數(shù)與寄存器內(nèi)容相加。ADD[BX],67H ;存儲(chǔ)單元與立即數(shù)相加。ADDAX,[BX+SI] ;存儲(chǔ)單元與寄存器內(nèi)容相加。ADDAX,BX ;寄存器之間相加。ADD[BX+6000H],AX;寄存器與“基地址加位移量”之 存儲(chǔ)單元內(nèi)容相加。2.減法指令減法指令:SUBDST,SRC執(zhí)行操作:(DST)(DST)-(SRC)帶借位減法指令:SBBDST,SRC執(zhí)行操作:(DST)(DST)-(SRC)-CF減1指令:DECOPR執(zhí)行操作:(OPR)(OPR)-1求補(bǔ)指令:NEGOPR執(zhí)行操作:(OPR)-(OPR)比較指令:CMPOPR1,OPR2執(zhí)行操作:(OPR1)-(OPR2)注意:

*除DEC指令不影響CF標(biāo)志外,均對(duì)條件標(biāo)志位有影響。減法指令對(duì)條件標(biāo)志位(CF/OF/ZF/SF)的影響:CF位表示無符號(hào)數(shù)減法的溢出。OF位表示帶符號(hào)數(shù)減法的溢出。1被減數(shù)的最高有效位有向高位的借位0否則CF=1兩個(gè)操作數(shù)符號(hào)相反,而結(jié)果的符號(hào)與減數(shù)相同0否則OF=1減法轉(zhuǎn)換為加法運(yùn)算時(shí)無進(jìn)位0否則CF=或NEG(取補(bǔ))指令對(duì)CF/OF的影響0操作數(shù)為01否則CF=1操作數(shù)為-128(字節(jié)運(yùn)算)或操作數(shù)為-32768(字運(yùn)算)0否則OF=例:x、y、z均為雙精度數(shù),分別存放在地址為X,X+2;Y,Y+2;Z,Z+2的存儲(chǔ)單元中,用指令序列實(shí)現(xiàn)wx+y+24-z,并用W,W+2單元存放wMOVAX,XMOVDX,X+2ADDAX,YADCDX,Y+2;x+yADDAX,24ADCDX,0;x+y+24SUBAX,ZSBBDX,Z+2;x+y+24-zMOVW,AXMOVW+2,DX;結(jié)果存入W,W+2單元例SUB[SI+14H],0136H;指令功能為求出目的數(shù)有效地址EA=SI+14H,將(EA)-0136H→EA。設(shè)DS=3000H,SI=0040H,則EA=0054H,目的數(shù)的物理地址為30054H,其內(nèi)容設(shè)為4336H,則此指令的結(jié)果及對(duì)標(biāo)志位的影響如下所示。比較指令CMPA-B(1)兩個(gè)無符號(hào)數(shù)比較判斷方法ZF=1,A=BZF=0,CF=0則A>BCF=1則A<B(2)帶符號(hào)數(shù)比較ZF=1,A=BZF=0OF=0SF=0則A>BSF=1則A<BOF=1SF=0則A<BSF=1則A>BOF=0SF=0,OF=1SF=1A>B(OFSF=0)OF=0SF=1,OF=1SF=0A<B(OFSF=1)例:比較54與24的大小A>0,B>0解:54-24=54+(-24)[-24]補(bǔ)=11101000,[54]補(bǔ)=0011011000110110+11101000100011110OF=0,SF=0,則目的>源,即54>24例:比較112D與-64D的大小A>0,B<0解:112-(-64)=112+64=176[-64]補(bǔ)=11000000011100000100000010110000OF=1,SF=1,則目的>源,即120>-74例:比較24與54的大小解:24-54=24+(-54)0001100024的補(bǔ)碼+11001010-54的補(bǔ)碼11100010OF=0,SF=1,則目的<源,即24<54例:比較-64D與112D的大小A<0,B>0解:-64-112=[-64]補(bǔ)+[-112]補(bǔ)11000000=[-64]補(bǔ)+10010000=[-112]補(bǔ)101010000OF=1,SF=0,則目的<源,即-64<1123乘法指令

無符號(hào)數(shù)乘法指令:MULSRC帶符號(hào)數(shù)乘法指令:IMULSRC執(zhí)行操作:字節(jié)操作數(shù)(AX)(AL)*(SRC)字操作數(shù)(DX,AX)(AX)*(SRC)注意:

*AL(AX)為隱含的乘數(shù)寄存器。*AX(DX,AX)為隱含的乘積寄存器。*SRC不能為立即數(shù)。*除CF和OF外,對(duì)條件標(biāo)志位無定義。圖4.17乘法運(yùn)算的操作數(shù)及運(yùn)算結(jié)果乘法指令對(duì)CF/OF的影響:例:(AX)=16A5H,(BX)=0611H

(1)

IMULBL

;(AX)(AL)*(BL)

;A5*115B*11=060BF9F5

;

(AX)=0F9F5H

CF=OF=1(2)

MULBX

;(DX,AX)(AX)*(BX)

;16A5*0611=00895EF5

;

(DX)=0089H(AX)=5EF5H

CF=OF=100乘積的高一半為零11否則MUL指令:CF,OF=00乘積的高一半是低一半的符號(hào)擴(kuò)展11否則

IMUL指令:CF,OF=1010010101011011A5H對(duì)應(yīng)原碼的絕對(duì)值再求補(bǔ)碼4.除法指令

無符號(hào)數(shù)除法指令:DIVSRC帶符號(hào)數(shù)除法指令:IDIVSRC執(zhí)行操作:字節(jié)操作(AL)(AX)/(SRC)的商(AH)(AX)/(SRC)的余數(shù)字操作(AX)(DX,AX)/(SRC)的商(DX)(DX,AX)/(SRC)的余數(shù)注意:

*AX(DX,AX)為隱含的被除數(shù)寄存器。*AL(AX)為隱含的商寄存器。*AH(DX)為隱含的余數(shù)寄存器。*SRC不能為立即數(shù)。*對(duì)所有條件標(biāo)志位均無定義。除法運(yùn)算的操作數(shù)和運(yùn)算結(jié)果(a)8位源操作數(shù);(b)16位源操作數(shù)

符號(hào)擴(kuò)展指令:

CBWALAX執(zhí)行操作:若(AL)的最高有效位為0,則(AH)=00H若(AL)的最高有效位為1,則(AH)=0FFHCWDAX(DX,AX)執(zhí)行操作:若(AX)的最高有效位為0,則(DX)=0000H若(AX)的最高有效位為1,則(DX)=0FFFFH注意:*無操作數(shù)指令*隱含對(duì)AL或AX進(jìn)行符號(hào)擴(kuò)展*不影響條件標(biāo)志位例:(AX)=0BA45HCBW;(AX)=0045HCWD;(DX)=0FFFFH(AX)=0BA45H例:x,y,z,v均為16位帶符號(hào)數(shù),計(jì)算(v-(x*y+z–540))/xMOVAX,XIMULY;x*y→(DX,AX)MOVCX,AXMOVBX,DXMOVAX,ZCWD;Z→(DX,AX)ADDCX,AXADCBX,DX;x*y+z→(BX,CX)SUBCX,540SBBBX,0;x*y+z-540MOVAX,VCWD;V→(DX,AX)SUBAX,CXSBBDX,BX;v-(x*y+z-540)IDIVX;(v-(x*y+z-540))/x→(AX) 余數(shù)→(DX)3.3.3邏輯運(yùn)算和移位指令

邏輯運(yùn)算指令

AND、OR、NOT、XOR、TEST

移位指令

SHL、SHR、SAL、SAR、ROL、ROR、RCL、RCR邏輯非指令:NOTOPR*OPR不能為立即數(shù)執(zhí)行操作:(OPR)

(OPR)*不影響標(biāo)志位

邏輯與指令:ANDDST,SRC執(zhí)行操作:(DST)(DST)(SRC)邏輯或指令:ORDST,SRC執(zhí)行操作:(DST)(DST)(SRC)異或指令:XORDST,SRC執(zhí)行操作:(DST)(DST)(SRC)測(cè)試指令:TESTOPR1,OPR2

執(zhí)行操作:(OPR1)(OPR2)CFOFSFZFPFAF00***無定義

根據(jù)運(yùn)算結(jié)果設(shè)置1.邏輯運(yùn)算指令例:屏蔽AL的第0、1兩位

ANDAL,0FCH例:置AL的第5位為1

ORAL,20H

例:使AL的第0、1位變反

XORAL,3例:測(cè)試某些位是0是1

TESTAL,1JZEVEN

********OR00100000**1*****

******01XOR00000011

******10

********AND11111100******00********AND000000010000000*例如,傳輸ASCII碼給某臺(tái)外部設(shè)備或另一臺(tái)微型計(jì)算機(jī)時(shí),常將其最高位作為奇/偶校驗(yàn)位使用,特別在串行傳送時(shí)可以有效地判別傳輸過程是否產(chǎn)生差錯(cuò)。假定7位ASCII碼已存入AL中,AL的最高位初始態(tài)為0?,F(xiàn)采用偶校驗(yàn),則采用下列程序段可以完成補(bǔ)偶操作:ANDAL,AL;(AL)與(AL)進(jìn)行與操作,僅用以影響標(biāo)志位PF。JPNEXT;若PF=1,則轉(zhuǎn)至NEXT指令處若PF=0,則順序執(zhí)行。ORAL,10000000B;最高位(奇偶校驗(yàn)位)補(bǔ)“1”,以使傳送操作數(shù)字節(jié)中1的個(gè)數(shù)為偶數(shù)。NEXT:;補(bǔ)偶后往下執(zhí)行程序?!壿嬤\(yùn)算指令,可以通過選用不同的源操作數(shù)的各位代碼,使目的操作數(shù)的某些位置1、清0和測(cè)試目的操作數(shù)的某些位。例如:ORCL,03H ;將CL的位0、位1置1,其余位不變。ANDAL,0F5H ;將AL中的位1、位3清0,其余位不變。XORAH,0FH ;將AH中高4位不變,低4位取反。ANDDX,[BX+SI] ;DX和兩存儲(chǔ)單元的內(nèi)容相“與”,其內(nèi)存單元地址由 BX+SI和BX+SI+1指出,結(jié)果存在DX中。ORAX,00F0H ;AX和00F0H相“或”,結(jié)果存在AX中。XORAX,AX ;AX的內(nèi)容本身進(jìn)行“異或”,結(jié)果AX清零。2.移位與循環(huán)移位指令邏輯左移SHLOPR,CNT邏輯右移SHROPR,CNT算術(shù)左移SALOPR,CNT(同邏輯左移)算術(shù)右移SAROPR,CNT

CF0

0CFCF移位指令循環(huán)左移ROLOPR,CNT循環(huán)右移ROROPR,CNT帶進(jìn)位循環(huán)左移RCLOPR,CNT帶進(jìn)位循環(huán)右移RCROPR,CNTCF

CFCFCF注意:

*OPR可用除立即數(shù)以外的任何尋址方式*CNT=1,SHLOPR,1CNT>1,MOVCL,CNTSHLOPR,CL;以SHL為例*條件標(biāo)志位:

CF=移入的數(shù)值

1CNT=1時(shí),最高有效位的值發(fā)生變化0CNT=1時(shí),最高有效位的值不變

移位指令:

SF、ZF、PF根據(jù)移位結(jié)果設(shè)置,AF無定義

循環(huán)移位指令:

不影響SF、ZF、PF、AFOF=圖4.17移位/循環(huán)移位指令執(zhí)行流程例:(AX)=0012H,(BX)=0034H,把它們裝配成(AX)=1234H例:(BX)=84F0H

(1)(BX)為無符號(hào)數(shù),求(BX)/2

SHRBX,1

;(BX)=4278H(2)(BX)為帶符號(hào)數(shù),求(BX)×2

SALBX,1

;(BX)=09E0H,OF=1(3)(BX)為帶符號(hào)數(shù),求(BX)/4MOVCL,2 SARBX,CL;(BX)=0E13CHMOVCL,8ROLAX,CLADDAX,BXMOVCH,4;循環(huán)次數(shù)MOVCL,4;移位次數(shù)NEXT:ROLBX,CLMOVAX,BXANDAX,0FHPUSHAXDECCHJNZNEXT00080004000F0000(SP)(3)(BX)=84F0H,把

(BX)

中的16位數(shù)每4位壓入堆棧串操作指令:

設(shè)置方向標(biāo)志指令

CLD、STD

串處理指令

串重復(fù)前綴

MOVSB/MOVSWREPSTOSB/STOSWREPE/REPZLODSB/LODSWREPNE/REPNZ

CMPSB/CMPSWSCASB/SCASW

與REP配合工作的MOVS/STOS

REPMOVS/STOS執(zhí)行操作:(1)如(CX)=0則退出REP,否則轉(zhuǎn)(2)(2)(CX)(CX)-1(3)執(zhí)行MOVS/STOS(4)重復(fù)(1)~(3)MOVS串傳送指令:MOVSDST,SRCMOVSB(字節(jié))MOVSW(字)例:MOVSES:BYTEPTR[DI],DS:[SI]執(zhí)行操作:

(1)((DI))←((SI))(2)字節(jié)操作:(SI)←(SI)±1,(DI)←(DI)±1字操作:(SI)←(SI)±2,(DI)←(DI)±2

方向標(biāo)志DF=0時(shí)用+,DF=1時(shí)用-。

REPMOVS:將數(shù)據(jù)段中的整串?dāng)?shù)據(jù)傳送到附加段中。源串(數(shù)據(jù)段)→目的串(一定在附加段)執(zhí)行REPMOVS之前,應(yīng)先做好:(1)源串首地址(末地址)→SI(2)目的串首地址(末地址)→DI(3)串長(zhǎng)度→CX(4)建立方向標(biāo)志(CLD使DF=0,STD使DF=1)(SI)(DI)

DF=0DF=1數(shù)據(jù)段附加段(SI)(DI)

datasegmentmess1db‘personal_computer’dataendsextrasegmentmess2db17dup(?)extraendscodesegmentmovax,datamov ds,axmov ax,extramoves,ax

leasi,mess1leadi,mess2movcx,17cldrepmovsb…codeendsleasi,mess1+16leadi,mess2+16movcx,17stdrepmovsbSTOS存入串指令:STOSDSTSTOSB(字節(jié))STOSW(字)執(zhí)行操作:

字節(jié)操作:((DI))←(AL),(DI)←(DI)±1字操作:((DI))←(AX),(DI)←(DI)±2

例:把附加段中的10個(gè)字節(jié)緩沖區(qū)置為20Hleadi,mess2moval,20Hmovcx,10cldrepstosbleadi,mess2movax,2020Hmovcx,5cldrepstosw例如,若要對(duì)某一數(shù)據(jù)緩沖區(qū)清零,并設(shè)(ES)=3000H,數(shù)據(jù)緩沖區(qū)首地址DI=0200H,緩沖區(qū)長(zhǎng)度為100個(gè)字節(jié),則可用以下的程序段:CLDMOV AX,3000H ;對(duì)段寄存器賦值。MOV ES,AXMOV DI,0200H ;數(shù)據(jù)緩沖區(qū),首地址→DI。MOV CX,100 ;數(shù)據(jù)緩沖區(qū)長(zhǎng)度為100字節(jié)→CX。MOV AL,00 ;對(duì)100個(gè)字節(jié)數(shù)據(jù)緩沖區(qū)單元清零。REP STOSBLODS從串取指令:

LODSSRCLODSB(字節(jié))LODSW(字)執(zhí)行操作:字節(jié)操作:(AL)←((SI)),(SI)←(SI)±1字操作:(AX)←((SI)),(SI)←(SI)±2注意:*LODS指令一般不與REP聯(lián)用*源串一般在數(shù)據(jù)段中(允許使用段跨越前綴來修改),目的串必須在附加段中*不影響條件標(biāo)志位例如,編制一程序段,要求將0700H單元開始的5個(gè)字節(jié)的內(nèi)容逐一裝入累加器中進(jìn)行處理,處理完后,再送入0700H為首址的內(nèi)存區(qū)中。 CLD ;方向標(biāo)志DF=0,地址為增量。 MOVSI,0700H ;SI的首地址。MOVDI,SI MOVCX,5 ;處理的字節(jié)數(shù)為5。LOOP1:LODSB ;取一個(gè)字節(jié)到AL中,(SI)+1→(SI)。 PUSHCX ;保留計(jì)數(shù)值。 … ;字符處理。 POPCX ;恢復(fù)計(jì)數(shù)值。 DECCX ;計(jì)數(shù)值減1。 MOV[DI],AL ;送回處理結(jié)果。 JNZLOOP1 ;如未處理完,則繼續(xù)。與REPE/REPZ(REPNE/REPNZ)配合工作的

CMPS和SCAS

REPE/REPZREPNE/REPNZ

執(zhí)行操作:(1)如(CX)=0或ZF=0(ZF=1)則退出串操作,否則轉(zhuǎn)(2)(2)(CX)←(CX)-1(3)執(zhí)行CMPS/SCAS(4)重復(fù)(1)~(3)CMPS串比較指令:

CMPSSRC,DSTCMPSB(字節(jié))CMPSW(字)

執(zhí)行操作:

(1)((SI))-((DI))根據(jù)比較結(jié)果置條件標(biāo)志位:相等ZF=1不等ZF=0(2)字節(jié)操作:(SI)←(SI)±1,(DI)←(DI)±1字操作:(SI)←(SI)±2,(DI)←(DI)±2SCAS串掃描指令:

SCASDSTSCASB(字節(jié))SCASW(字)執(zhí)行操作:

字節(jié)操作:(AL)-((DI)),(DI)←(DI)±1字操作:(AX)-((DI)),(DI)←(DI)±2例:從一個(gè)字符串中查找一個(gè)指定的字符messdb‘COMPUTER’leadi,messmoval,‘T’movcx,8cld

repnescasbCOMPUTER(di)

(di):相匹配字符的下一個(gè)地址(cx):剩下還未比較的字符個(gè)數(shù)(di)(CX)=2例:比較兩個(gè)字符串,找出它們不相匹配的位置例:反向傳送leasi,mess1leadi,mess2movcx,8cldrepecmpsbleasi,mess1+7leadi,mess2+7movcx,8STdrepmovsbCOMPUTERCOMPUTER

控制轉(zhuǎn)移類指令:

無條件轉(zhuǎn)移指令

JMP

條件轉(zhuǎn)移指令JZ/JNZ、JE/JNE、JS/JNS、JO/JNO、JP/JNP、JB/JNB、JL/JNL、JBE/JNBE、JLE/JNLE、JCXZ

循環(huán)指令

LOOP、LOOPZ/LOOPE、LOOPNZ/LOOPNE

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

CALL、RET

中斷與中斷返回指令

INT、INTO、IRET無條件轉(zhuǎn)移指令:段內(nèi)直接短轉(zhuǎn)移:JMPSHORTOPR執(zhí)行操作:(IP)←(IP)+8位位移量段內(nèi)直接近轉(zhuǎn)移:JMPNEARPTROPR執(zhí)行操作:(IP)←(IP)+16位位移量段內(nèi)間接轉(zhuǎn)移:JMPWORDPTROPR執(zhí)行操作:(IP)←(EA)段間直接遠(yuǎn)轉(zhuǎn)移:JMPFARPTROPR執(zhí)行操作:(IP)←OPR的段內(nèi)偏移地址(CS)←OPR所在段的段地址段間間接轉(zhuǎn)移:JMPDWORDPTROPR執(zhí)行操作:(IP)←(EA)

(CS)←(EA+2)條件轉(zhuǎn)移指令:注意:只能使用段內(nèi)直接尋址的8位位移量(1)根據(jù)單個(gè)條件標(biāo)志的設(shè)置情況轉(zhuǎn)移

格式

測(cè)試條件JZ(JE)OPRZF=1JNZ(JNE)OPRZF=0JSOPRSF=1JNSOPRSF=0JOOPROF=1JNOOPROF=0JPOPRPF=1JNPOPRPF=0JCOPRCF=1JNCOPRCF=0(2)比較兩個(gè)無符號(hào)數(shù),并根據(jù)比較結(jié)果轉(zhuǎn)移*

格式

測(cè)試條件

<JB(JNAE,JC)OPRCF=1≥JNB(JAE,JNC)OPRCF=0≤

JBE(JNA)OPRCF∨ZF=1>JNBE(JA)OPRCF∨ZF=0*

適用于地址或雙精度數(shù)低位字的比較(3)比較兩個(gè)帶符號(hào)數(shù),并根據(jù)比較結(jié)果轉(zhuǎn)移*

格式

測(cè)試條件

<JL(JNGE)OPRSFOF=1

≥JNL(JGE)OPRSFOF=0

≤JLE(JNG)OPR(SFOF)∨ZF=1>JNLE(JG)OPR(SFOF)∨ZF=0*

適用于帶符號(hào)數(shù)的比較(4)測(cè)試CX的值為0則轉(zhuǎn)移

格式測(cè)試條件

JCXZOPR(CX)=0例:如果X>50,轉(zhuǎn)到TOO_HIGH;否則|X-Y|→RESULT,如果溢出轉(zhuǎn)到OVERFLOW,

JGJOJNS

MOVAX,XCMPAX,50TOO_HIGHSUBAX,YOVERFLOWNONNEGNEGAXNONNEG:MOVRESULT,AXTOO_HIGH:……OVERFLOW:……例:、是雙精度數(shù),分別存于DX,AX及BX,CX中,

>時(shí)轉(zhuǎn)L1,否則轉(zhuǎn)L2

CMPDX,BXJGL1JLL2CMPAX,CXJAL1L2:……L1:……例設(shè)有10個(gè)數(shù)據(jù)存放在以2000H單元為首地址的數(shù)據(jù)緩沖區(qū)中,試編出要求找出其中的最大的數(shù),并存入2100H單元的程序。解:

MAXSTA:MOVBX,2000H ;首址2000H→BX中。MOVAL,[BX] ;取第一

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論