《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 解決方案 > 匯編基礎(chǔ):跳轉(zhuǎn)指令

匯編基礎(chǔ):跳轉(zhuǎn)指令

2017-06-10
關(guān)鍵詞: 匯編

匯編中的跳轉(zhuǎn)指令從大體上分為無條件轉(zhuǎn)移指令和條件轉(zhuǎn)移指令。下面就圍繞著這兩個(gè)大的方面來探究下匯編語言的跳轉(zhuǎn)指令,。

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

無條件轉(zhuǎn)移指令JMP將無條件地轉(zhuǎn)移到指令的目的地址去執(zhí)行指令,因此JMP指令必須指定轉(zhuǎn)移的目標(biāo)地址

無條件轉(zhuǎn)移指令可以分為兩類:段內(nèi)跳轉(zhuǎn)和段間跳轉(zhuǎn),,段內(nèi)轉(zhuǎn)移是指在同一段的范圍內(nèi)運(yùn)行轉(zhuǎn)移,。此時(shí)轉(zhuǎn)移指令將改變IP寄存器的值,即用新的轉(zhuǎn)移目標(biāo)地址代替原有的IP寄存器的值來實(shí)現(xiàn)轉(zhuǎn)移,,因此,,此時(shí)的目標(biāo)地址給出偏移量即可,段間轉(zhuǎn)移是要轉(zhuǎn)移到另一個(gè)邏輯段去執(zhí)行程序,,此時(shí)不僅要修改IP寄存器的值,,而且還需要修改CS寄存器的值才能達(dá)到轉(zhuǎn)移的目的,因此,,此時(shí)的目標(biāo)地址應(yīng)由段基值和偏移量兩部分組成,。

1、段內(nèi)轉(zhuǎn)移

段內(nèi)轉(zhuǎn)移時(shí),,指令和要轉(zhuǎn)移的目標(biāo)指令同屬于一個(gè)段,,因此只需修改寄存器IP的值,而代碼段寄存器CS的值保持不變,,所以指令中給出目標(biāo)指令的偏移量即可,。根據(jù)給出目標(biāo)指令偏移量的方式,JMP指令的尋址方式分為段內(nèi)直接尋址和段內(nèi)間接尋址,。

【a】,、段內(nèi)轉(zhuǎn)移直接尋址

指令的操作數(shù)部分直接給出目標(biāo)指令的偏移量。在這種情況之下,,一般使用標(biāo)號(hào)來作為JMP指令的操作數(shù),,指令格式如下。

段內(nèi)轉(zhuǎn)移直接尋址:

JMP NEAR PTR TARGET

執(zhí)行的操作IP<--(IP)+TARGET與JMP指令的下一條指令的16位位移量距離,。

【b】,、段內(nèi)轉(zhuǎn)移間接尋址

JMP指令轉(zhuǎn)移到目標(biāo)地址在某一個(gè)通用寄存器中或者某一個(gè)字存儲(chǔ)單元中。段內(nèi)轉(zhuǎn)移間接尋址的指令格式為:

JMP REG

JMP WORD PTR ADDR

在JMP REG中,,REG為通用寄存器,,執(zhí)行的操作為:

IP<---通用寄存器REG的內(nèi)存

在JMP WORD PTR ADDR中,,ADDR為各種尋址方式確定的存儲(chǔ)單元地址,并且在無歧義的情況下WORD PTR可以省略不寫,,執(zhí)行的操作為:

IP<---字存儲(chǔ)單元ADDR的內(nèi)存

2,、段間轉(zhuǎn)移

由于這種轉(zhuǎn)移是從一個(gè)邏輯段轉(zhuǎn)移到另一個(gè)邏輯段,所以執(zhí)行短劍轉(zhuǎn)移指令時(shí),,代碼段寄存器CS和指令指針I(yè)P的值都要修改,。同樣,根據(jù)目標(biāo)指令給出地址的方式,,可分為短劍轉(zhuǎn)移直接尋址和段間轉(zhuǎn)移間接尋址,。

【a】、段間轉(zhuǎn)移直接尋址

指令的操作數(shù)部分通過標(biāo)號(hào)直接給出目標(biāo)指令的段基值和偏移量,,指令格式如下:

JMP FAR PTR TARGET

執(zhí)行的操作為:

IP<---TARGET的偏移量

CS<---TARGET的段基值

【b】,、段間轉(zhuǎn)移間接尋址

JMP指令轉(zhuǎn)移的目標(biāo)地址在某一個(gè)雙字存儲(chǔ)單元中,段間轉(zhuǎn)移間接尋址的指令格式為:

JMP DWORD PTR ADDR

執(zhí)行操作為:

IP<---ADDR的第一個(gè)字存儲(chǔ)單元中的內(nèi)容

CS<---ADDR的第二個(gè)字存儲(chǔ)單元中的內(nèi)容

二,、條件轉(zhuǎn)移指令

條件轉(zhuǎn)移指令是根據(jù)CPU中標(biāo)志寄存器的個(gè)狀態(tài)位,,入符號(hào)位SF,零值位ZF,,進(jìn)位位CF,,奇偶位PF與溢出位OF等決定程序的執(zhí)行流程,條件轉(zhuǎn)移指令是以標(biāo)志寄存器各狀態(tài)為為條件,,如果條件成立,,則控制轉(zhuǎn)移到指令中國所給出的轉(zhuǎn)移目標(biāo)。條件不成立,,程序?qū)㈨樞驁?zhí)行,,關(guān)于標(biāo)志寄存器的內(nèi)容請(qǐng)看我的另一篇博文,(http://yiluohuanghun.blog.51cto.com/3407300/938213),。

條件轉(zhuǎn)移指令一般在算術(shù)運(yùn)算,、邏輯運(yùn)算或移位運(yùn)算等對(duì)標(biāo)志寄存器有影響的指令之后,根據(jù)這些指令操作后影響的狀態(tài)標(biāo)志決定是否發(fā)生轉(zhuǎn)移,。

關(guān)于條件轉(zhuǎn)移指令的細(xì)分,,我在網(wǎng)上看到一篇不錯(cuò)的文章,大家有興趣的可以參考下http://hi.baidu.com/jan008yy/blog/item/5b5b07d915a678ef38012f31.html,,我在這里就不再一一解釋,。

到此為止,我們已經(jīng)掌握了最基本的跳轉(zhuǎn)指令,。這部分知識(shí)對(duì)于我們?cè)诤罄m(xù)篇章中講到的匯編,,言分支程序設(shè)計(jì)是必要的。


本站內(nèi)容除特別聲明的原創(chuàng)文章之外,,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,,并不代表本網(wǎng)站贊同其觀點(diǎn),。轉(zhuǎn)載的所有的文章、圖片,、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有,。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容,、版權(quán)和其它問題,,請(qǐng)及時(shí)通過電子郵件或電話通知我們,,以便迅速采取適當(dāng)措施,,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118,;郵箱:[email protected],。