
文章插圖
正常情況下,程序的執(zhí)行順序是自上而下,逐條掃描執(zhí)行的 。STL指令集中有一類跳轉(zhuǎn)指令,可以中斷程序的這種線性執(zhí)行流,跳轉(zhuǎn)到指定的位置繼續(xù)執(zhí)行 。一、 跳轉(zhuǎn)標(biāo)簽跳轉(zhuǎn)的”目標(biāo)”地址由”標(biāo)簽”來指定,該標(biāo)簽稱之為”跳轉(zhuǎn)標(biāo)簽” 。跳轉(zhuǎn)標(biāo)簽最多4個(gè)字符,且第一個(gè)字符必須為字母 。跳轉(zhuǎn)標(biāo)簽后必須帶有冒號(hào)”:”,且在行中必須位于程序語(yǔ)句之前 。
二、 跳轉(zhuǎn)指令跳轉(zhuǎn)指令根據(jù)”跳轉(zhuǎn)”的機(jī)理,首先可分為”無(wú)條件跳轉(zhuǎn)”和”條件跳轉(zhuǎn)”,除此之外,還有一個(gè)特殊的跳轉(zhuǎn)指令,可實(shí)現(xiàn)分支跳轉(zhuǎn) 。
1、 無(wú)條件跳轉(zhuǎn)指令JU程序在執(zhí)行時(shí),遇到JU指令,無(wú)條件的跳轉(zhuǎn)到其”標(biāo)簽”所指示的代碼行繼續(xù)執(zhí)行 。跳轉(zhuǎn)指令和跳轉(zhuǎn)目標(biāo)必須在同一個(gè)塊內(nèi) 。
需要注意的是:理論上,JU指令允許向前跳,也允許向后跳 。向后跳屬于常規(guī)用法,一般沒什么問題 。但向前跳,容易形成死循環(huán),因此,一般不建議使用JU命令向前跳 。
2、 有條件跳轉(zhuǎn)指令顧名思義,與無(wú)條件跳轉(zhuǎn)不同,有條件跳轉(zhuǎn)指令中斷原程序邏輯流,發(fā)生跳轉(zhuǎn)是需要條件的,根據(jù)跳轉(zhuǎn)條件的不同,它們又有不同的分類 。
(1) 由RLO的狀態(tài)決定是否跳轉(zhuǎn)
對(duì)于”JC”指令,當(dāng)邏輯運(yùn)算結(jié)果(RLO)為”1″時(shí),”跳轉(zhuǎn)”生效,中斷當(dāng)前的線性掃描,跳轉(zhuǎn)到”跳轉(zhuǎn)標(biāo)簽”所標(biāo)識(shí)的行繼續(xù)執(zhí)行 。同樣,可以選擇向前跳,也可以向后跳 。
“JCN”指令與”JC”指令相反,當(dāng)”RLO”為”1″的時(shí)候,”跳轉(zhuǎn)”生效 。
另外:當(dāng)條件不滿足,不執(zhí)行跳轉(zhuǎn)的時(shí)候,該指令會(huì)將RLO置”1″,然后繼續(xù)執(zhí)行下面的指令 。
(2) 帶BR位,由RLO狀態(tài)決定是否跳轉(zhuǎn)
對(duì)于”JCB”指令,其與”JC”指令一樣,當(dāng)RLO為1時(shí),”跳轉(zhuǎn)”生效,中斷當(dāng)前的線性掃描,跳轉(zhuǎn)到”跳轉(zhuǎn)標(biāo)簽”所標(biāo)識(shí)的指令行繼續(xù)執(zhí)行 。而與”JC”指令不同的是,”JCB”指令會(huì)”額外”的做一項(xiàng)工作:將RLO的狀態(tài)復(fù)制到BR(二進(jìn)制結(jié)果位)中 。
同樣,”JNB”指令,其觸發(fā)跳轉(zhuǎn)的條件為RLO=0,且也會(huì)將RLO狀態(tài)復(fù)制到BR中 。
(3) 由”狀態(tài)寄存器”的”BR”位決定跳轉(zhuǎn)與否
(4) 由”狀態(tài)寄存器”的”OV”、”OS”位決定跳轉(zhuǎn)與否
狀態(tài)字的第4位和第5位分別為”溢出位OV”和”溢出狀態(tài)保持位OS” 。當(dāng)算術(shù)運(yùn)算或浮點(diǎn)數(shù)比較指令執(zhí)行時(shí)出現(xiàn)錯(cuò)誤(如溢出、非法操作和不規(guī)范的格式等)時(shí),OV位會(huì)被置1,同時(shí)OS位也被置1 。而如果后面同類指令執(zhí)行結(jié)果正確,則OV位會(huì)被清0,但OS位仍然保持為1 。只有JOS指令、塊調(diào)用指令和塊結(jié)束指令才能復(fù)位OS位 。
一般用于檢查算術(shù)運(yùn)算指令結(jié)果是否有溢出,若有溢出,可用JO、JOS指令進(jìn)行跳轉(zhuǎn),以做相應(yīng)的錯(cuò)誤處理 。
(5) 由條件碼1(CC1)和條件碼0(CC0)決定是否跳轉(zhuǎn)
狀態(tài)字的第7位(CC1)和第6位(CC0)分別為條件碼1和條件碼0 。這兩位綜合起來用于表示在累加器1(ACCU1)中產(chǎn)生的算術(shù)運(yùn)算或邏輯運(yùn)算的結(jié)果與”0″的大小關(guān)系、比較指令的執(zhí)行結(jié)果或移位指令的移出位的結(jié)果 。
CC1和CC0的狀態(tài)與”算術(shù)運(yùn)算”的結(jié)果的關(guān)系如下:
在”跳轉(zhuǎn)指令”中,有一類指令根據(jù)算術(shù)運(yùn)算的結(jié)果來決定邏輯流是否跳轉(zhuǎn),本質(zhì)上,是在執(zhí)行完算術(shù)運(yùn)算后,根據(jù)CC1和CC0的不同狀態(tài),來決定相應(yīng)的跳轉(zhuǎn)指令是否具備跳轉(zhuǎn)條件,如下表所示:
以上關(guān)于本文的內(nèi)容,僅作參考!溫馨提示:如遇健康、疾病相關(guān)的問題,請(qǐng)您及時(shí)就醫(yī)或請(qǐng)專業(yè)人士給予相關(guān)指導(dǎo)!
「愛刨根生活網(wǎng)」www.malaban59.cn小編還為您精選了以下內(nèi)容,希望對(duì)您有所幫助:- 螞蟻莊園2月16日答案:冬奧會(huì)中被戲稱為躺贏的運(yùn)動(dòng)項(xiàng)目是哪一個(gè)
- 5 2輕斷食一個(gè)月能瘦多少斤 什么是輕斷食
- 男人最不想讓妻子知道的秘密
- 妻子說什么話最讓男人覺得討厭?
- 什么時(shí)候的女人讓男人覺得麻煩?
- 健身減肥會(huì)讓胸部越練越小么?
- 關(guān)鍵礦產(chǎn)供應(yīng)鏈的地緣政治 中美競(jìng)爭(zhēng)的下一個(gè)戰(zhàn)略焦點(diǎn)
- 第1個(gè)國(guó)際禁毒會(huì)議是
- 烏克蘭加入北約后果 為什么不讓烏克蘭加入北約
- 癌癥患者死前一個(gè)月會(huì)經(jīng)歷什么 老人快不行的征兆
