微機原理-第2章 4指令(邏輯串條件等)課件_第1頁
微機原理-第2章 4指令(邏輯串條件等)課件_第2頁
微機原理-第2章 4指令(邏輯串條件等)課件_第3頁
微機原理-第2章 4指令(邏輯串條件等)課件_第4頁
微機原理-第2章 4指令(邏輯串條件等)課件_第5頁
已閱讀5頁,還剩59頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

3、邏輯運算與移位指令⑴

邏輯與/或/異或/測試指令⑵

邏輯非指令⑶

算術(shù)/邏輯左移指令⑷

算術(shù)/邏輯右移指令⑸

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

雙精度左移/右移指令第二章

指令系統(tǒng)

整數(shù)指令

邏輯/移位

提要1第二章

指令系統(tǒng)

整數(shù)指令

邏輯/移位

邏輯運算_12⑴ 邏輯與/或/異或/測試指令

AND/OR/XOR/TEST指令格式:AND/OR/XOR/TESTDST,SRCreg,reg/mem/immmem,reg/imm0———XX—U—X—0功能:AND/OR/XOR分別對DST和SRC按位進行邏輯與/或/異或操作,結(jié)果存入DST中。即:DST

(DST)與/或/異或(SRC)TEST只對DST和SRC按位進行邏輯與操作,不存結(jié)果。注意:操作數(shù)DST、SRC的寬度必須相等。四條指令對標(biāo)志位的影響相同:OF

DF

IF

TF

SF

ZF

AF

PF

CF第二章

指令系統(tǒng)

整數(shù)指令

邏輯/移位

邏輯運算_2例5:TEST

AL,80H

;僅測試(AL)的最高位JZ

BUSY ;最高位為0,則轉(zhuǎn)向BUSY例1:將ASCII碼轉(zhuǎn)換為未組合BCD碼。MOV

AL,‘6’

;6的ASCII碼送AL,(AL)=36HAND

AL,0FH

;用0屏蔽高4位,用1保留低4位例2:將未組合BCD碼轉(zhuǎn)換為ASCII碼。MOV

AL,9

;(AL)=09HOR

AL,30H

;用1強行置位,(AL)=39H例3:對寄存器的某些位求反,某些位保持不變。MOV

CL,0F0HXOR

AL,CL ;用1對高4位求反,用0保留低4位例4:XOR

CX,CX

;這條指令結(jié)果如何?3⑵ 邏輯非指令

NOT指令格式:NOT

DSTregmem功能:對DST中每一位都求反(0變1,1變0)。不影響標(biāo)志位。舉例:NOTBX;設(shè)執(zhí)行前(BX)=5555H;則執(zhí)行后(BX)=AAAAH第二章

指令系統(tǒng)

整數(shù)指令

邏輯/移位

邏輯運算_34第二章

指令系統(tǒng)

整數(shù)指令

邏輯/移位

左移_1⑶ 算術(shù)/邏輯左移指令

SAL/SHL指令格式:

SAL/SHL

DST, 移位次數(shù)reg/mem,

imm8/CL功能:都是將DST的內(nèi)容向左移位,移動次數(shù)由

imm8/CL決定。每左移一位,將最高有效位MSB移進CF,在最低有效位LSB補0。CF

MSB 操作數(shù)

LSB05第二章

指令系統(tǒng)

整數(shù)指令

邏輯/移位

左移_2說明:①

影響標(biāo)志位:OF、SF、ZF、PF、CF。② 規(guī)定80386以上移位次數(shù)不超過31;8086用立即數(shù)時只能是1,用CL時最多可移位255次。③ 移位次數(shù)為1時,若移位后進位標(biāo)志CF與結(jié)果的最高位相等,則OF=0,否則OF=1。舉例:將AX中的無符號數(shù)乘8。6MOVAX,12HMOVCL,3SALAX,CL;左移三次,相當(dāng)于;AX

(AX)×8=90H⑷ 算術(shù)/邏輯右移指令

SAR/SHR指令格式:SAR/SHR

DST, 移位次數(shù)reg/mem,

imm8/CL功能:SAR是算術(shù)右移指令,對有符號數(shù)右移;

SHR是邏輯右移指令,對無符號數(shù)右移。都是將DST的內(nèi)容向右移位,移動次數(shù)由imm8/CL決定。第二章

指令系統(tǒng)

整數(shù)指令

邏輯/移位

右移_1CF

MSB 操作數(shù)

LSB算術(shù)右移(SAR)(最高位符號位擴展)邏輯右移(SHR)0CFMSB操作數(shù)LSB7第二章

指令系統(tǒng)

整數(shù)指令

邏輯/移位

右移_2說明:1、影響標(biāo)志位:OF、SF、ZF、PF、CF。2、移位次數(shù)的規(guī)定與SAL/SHL相同。3、移位次數(shù)為1時,對SAR指令,將OF置0;對SHR指令,將OF置成與原DST最高有效

位MSB相同的值。右移指令常用于實現(xiàn)除以2n的操作例如:將AX中的有符號數(shù)除以16(=24)。8MOVAX,-1024;(AX)=FC00HMOVCL,4SARAX,CL;(AX)=FFC0H=-64第二章

指令系統(tǒng)

整數(shù)指令

邏輯/移位

循環(huán)移位_19⑸ 循環(huán)移位指令

ROL/ROR/RCL/RCR指令格式:ROL/ROR/RCL/RCR

DST

,

移位次數(shù)reg/mem

,imm8/CL功能:ROL和ROR分別為左環(huán)移和右環(huán)移指令,對

DST進行循環(huán)左移和循環(huán)右移。RCL和RCR則是將標(biāo)志位CF與DST連接在一起進行循環(huán)左移和循環(huán)右移。說明:移位次數(shù)由imm8/CL決定。四條指令影響標(biāo)志位:OF、SF、ZF、PF、CF。第二章

指令系統(tǒng)

整數(shù)指令

邏輯/移位

循環(huán)移位_2CF

MSB 操作數(shù)DST

LSB循環(huán)左移

ROLCFMSB操作數(shù)DSTLSB循環(huán)右移

RORCFMSB操作數(shù)DSTLSBCFMSB操作數(shù)DSTLSB帶進位循環(huán)左移

RCL帶進位循環(huán)右移

RCR10第二章

指令系統(tǒng)

整數(shù)指令

邏輯/移位

循環(huán)移位_3舉例:編寫程序段,將寄存器AL中的內(nèi)容順序顛倒,即將AL7~AL0變?yōu)锳L0~AL7

。CFMSBAL

LSBMSBBL

LSBROL11RCRBL,AL

;BL

(AL)MOV

MOVAGAIN:ROLRCRCL,8BL,1AL,1;循環(huán)次數(shù)為8;(BL)依次左移,最高位進入CF;(AL)依次右移,CF填充最高位LOOP

AGAINCF第二章

指令系統(tǒng)

整數(shù)指令

邏輯/移位

雙精度移位SHLD:CFDST(目的)SRC(源)SHRD:CFSRC(源)DST(目的)31

0

31

0⑹ 雙精度左移/右移指令

SHLD/SHRD指令格式:SHLD/SHRD

DST,

SRC, 移位次數(shù)reg16/mem16,reg16,imm8/CLreg32/mem32,reg32,imm8/CL功能:將DST和SRC連成雙精度值(32位或64位)向左或右移,移動次數(shù)由imm8/CL決定。SRC內(nèi)容逐位移入DST,且自己保持不變。CF中的值為DST移出的最后一位。31

0

31

012影響標(biāo)志位:SF、ZF、PF、CF。這是80386新增指令。⑴

串傳送指令⑵

串裝入指令⑶

串存儲指令⑷

串掃描指令⑸

串比較指令⑹

串輸入指令⑺

串輸出指令⑻

重復(fù)前綴第二章

指令系統(tǒng)

整數(shù)指令

串操作

提要4、串操作指令13串操作的有關(guān)約定:①

DS:(E)SI為源串,ES:(E)DI為目的串,指令中不必指明操作數(shù)。② 源串的DS可用段前綴改變,但目的串的ES不能超越。③ 源串指針(E)SI和目的串指針(E)DI在每次操作后,

將根據(jù)DF的值來自動增量(DF=0)或自動減量(DF=1),以指向下一項,增/減量大小由操作數(shù)寬度決定。④ 通常串操作指令前可加重復(fù)前綴,此時必須用(E)CX作次數(shù)計數(shù)器,操作一次,(E)CX值減1,直至減為0,結(jié)束。⑤

只有串掃描、串比較指令影響標(biāo)志位。第二章

指令系統(tǒng)

整數(shù)指令

串操作

約定14⑴ 串傳送指令

MOVS/MOVSB/MOVSW/MOVSD指令格式:MOVS目的串,源串;由串?dāng)?shù)據(jù)的寬度決定mem

,mem;字節(jié)/字/雙字串操作MOVSB

MOVSW

MOVSD;字節(jié)串傳送;字串傳送;雙字串傳送第二章

指令系統(tǒng)

整數(shù)指令

串操作

串傳送_115(E)SI

((E)SI)±1/2/4(E)DI

((E)DI)±1/2/4;修改源指針;修改目的指針功能:將DS:[(E)SI]指定的源串中的一個字節(jié)/字/

雙字傳送到ES:[(E)DI]指定的目的串,并自動修改指針??杉又貜?fù)前綴。操作:[ES:(E)DI]

([DS:(E)SI]) ;傳送第二章

指令系統(tǒng)

整數(shù)指令

串操作

串傳送_2舉例:將數(shù)據(jù)段中自FIRST開始的100個字符數(shù)據(jù)復(fù)制到附加段以SECOND開始的數(shù)據(jù)區(qū)中,用基本傳送指令實現(xiàn)。程序段如下:LEASI,F(xiàn)IRST;置源串有效地址LEADI,SECOND;置目的串有效地址MOVCX,100;設(shè)置計數(shù)初值CLD;DF=0,增量模式DONE:MOVSBLOOP

DONE;;

等效于:REP

MOVSB16第二章

指令系統(tǒng)

整數(shù)指令

串操作

串傳送_3串傳送舉例示意圖數(shù)據(jù)段(源串)DS:SI

FIRSTES:DI

SECOND‘A’‘B’‘C’‘D’‘E’······附加段(目的串)存儲器17⑵ 串裝入指令

LODS/LODSB/LODSW/LODSD指令格式:LODS

源串mem;由串?dāng)?shù)據(jù)的寬度決定;字節(jié)/字/雙字串操作第二章

指令系統(tǒng)

整數(shù)指令

串操作

串裝入18操作:AL/AX/EAX

([DS:(E)SI])(E)SI

((E)SI)±1/2/4;裝入一個數(shù)據(jù);修改源指針LODSB/LODSW/LODSD

;無顯式操作數(shù),分別對應(yīng)字節(jié)/字/雙字裝入功能:將DS:[(E)SI]指定的源串中的一個字節(jié)/字/雙字裝入累加器中,并自動修改指針。該指令前一般不加重復(fù)前綴。⑶ 串存儲指令

STOS/STOSB/STOSW/STOSD指令格式:STOS

目的串mem;由串?dāng)?shù)據(jù)的寬度決定;字節(jié)/字/雙字串操作第二章

指令系統(tǒng)

整數(shù)指令

串操作

串存儲請問:LODSW

這兩條指令合用可實現(xiàn)MOVSW的功能嗎?19STOSW操作:[ES:(E)DI]

(AL/AX/EAX)(E)DI

((E)DI)±1/2/4;存儲數(shù)據(jù);修改目的指針STOSB/STOSW/STOSD

;無顯式操作數(shù),分別對應(yīng)字節(jié)/字/雙字存儲功能:將累加器的內(nèi)容存儲到ES:[(E)DI]指定的目的

串中,自動修改指針。該指令前可加重復(fù)前綴。⑷ 串掃描指令

SCAS/SCASB/SCASW/SCASD指令格式:SCAS

目的串mem;由串?dāng)?shù)據(jù)的寬度決定;字節(jié)/字/雙字串操作第二章

指令系統(tǒng)

整數(shù)指令

串操作

串掃描_120SCASB/SCASW/SCASD

;無顯式操作數(shù),分別對應(yīng)字節(jié)/字/雙字串掃描功能:用累加器中的內(nèi)容減去ES:[(E)DI]指定的目的串元素的內(nèi)容,僅改變標(biāo)志位,不改變二者的內(nèi)容,并自動修改指針。其實質(zhì)是在掃描串中尋找與累加器中的內(nèi)容相同者,有則將標(biāo)志ZF置1。該指令用于查找串?dāng)?shù)據(jù)中的關(guān)鍵字很方便。這條指令前常加重復(fù)前綴,后跟條件轉(zhuǎn)移指令。;DF清零,增量操作CLDMOV

AL

,‘*’REPNE

SCASBJE

MATCH…;不相等則重復(fù)掃描;ZF=1,找到;ZF=0,ECX=0,沒有找到第二章

指令系統(tǒng)

整數(shù)指令

串操作

串掃描_2舉例:通過加重復(fù)前綴,在一個字符串中搜索關(guān)鍵字‘*’

。程序段如下:LEA

EDI

,STRING

;EDI指向字符串首元素MOV

ECX

,LENGTH ;串長度送ECX21第二章

指令系統(tǒng)

整數(shù)指令

串操作

串比較_122⑸ 串比較指令

CMPS/CMPSB/CMPSW/CMPSD指令格式:CMPS

目的串,源串

;由串?dāng)?shù)據(jù)的寬度決定mem

,mem ;字節(jié)/字/雙字串操作CMPSB/CMPSW/CMPSD ;無顯式操作數(shù),分別對應(yīng)字節(jié)/字/雙字串比較功能:將DS:[(E)SI]指定的源串元素的內(nèi)容減去

ES:[(E)DI]指定的目的串元素的內(nèi)容,僅改變標(biāo)志位,不改變兩個元素的值,并自動修改指針。該指令前常加重復(fù)前綴,后跟條件轉(zhuǎn)移指令來判別兩串是否匹配。第二章

指令系統(tǒng)

整數(shù)指令

串操作

串比較_2舉例:比較兩個長度為500的字節(jié)字符串是否相同,若不同,找出出現(xiàn)不同時的位置,并記入相應(yīng)單元。程序段如下:LEA

SI,FIRST

;

SI指向源串起始單元

FIRSTJMPSAME23LEADI,SECOND;DI指向目的串起始單元

SECONDMOVCX,500

;設(shè)置計數(shù)器為

500CLD;標(biāo)志DF清零,增量模式REPECMPSB

;重復(fù)比較

(DS:[SI])-(ES:[DI])JNEFOUND

;不相同(ZF=0),轉(zhuǎn)

FOUNDSAME:RET;相同,返回FOUND:DECSI

;退回一字節(jié)MOVPOINT,SI

;將不相同位置保存⑹ 串輸入指令

INSB/INSW/INSD指令格式:INSBINSWINSD;輸入字節(jié)串;輸入字串;輸入雙字串第二章

指令系統(tǒng)

整數(shù)指令

串操作

串輸入24功能:從DX寄存器指定的端口輸入一個字節(jié)/字/雙字元素傳送到ES:[(E)DI]所指定的存儲單元,并自動修改目的指針,可加重復(fù)前綴。注意:不需經(jīng)過累加器AL/AX/EAX。舉例:LEADI,DEST;DEST存儲區(qū)在ES段MOVDX,301HMOVCX,8REPINSB;從端口301H輸入8字節(jié)串⑺ 串輸出指令

OUTSB/OUTSW/OUTSD指令格式:OUTSBOUTSW

OUTSD;輸出字節(jié)串;輸出字串;輸出雙字串第二章

指令系統(tǒng)

整數(shù)指令

串操作

串輸出25功能:將DS:[(E)SI]指定的存儲單元中的字節(jié)、字

或雙字串元素輸出到由DX寄存器指定的端口,并自動修改源指針,可加重復(fù)前綴。舉例:LEA

ESI,SOURCEMOV

DX

,300HMOV

CX,

8REP

OUTSB第二章

指令系統(tǒng)

整數(shù)指令

串操作

重復(fù)前綴_1⑻ 重復(fù)前綴

REP/REPE/REPZ/REPNE/REPNZ格式:加在串操作指令之前,不可單獨使用。先進行條件判別,再執(zhí)行串操作,之后CX減1。MOVSLODSREP

STOSINSOUTS配合工作的前綴REP重復(fù)操作直到(CX)=0為止,不影響標(biāo)志位CMPSSCASREPE/REPZ

相等/為0時重復(fù),即:(CX)≠0且ZF=1時重復(fù)。REPNE/REPNZ

不等/不為0時重復(fù),即:(CX)≠0且ZF=0時重復(fù)。REPE/REPZ或REPNE/REPNZ26使用串操作指令的一般步驟:第二章

指令系統(tǒng)

整數(shù)指令

串操作

重復(fù)前綴_227LEA

DI,tab2

;

②把將要存放數(shù)據(jù)串的附加段首址(或

反向操作時的末地址)放入DI寄存器中;LEA

SI,tab1

;①把存放在數(shù)據(jù)段中的源串首址(如反向操作則應(yīng)是末址)放入SI寄存器;MOVCX,length;③把數(shù)據(jù)串長度放入CX寄存器作為重復(fù)操作計數(shù)值;CLD;④建立方向標(biāo)志;REPMOVSB;⑤執(zhí)行重復(fù)串操作。第二章 習(xí)題428教材

P118至P122:2.15(2)2.22(1)(5)(7)(8)2.252.372.43(1)第二章

指令系統(tǒng)

整數(shù)指令

控制轉(zhuǎn)移

提要295、控制轉(zhuǎn)移指令這類指令用于改變程序執(zhí)行順序(對應(yīng)程序的轉(zhuǎn)移尋址),其實質(zhì)就是改變CS:(E)IP的內(nèi)容。主要包括以下內(nèi)容:⑴

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

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

循環(huán)控制指令⑷

過程調(diào)用/返回指令⑸

中斷和中斷返回指令其中只有中斷指令影響標(biāo)志位。程序轉(zhuǎn)移示意圖:第二章

指令系統(tǒng)

整數(shù)指令

控制轉(zhuǎn)移

示意圖代碼段1指令1······存儲器指令2指令i代碼段2指令1······指令2指令iCS:IP(2000H:100H)

20100H段間轉(zhuǎn)移30CS:IP(1000H:400H)

10400H段內(nèi)轉(zhuǎn)移10420H⑴ 無條件轉(zhuǎn)移指令

JMP指令格式:JMP目標(biāo)操作數(shù)

lablereg16/32mem16/32;直接轉(zhuǎn)移;段內(nèi)間接轉(zhuǎn)移;段內(nèi)或段間間接轉(zhuǎn)移第二章

指令系統(tǒng)

整數(shù)指令

控制轉(zhuǎn)移

無條件_1功能:無條件地控制程序轉(zhuǎn)移到目標(biāo)操作數(shù)指定的目標(biāo)地址,即將目標(biāo)地址裝入(E)IP或CS:(E)IP。短標(biāo)號

段內(nèi)直接短轉(zhuǎn)移近標(biāo)號

段內(nèi)直接轉(zhuǎn)移8位(E)IP遠(yuǎn)標(biāo)號

段間直接轉(zhuǎn)移直接尋址leble指令中間接尋址寄存器/存儲器

段內(nèi)間接轉(zhuǎn)移存儲器

段間間接轉(zhuǎn)移CS:(E)IP(E)IPCS:(E)IP31第二章

指令系統(tǒng)

整數(shù)指令

控制轉(zhuǎn)移

無條件_232① 段內(nèi)直接短轉(zhuǎn)移(SHORT)指令格式:

JMP

SHORT

目標(biāo)標(biāo)號目標(biāo)標(biāo)號專用于指向指令單元,SHORT是JMP特有的短轉(zhuǎn)移運算符,指明此處的目標(biāo)操作數(shù)是一個8位補碼的位移量。執(zhí)行:

(E)IP

((E)IP)+DISP8-128≤

DISP8

≤+127

(有符號數(shù),補碼)

DISP8是當(dāng)前(E)IP與下一條指令入口之間的距離,CS內(nèi)容保持不變。注意:容易因使用不當(dāng)超出范圍而出錯。舉例:

JMP

SHORT

HELLO…HELLO:MOV

AL,

3第二章

指令系統(tǒng)

整數(shù)指令

控制轉(zhuǎn)移

無條件_3JMP指令1010AH1010BHE808...B003MOV指令代碼段10100H10101H當(dāng)前(IP)

10102H

+

08

10010AHHELLO

33第二章

指令系統(tǒng)

整數(shù)指令

控制轉(zhuǎn)移

無條件_4② 段內(nèi)直接轉(zhuǎn)移(又稱相對轉(zhuǎn)移)指令格式:JMP

目標(biāo)標(biāo)號 ;近(NEAR)標(biāo)號16位尋址時,是一個16位補碼的位移量;32位尋址時,是一個32位補碼的位移量。執(zhí)行:16位時,

IP

(IP)

+

DISP1632位時,EIP

(EIP)+

DISP32CS內(nèi)容保持不變。例如:JMP

PROGRAMJMP指令02013H存儲器E9H12H34H…代碼段當(dāng)前IP02016H+

3412H新IP

05428H位移量05428H34第二章

指令系統(tǒng)

整數(shù)指令

控制轉(zhuǎn)移

無條件_535③

段間直接轉(zhuǎn)移指令格式:JMP

FAR

PTR 目標(biāo)標(biāo)號 ;遠(yuǎn)(FAR)標(biāo)號指令中直接給出目標(biāo)標(biāo)號所指向的入口地址的段選擇符(或段值)和偏移地址。執(zhí)行:段選擇符(或段值)

CS偏移地址

(E)IP例如:JMP

FAR

PTR

LABLE舉例:段間直接轉(zhuǎn)移C1

SEGMENT…JMP

FAR

PTR

A1…C1

ENDS…C2

SEGMENT…A1:MOV

AL,3…C2

ENDS第二章

指令系統(tǒng)

整數(shù)指令

控制轉(zhuǎn)移

無條件_6JMP指令C1代碼段新IP新CS20000HMOV指令(A1:)20250HC2代碼段EAH50H02H00H20H······B0H03H···存儲器36第二章

指令系統(tǒng)

整數(shù)指令

控制轉(zhuǎn)移

無條件_737④

段內(nèi)間接轉(zhuǎn)移指令格式:JMP

reg/mem指令中指定的16位/32位寄存器或存儲器單元中存放著轉(zhuǎn)移目標(biāo)的16位/32位段內(nèi)偏移量EA。執(zhí)行時:用EA代替當(dāng)前(E)IP,CS不變。例如:JMPBX;16位段內(nèi)間接轉(zhuǎn)移JMPEDX;32位段內(nèi)間接轉(zhuǎn)移JMPWORDPTR[BX];16位段內(nèi)間接轉(zhuǎn)移JMPDWORDPTR[EAX];32位段內(nèi)間接轉(zhuǎn)移第二章

指令系統(tǒng)

整數(shù)指令

控制轉(zhuǎn)移

無條件_838⑤

段間間接轉(zhuǎn)移指令格式:JMP

mem指令中指定的存儲器單元中存放著轉(zhuǎn)移目標(biāo)的段值(或段選擇符)和16位(或32位)偏移量。執(zhí)行時:段值:16位偏移量

CS:IP

或段選擇符:32位偏移量

CS:EIP例如:JMP

DWORD

PTR

[BX]JMP

FWORD

PTR

[EAX];16位段間間接轉(zhuǎn)移;32位段間間接轉(zhuǎn)移第二章

指令系統(tǒng)

整數(shù)指令

控制轉(zhuǎn)移

無條件_9指令代碼段新IP00F6H新CS1E40H09226H偏移量操作碼操作碼32H00HF6H00H40H1EH······(DS)×16

091D0HBX

0024H+

0032H09226H數(shù)據(jù)段···舉例:Pentium工作在實地址方式時,(IP)=3D8FH,(CS)=1000H,(DS)=091DH,(BX)=0024H,[09226]=00F6H,

[09228]=1E40H。JMP

DWORD

PTR

32H[BX]

執(zhí)行過程如圖:存儲器段基址位移量39⑵ 條件轉(zhuǎn)移指令

Jcc指令格式:Jcc

lable ;段內(nèi)短轉(zhuǎn)移或段內(nèi)直接轉(zhuǎn)移功能:根據(jù)標(biāo)志位狀態(tài)組成的轉(zhuǎn)移條件cc,決定程序的執(zhí)行流向。第二章

指令系統(tǒng)

整數(shù)指令

控制轉(zhuǎn)移

條件_1是40label否順序執(zhí)行Jcc

labelcc成立嗎?cc條件成立時指令執(zhí)行:

16位尋址:IP

(IP)+DISP8/DISP1632位尋址:

EIP

(EIP)+DISP8/DISP32說明:① 對于8086,條件轉(zhuǎn)移只有短轉(zhuǎn)移,轉(zhuǎn)移距離為:-128~+127;② 對于80386/80486/Pentium,推廣為段內(nèi)轉(zhuǎn)移,轉(zhuǎn)移距離分別為:16位尋址:-32768~3276732位尋址:-231~231-1③

這類指令通常緊跟在算術(shù)/邏輯指令之后。④ 條件轉(zhuǎn)移指令共有19條,可分為無符號數(shù)條件轉(zhuǎn)移指令和有符號數(shù)條件轉(zhuǎn)移指令兩類。第二章

指令系統(tǒng)

整數(shù)指令

控制轉(zhuǎn)移

條件_241第二章

指令系統(tǒng)

整數(shù)指令

控制轉(zhuǎn)移

條件_342無符號數(shù)條件轉(zhuǎn)移指令(10條)指令助記符轉(zhuǎn)移條件含

義JCCF=1有進位轉(zhuǎn)移(與JB/JNAE重疊)JNCCF=0無進位轉(zhuǎn)移(與JAE/JNB重疊)JP/JPEPF=1奇偶位為1轉(zhuǎn)移JNP/JPOPF=0奇偶位為0轉(zhuǎn)移JA/JNBECF=ZF=0高于/不低于等于轉(zhuǎn)移JAE/JNBCF=0高于等于/不低于轉(zhuǎn)移JB/JNAECF=1低于/不高于等于轉(zhuǎn)移JBE/JNACF=1或ZF=1低于等于/不高于轉(zhuǎn)移JE/JZZF=1等于/為零轉(zhuǎn)移JNE/JNZZF=0不等于/非零轉(zhuǎn)移第二章

指令系統(tǒng)

整數(shù)指令

控制轉(zhuǎn)移

條件_443有符號數(shù)條件轉(zhuǎn)移指令(9條)指令助記符轉(zhuǎn)移條件含

義JOOF=1溢出轉(zhuǎn)移JNOOF=0無溢出轉(zhuǎn)移JSSF=1為負(fù)數(shù)轉(zhuǎn)移JNSSF=0為正數(shù)轉(zhuǎn)移JG/JNLEZF=0且SF=OF大于/不小于等于轉(zhuǎn)移JGE/JNLSF=OF大于等于/不小于轉(zhuǎn)移JL/JNGESF≠OF小于/不大于等于轉(zhuǎn)移JLE/JNGZF=1或SF≠OF小于等于/不大于轉(zhuǎn)移JCXZ(CX)=0CX寄存器為零轉(zhuǎn)移第二章

指令系統(tǒng)

整數(shù)指令

控制轉(zhuǎn)移

條件_5舉例:AX、BX和CX為有符號數(shù),找出三者中最大的數(shù),結(jié)果存于AX中。程序段如下:44CMP

AX,CXJGE

BIGGER;兩數(shù)比較;若(AX)≥(CX),則轉(zhuǎn)移XCHG

AX,CX ;否則,兩數(shù)交換BIGGER:CMP

AX,BXJNL

EXIT ;若(AX)≥(BX),則轉(zhuǎn)移XCHG

AX,BX ;否則,兩數(shù)交換EXIT:HLT

;此時,AX中為最大數(shù)第二章

指令系統(tǒng)

整數(shù)指令

控制轉(zhuǎn)移

循環(huán)_1-128~+127⑶ 循環(huán)控制指令

LOOP指令格式:LOOPLOOPE/LOOPZLOOPNE/LOOPNZ短標(biāo)號;短標(biāo)號;短標(biāo)號;功能:用(E)CX作為循環(huán)遞減計數(shù)器,執(zhí)行時,先將(E)CX減1,再判斷條件,決定是否轉(zhuǎn)移。執(zhí)行轉(zhuǎn)移:(E)IP

((E)IP)+DISP8助記符條

件滿足條件時的操作LOOP(E)CX≠0轉(zhuǎn)移即循環(huán)LOOPE/LOOPZ(E)CX≠0且ZF=1轉(zhuǎn)移即循環(huán)LOOPNE/LOOPNZ(E)CX≠0且ZF=0轉(zhuǎn)移即循環(huán)45第二章

指令系統(tǒng)

整數(shù)指令

控制轉(zhuǎn)移

循環(huán)_246舉例:用循環(huán)控制指令實現(xiàn)延時。MOV

ECX,000F0000H

;置初值NEXT:NOP ;空操作,產(chǎn)生延時LOOP

NEXT ;執(zhí)行F0000H次⑷ 調(diào)用/返 指令

CALL/RET調(diào)用/返回是一種可保護/恢復(fù)現(xiàn)場的控制轉(zhuǎn)移指令,用于主程序調(diào)用子程序(即過程PROCEDURE)。這兩條指令應(yīng)配對使用。第二章

指令系統(tǒng)

整數(shù)指令

控制轉(zhuǎn)移

調(diào)用/返_1指令格式:

CALLRET

(imm)目標(biāo)操作數(shù)

proc/lablereg/mem功能:CALL用于調(diào)用子程序(激活一個過程);RET用于從被調(diào)用子程序返回調(diào)用程序。CALL與JMP指令相似,可實現(xiàn)段內(nèi)的直接或間接調(diào)用、段間的直接或間接調(diào)用。兩者最大區(qū)別是:

JMP轉(zhuǎn)移后不用返回;CALL轉(zhuǎn)移后還要返回原處,必須保護斷點的現(xiàn)場。47第二章

指令系統(tǒng)

整數(shù)指令

控制轉(zhuǎn)移

調(diào)用/返_2…① 段內(nèi)直接調(diào)用與返回(以下用16位方式說明)當(dāng)前CS不變,只需對當(dāng)前IP進行入棧/出棧操作。CALL

proc/lable

;SP

(SP)-2

,SP

(IP)IP

(IP)+DISP16RET

;IP

(SP)

,

SP

(SP)+2其中DISP16為位移量,在指令中給出。②

段內(nèi)間接調(diào)用與返回當(dāng)前CS不變,只需對當(dāng)前IP進行入棧/出棧操作。CALL

reg/mem;SP

(SP)-2

,SP

(IP)IP

EA(在reg或mem中)RET;IP

(SP)

,

SP

(SP)+2…48③

段間直接調(diào)用與返回需對當(dāng)前CS和IP進行入棧/出棧操作:CALL

proc/lable;SP

(SP)-2

,SP

(CS)SP

(SP)-2

,SP

(IP);IP

EA(指令中)

,CS

段值(指令中)RET;IP

(SP)

,SP

(SP)+2CS

(SP)

,SP

(SP)+2第二章

指令系統(tǒng)

整數(shù)指令

控制轉(zhuǎn)移

調(diào)用/返回_3…④

段間間接調(diào)用需對當(dāng)前的CS和IP進行入棧/出棧操作:CALL

mem;SP

(SP)-2

,SP

(CS)SP

(SP)-2

,SP

(IP);IP

EA(mem中)

,CS

段值(mem+2中)RET;IP

(SP),SP

(SP)+2CS

(SP),SP

(SP)+2…49⑤ 帶參數(shù)的過程調(diào)用與返回(可傳遞參數(shù))調(diào)用前先壓參數(shù)入棧;進入子程序后,可從堆棧中

取出參數(shù)進行處理;返回時,用帶立即數(shù)的返回指令,先恢復(fù)現(xiàn)場,然后釋放堆棧中已用參數(shù)所占單元。第二章

指令系統(tǒng)

整數(shù)指令

控制轉(zhuǎn)移

調(diào)用/返回_4SP

0100HIP低IP高參數(shù)2低參數(shù)2高參數(shù)1低參數(shù)1高SP

00FAHSP

00FCH4字節(jié)段內(nèi)RET

imm段間RET

immIP

(SP)SP

(SP)+2SP

(SP)+immIP

(SP)SP

(SP)+2CS

(SP)SP

(SP)+2SP

(SP)+imm50第二章

指令系統(tǒng)

整數(shù)指令

控制轉(zhuǎn)移

中斷_1⑸ 中斷和中斷返回指令

INT/INTO/IRET中斷是指CPU被隨機發(fā)生的某事件或特意安排的指令暫停當(dāng)前程序的運行,在保護好斷點的現(xiàn)場(壓棧)后,轉(zhuǎn)去執(zhí)行中斷服務(wù)程序,中斷返回時,恢復(fù)現(xiàn)場

(彈棧),繼續(xù)運行被暫停的程序。指令格式:INT

nINTOIRET功能:INT

n是軟中斷指令,產(chǎn)生一個中斷號為n的軟中斷。n為8位立即數(shù),取值范圍:0~255。執(zhí)行:標(biāo)志寄存器和斷點地址(CS:(E)IP的值)壓棧,將TF、IF清0(關(guān)閉單步中斷和可屏蔽中斷),中斷向量送入CS:(E)IP,執(zhí)行中斷服務(wù)程序。51第二章

指令系統(tǒng)

整數(shù)指令

控制轉(zhuǎn)移

中斷_2INTO

溢出中斷指令,INT

n的特例,即:INTO

=

INT

4。該指令一般緊跟算術(shù)運算指令之后,若算術(shù)指令執(zhí)行后有溢出(OF=1)時,INTO將產(chǎn)生溢出中斷;否則,INTO無任何操作。52IRET中斷返回指令,這是每個中斷服務(wù)程序必須有的指令,通常是最后執(zhí)行的一條指令。功能:恢復(fù)斷點現(xiàn)場,執(zhí)行過程為INT

n的逆過程即:從堆棧中彈出保護現(xiàn)場的(E)IP、CS和標(biāo)志寄存器值,重新執(zhí)行被中斷的程序。6、位操作指令386以上特有指令,包括位測試指令和位掃描指令。⑴ 位測試指令

BT/BTS/BTR/BTC指令格式:BT/BTS/BTR/BTCDST

,reg16/mem16reg32/mem32SRCreg/immreg/imm功能:首先,對DST指定的操作數(shù)按SRC指定的位進行測試并將該位的值送入標(biāo)志位CF;之后,BT無動作,BTS、BTR和BTC則將DST中的被測試位分別置1、清0或求反。注意:只對一位進行操作。第二章

指令系統(tǒng)

整數(shù)指令

位操作

位測試_153例如:BTBTRBTSEAX,1EBX,16AX,

0;EAX的D1位

CF;EBX的D16位

CF,然后D16位清零;AX的D0位

CF,然后D0位置1舉例:測試端口300H的位3并復(fù)位MOVDX,300HSTU:INAX,DX;讀入16位數(shù)據(jù)BTRAX,3;測試并復(fù)位位3JCBIT3-SET;測試位為1轉(zhuǎn)移JMPSTU;返 重讀BIT3-SET:…

…;服務(wù)處理第二章

指令系統(tǒng)

整數(shù)指令

位操作

位測試_254⑵ 位掃描指令

BSF/BSR指令格式:

BSF/BSRDST,reg,SRCreg/mem第二章

指令系統(tǒng)

整數(shù)指令

位操作

位掃描_1功能:BSF為向前位掃描指令,對SRC指定的16位或32位位串:從低位(b0)

高位(b15/b31)進行掃描,將掃描到的第一個

“1”位的下標(biāo)存入DST指定的寄存器中。若SRC為全0時,ZF置1,DST內(nèi)容無意義;否則ZF清0。BSR為向后位掃描指令,除了是從高位

低位掃描外,其它與BSF一樣。要求DST與SRC等長。55舉例:判別某端口(28EH)發(fā)生的某個獨立事件

(置1表示發(fā)生)。MOV

DX,28EH;讀入16位數(shù)據(jù);掃描AX的內(nèi)容NOTHING:IN

AX,DXBSF

CX,AXJZ

NOTHING…

…;根據(jù)CX的數(shù)字作相應(yīng)處理第二章

指令系統(tǒng)

整數(shù)指令

位操作

位掃描_2567、標(biāo)志操作指令標(biāo)志寄存器(E)FLAGS中的標(biāo)志位通常是由算術(shù)/邏輯運算的結(jié)果影響的,但也可以直接對它或它的某些位進行操作,通過改變其狀態(tài)來控制程序的運行。主要有以下內(nèi)容:⑴

標(biāo)志寄存器讀寫指令⑵

標(biāo)志寄存器入棧/出棧指令⑶

單個標(biāo)志位操作指令第二章

指令系統(tǒng)

整數(shù)指令

標(biāo)志操作

提要57第二章

指令系統(tǒng)

整數(shù)指令

標(biāo)志操作

讀寫58⑴ 標(biāo)志寄存器讀寫指令

LAHF/SAHF指令格式:LAHFSAHF功能:LAHF為讀指令,用于將EFLAGS

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論