3-2@-第3章(指令系統(tǒng)2) 匯編語言_第1頁
3-2@-第3章(指令系統(tǒng)2) 匯編語言_第2頁
3-2@-第3章(指令系統(tǒng)2) 匯編語言_第3頁
3-2@-第3章(指令系統(tǒng)2) 匯編語言_第4頁
3-2@-第3章(指令系統(tǒng)2) 匯編語言_第5頁
已閱讀5頁,還剩43頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

匯編語言邏輯指令:

邏輯運算指令

AND、OR、NOT、XOR、TEST移位指令

SHL、SHR、SAL、SAR、ROL、ROR、RCL、RCR匯編語言邏輯非指令:NOT

OPR

*OPR不能為立即數(shù)執(zhí)行操作:(OPR)

(OPR)*

不影響標志位

邏輯與指令:ANDDST,SRC執(zhí)行操作:(DST)(DST)(SRC)邏輯或指令:OR

DST,SRC執(zhí)行操作:(DST)(DST)(SRC)異或指令:

XORDST,SRC執(zhí)行操作:(DST)(DST)(SRC)測試指令:TESTOPR1,OPR2

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

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

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

ORAL,20H

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

XORAL,3例:測試某些位是0是1

TESTAL,1JZEVEN

********

OR00100000**1*****

********

XOR00000011

********

********

AND11111100******00匯編語言邏輯左移

SHLOPR,CNT邏輯右移SHROPR,CNT算術(shù)左移

SALOPR,CNT(同邏輯左移)算術(shù)右移SAROPR,CNT

CF

0移位指令

0

CFCF匯編語言循環(huán)左移ROLOPR,CNT循環(huán)右移ROROPR,CNT帶進位循環(huán)左移RCLOPR,CNT帶進位循環(huán)右移RCROPR,CNTCF

CFCFCF匯編語言注意:

*OPR可用除立即數(shù)以外的任何尋址方式*

CNT=1,SHLOPR,1CNT>1,MOVCL,CNTSHLOPR,CL;以

SHL為例*條件標志位:

CF=移入的數(shù)值

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

移位指令:

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

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

不影響SF、ZF、PF、AFOF=匯編語言例:(AX)=0012H,(BX)=0034H,把它們裝配成(AX)=1234H

例:(BX)=84F0H(1)(BX)為無符號數(shù),求

(BX)/2

SHRBX,1

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

(BX)/2

SARBX,1

;(BX)=0C278HMOVCL,8ROLAX,CLADDAX,BX匯編語言MOVCH,4;循環(huán)次數(shù)MOVCL

,4

;移位次數(shù)NEXT:ROLBX,CLMOVAX,BXANDAX,0FHPUSHAXDECCHJNZNEXT00080004000F

0000

(SP)(3)(BX)=84F0H,把(BX)中的16位數(shù)每4位壓入堆棧匯編語言串處理指令:

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

CLD、STD

串處理指令

串重復(fù)前綴

MOVSB/MOVSWREP

STOSB/STOSW

REPE/REPZ

LODSB/LODSW

REPNE/REPNZ

CMPSB/CMPSWSCASB/SCASW

匯編語言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

方向標志DF=0時用+,DF=1時用-匯編語言與REP配合工作的MOVS/STOS/LODSREPMOVS/STOS/LODS執(zhí)行操作:(1)如(CX)=0則退出

REP,否則轉(zhuǎn)(2)(2)(CX)(CX)-1(3)執(zhí)行MOVS/STOS/LODS(4)重復(fù)(1)~(3)REPMOVS:將數(shù)據(jù)段中的整串?dāng)?shù)據(jù)傳送到附加段源串(數(shù)據(jù)段)→目的串(附加段)匯編語言執(zhí)行REPMOVS之前,應(yīng)先做好:(1)源串首地址(末地址)→

SI(2)目的串首地址(末地址)→

DI(3)串長度→

CX(4)建立方向標志

(CLD

使DF=0,STD

使DF=1)匯編語言

(SI)(DI)

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

(SI)(DI)

匯編語言datasegmentmess1db‘personal_computer’dataendsextrasegmentmess2db17dup(?)extraendscodesegment…

leasi,mess1leadi,mess2

mov

cx,17

cld

repmovsb…codeendsleasi,mess1+16leadi,mess2+16mov

cx,17stdrepmovsb匯編語言STOS存入串指令:STOSDSTSTOSB(字節(jié))

STOSW(字)執(zhí)行操作:字節(jié)操作:((DI))←(AL),(DI)←(DI)±1

字操作:((DI))←(AX),(DI)←(DI)±2

例:把附加段中的

10個字節(jié)緩沖區(qū)置為20Hleadi,mess2moval,20Hmov

cx,10cldrepstosbleadi,mess2movax,2020Hmov

cx,5cldrepstosw匯編語言LODS從串取指令:

LODSSRCLODSB(字節(jié))

LODSW(字)執(zhí)行操作:字節(jié)操作:(AL)←((SI)),(SI)←(SI)±1

字操作:(AX)←((SI)),(SI)←(SI)±2注意:*LODS指令一般不與REP聯(lián)用*

源串一般在數(shù)據(jù)段中(允許使用段跨越前綴來修改),

目的串必須在附加段中*不影響條件標志位匯編語言CMPS串比較指令:

CMPSSRC,DSTCMPSB(字節(jié))

CMPSW(字)

執(zhí)行操作:

(1)((SI))-((DI))

根據(jù)比較結(jié)果置條件標志位:相等ZF=1

不等ZF=0(2)字節(jié)操作:(SI)←(SI)±1,(DI)←(DI)±1

字操作:(SI)←(SI)±2,(DI)←(DI)±2匯編語言SCAS串掃描指令:

SCASDSTSCASB(字節(jié))

SCASW

(字)執(zhí)行操作:字節(jié)操作:(AL)-((DI)),(DI)←(DI)±1

字操作:(AX)-((DI)),(DI)←(DI)±2匯編語言與REPE/REPZ(REPNE/REPNZ)配合工作的

CMPS

和SCASREPE/REPZCMPS/SCAS

或REPNE/REPNZCMPS/SCAS

執(zhí)行操作:

(1)如(CX)=0或ZF=0(ZF=1)則退出,否則轉(zhuǎn)(2)(2)(CX)←(CX)-1(3)執(zhí)行CMPS/SCAS(4)重復(fù)(1)~(3)匯編語言例:從一個字符串中查找一個指定的字符

messdb‘COMPUTER’leadi,mess

moval,‘T’

mov

cx,8

cld

repne

scasbCOMPUTER(di)

(di):相匹配字符的下一個地址

(cx):剩下還未比較的字符個數(shù)(di)匯編語言例:比較兩個字符串,找出它們不相匹配的位置例:反向傳送COMPUTERCOMPUTERleasi,mess1leadi,mess2mov

cx,8cldrepe

cmpsb匯編語言控制轉(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)匯編語言段間直接遠轉(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ù)單個條件標志的設(shè)置情況轉(zhuǎn)移

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

格式測試條件

<JB(JNAE,JC)OPRCF=1>=JNB(JAE,JNC)OPRCF=0<=JBE(JNA)OPRCF∨ZF=1>JNBE(JA)OPRCF∨ZF=0*

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

格式測試條件<JL(JNGE)OPRSFOF=1>=JNL(JGE)OPRSFOF=0<=JLE(JNG)OPR(SFOF)∨ZF=1>JNLE(JG)OPR(SFOF)∨ZF=0*

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

格式測試條件

JCXZOPR(CX)=0匯編語言例:如果X>50,轉(zhuǎn)到TOO_HIGH;計算

X-Y,如果溢出轉(zhuǎn)到OVERFLOW,否則|X-Y|→RESULT JGJOJNS

MOVAX,XCMPAX,50

TOO_HIGHSUBAX,Y

OVERFLOW

NONNEGNEGAXNONNEG:MOVRESULT,AXTOO_HIGH:……OVERFLOW:……匯編語言例:、是雙精度數(shù),分別存于DX,AX及BX,CX中,

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

CMPDX,BXJGL1JLL2CMPAX,CXJAL1L2:……L1:……匯編語言循環(huán)指令:注意:*

CX中存放循環(huán)次數(shù)*

只能使用段內(nèi)直接尋址的8位位移量LOOPLOOPZ/LOOPELOOPNZ/LOOPNE執(zhí)行步驟:

(1)(CX)←(CX)-1(2)是否滿足測試條件:滿足則(IP)←(IP)+8位位移量,實行循環(huán);不滿足則IP不變,退出循環(huán)。匯編語言循環(huán)指令:LOOPOPR測試條件:(CX)0為零或相等時循環(huán)指令:LOOPZ(LOOPE)OPR測試條件:ZF=1且(CX)0不為零或不相等時循環(huán)指令:LOOPNZ(LOOPNE)OPR測試條件:ZF=0且(CX)0LOOPAGAIN

DECCXJNZAGAIN匯編語言例:求首地址為ARRAY的M個字之和,結(jié)果存入TOTAL……MOVCX,MMOVAX,0MOVSI,AXAGAIN:ADDAX,ARRAY[SI]ADDSI,2LOOPAGAINMOVTOTAL,AX……匯編語言例:在多重循環(huán)的程序結(jié)構(gòu)中,CX計數(shù)器的保存和恢復(fù)

MOVCX,MAGAIN:……PUSHCX

MOVCX,NNEXT:……LOOPNEXT……POPCXLOOPAGAIN

MOVDI,MAGAIN:……

MOVCX,NNEXT:……LOOPNEXT……DECDIJNZAGAIN匯編語言子程序調(diào)用和返回指令:code1segmentmainprocfar……

callsub……retmainendpcode1endscode2segmentsubprocfar……

retsubendpcode2ends

段間調(diào)用和返回codesegmentmainprocfar……

callsub……retmainendpsubprocnear……

retsubendpcodeends

段內(nèi)調(diào)用和返回匯編語言

CALL調(diào)用指令段內(nèi)直接近調(diào)用:CALLDST執(zhí)行操作:(SP)←(SP)-2((SP)+1,(SP))←(IP)(IP)←(IP)+16位位移量段內(nèi)間接近調(diào)用:CALLDST執(zhí)行操作:(SP)←(SP)-2((SP)+1,(SP))←(IP)(IP)←(EA)匯編語言段間直接遠調(diào)用:CALLDST執(zhí)行操作:(SP)←(SP)-2((SP)+1,(SP))←(CS)(SP)←(SP)-2((SP)+1,(SP))←(IP)(IP)←偏移地址

(CS)←段地址段間間接遠調(diào)用:CALLDST執(zhí)行操作:(SP)←(SP)-2((SP)+1,(SP))←(CS)(SP)←(SP)-2((SP)+1,(SP))←(IP)(IP)←(EA)(CS)←(EA+2)匯編語言RET返回指令段內(nèi)近返回:RET執(zhí)行操作:(IP)←((SP)+1,(SP))(SP)←(SP)+2段內(nèi)帶立即數(shù)近返回:RETEXP段間遠返回:RET執(zhí)行操作:(IP)←((SP)+1,(SP))(SP)←(SP)+2(CS)←((SP)+1,(SP))(SP)←(SP)+2段間帶立即數(shù)遠返回:RETEXP匯編語言例:帶立即數(shù)返回(SP)

堆棧段codesegmentmainprocfar……pushaxpushbxpushcx

callsub……retmainendpsubprocnear……ret6sub

endpcodeends(IP)(cx)(bx)(ax)(SP)(SP)匯編語言中斷指令:

類型0的(IP)

類型0的(CS)

類型1的(IP)

類型1的(CS)

類型N的(IP)

類型N的(CS)

類型255的(IP)

類型255的(CS)0000000004

4*N003FC中斷向量區(qū)中斷向量:中斷例行程序的入口地址,存放于中斷向量區(qū)。

00000H003FFHA0000HC0000HF0000H640K(RAM)128K(RAM)192K(ROM)64K(ROM)匯編語言中斷指令:INTTYPE

或INT執(zhí)行操作:(SP)←(SP)-2((SP)+1,(SP))←(PSW

)(SP)←(SP)-2((SP)+1,(SP))←(CS

)(SP)←(SP)-2((SP)+1,(SP))←(IP

)(IP)←(TYPE*4)(CS)←(TYPE*4+2)溢出中斷指令:INTO執(zhí)行操作:若OF=1,

(IP)←(10H)(CS)←(12H)匯編語言從中斷返回指令:IRET執(zhí)行操作:(IP

)←((SP)+1,(SP))(SP)←(SP)+2(CS

)←((SP)+1,(SP))(SP)←(SP)+2(PSW

)←((SP)+1,(SP))(SP)←(SP)+2

注意:*

TYPE(0~255)是中斷類型號,隱含的類型號為3*

INT指令還把IF和TF置0,但不影響其它標志位*

IRET指令執(zhí)行完,標志位由堆棧中取出的值確定匯編語言處理機控制與雜項操作指令:

標志處理指令

CLC、STC、CMC、

CLD、STD、

CLI、STI

其他處理機控制與雜項操作指令

NOP、HLT、WAIT、ESC、LOCK

匯編語言標志處理指令:

CLCCF←0

CMCCF←CF

STCCF←1

CLDDF←0

STDDF←1

CLIIF←0

STIIF←1注意:*

只影響本指令指定的標志匯編語言其他處理機控制與雜項操作指令:

NOP

無操作(機器碼占一個字節(jié))HLT

暫停機(等待一次外中斷,之后繼續(xù)執(zhí)行程序)WAIT

等待(等待外中斷,之后仍繼續(xù)等待)ESC

換碼LOCK

封鎖

(維持總線的鎖存信號,直到其后的指令執(zhí)行完)

注意:*

不影響條件標志

匯編語言80x86的指令系統(tǒng):(1)

指令集的32位擴展

*所有16位指令都可擴展到32位

MOVEAX,1*可使用32位的存儲器尋址方式

MOVEAX,[EDX](2)使用方式的擴展

*IMUL:單操作數(shù)指令→

雙操作數(shù)指令/三操作數(shù)指令

IM

溫馨提示

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

評論

0/150

提交評論