卖逼视频免费看片|狼人就干网中文字慕|成人av影院导航|人妻少妇精品无码专区二区妖婧|亚洲丝袜视频玖玖|一区二区免费中文|日本高清无码一区|国产91无码小说|国产黄片子视频91sese日韩|免费高清无码成人网站入口

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

MCS-51的控制轉(zhuǎn)移類指令,共17條,分為無條件轉(zhuǎn)移指令、條件轉(zhuǎn)移指令、子程序調(diào)用和返回指令、空操作指令等四類。無條件轉(zhuǎn)移指令(共4條)LJMP addr16 ; PC 〈—— addr16AJ

MCS-51的控制轉(zhuǎn)移類指令,共17條,分為無條件轉(zhuǎn)移指令、條件轉(zhuǎn)移指令、子程序調(diào)用和返回指令、空操作指令等四類。

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

LJMP addr16 ; PC 〈—— addr16

AJMP addr11 ; PC 〈—— PC 2 , PC10-0〈—— addr11

SJMP rel ; PC 〈—— PC 2 , PC 〈—— PC rel

JMP @A DPTR ; PC 〈—— A DPTR

第一條指令稱為長轉(zhuǎn)移指令(Long Jump );

第二條指令叫作絕對轉(zhuǎn)移指令(Absolute Jump );

第三條指令稱作短轉(zhuǎn)移指令(Short Jump );

第四條指令是變址尋址轉(zhuǎn)移指令(散轉(zhuǎn)指令)。

顯然,每條指令均以改變程序計(jì)數(shù)器PC (Program Counter )中的內(nèi)容為宗旨。

(1) 長轉(zhuǎn)移指令(64KB 范圍內(nèi)轉(zhuǎn)移指令)

長轉(zhuǎn)移指令的功能是:把指令碼中的目標(biāo)地址addr16裝入程序計(jì)數(shù)器PC ,使機(jī)器執(zhí)行下一條指令時(shí)無條件轉(zhuǎn)移到addr16處執(zhí)行程序,不影響任何標(biāo)志。由于addr16是一個(gè)16位二進(jìn)制地址(地址范圍為0000H —FFFFH ),因此長轉(zhuǎn)移指令一條可以在64KB 范圍內(nèi)轉(zhuǎn)移的指令。為了使程序設(shè)計(jì)方便易編,addr16常采用標(biāo)號地址(如:LOOP 、LOOP1、MAIN 、START 、DONE 、NEXT1……)表示,只有在上機(jī)執(zhí)行前才被匯編(或代真)為16位二進(jìn)制地址。長轉(zhuǎn)移指令為三字節(jié),雙周期指令。上機(jī)試試吧!很直觀的! For Example : LJMP F886H

注意:在下載的這個(gè)8051DEBUG 軟件中,不支持標(biāo)號,且程序狀態(tài)字PSW (P rogram State Word )中的D0位,即奇偶標(biāo)志位P ,與正確的正好相反,這一點(diǎn)是錯(cuò)誤的,用的時(shí)候留意一下。

只要記好:累加器ACC 中1的個(gè)數(shù)為奇數(shù),則P=1;否則P=0。

(2)絕對轉(zhuǎn)移指令(2KB 范圍內(nèi)的轉(zhuǎn)移指令)

絕對轉(zhuǎn)移指令是一條雙字節(jié)雙周期指令,11位地址addr11(a10—a0)在指令中的分布是: a10 a9 a8 0 0 0 1|a7 a6 a5 a4 a3 a2 a1 a0,其中,00001B 是操作碼。在程序設(shè)計(jì)中,11位地址也可以用符號表示,但在上機(jī)執(zhí)行前必須按照上述指令格式加以代真。

絕對轉(zhuǎn)移指令執(zhí)行時(shí)分為兩步:

第一步是取指令操作,程序計(jì)數(shù)器PC 中內(nèi)容被加1兩次;

第二步是把PC 加2后的高5為地址PC15—PC11和指令代碼中低11位構(gòu)成目

,

標(biāo)轉(zhuǎn)移地址:PC15—PC11 a10 a9 a8 a7 a6 a5 a4 a3 a2 a1 a0

其中,a10—a0的地址范圍是全“0”——全“1”。因此,絕對轉(zhuǎn)移指令可以在2KB 范圍內(nèi)向前或向后跳轉(zhuǎn)。

如果把單片機(jī)64KB 尋址區(qū)分成32頁(每頁2KB ),則PC15—PC11(00000B —11111B )稱為頁面地址(即:0頁—31頁),a10—a0稱為頁內(nèi)地址,但應(yīng)注意:AJMP 指令的目標(biāo)轉(zhuǎn)移地址不是和AJMP 指令地址在同一個(gè)2KB 區(qū)域,而是應(yīng)和AJMP 指令取出后的PC 地址(即:PC 2)在同一個(gè)2KB 區(qū)域。例如:若AJMP 指令地址為2FFEH ,則PC 2=3000H,故目標(biāo)轉(zhuǎn)移地址必在3000H —37FFH 這2KB 區(qū)域中。

例如:MGH2001:AJMP addr11,其中,MGH2001為AJMP addr11指令的標(biāo)號地址,由該指令在程序存儲(chǔ)器中的位置確定,addr11為11位地址,試分析該指令執(zhí)行后的情況以及指令碼的確定方法。

解:設(shè)MGH2001=3100H,addr11=10110100101B,則根據(jù)上述指令碼格式可得絕對轉(zhuǎn)移指令的格式碼為:1 0 1| 0 0 0 0 1|1 0 1 0 0 1 0 1|(a10 a9 a8|操作碼|a7—a0|)

即:A1A5H 。該指令執(zhí)行后:

PC15——PC11 a10 a9 a8 a7 a6 a5 a4 a3 a2 a1 a0

PC= 0 0 1 1 0 1 0 1 1 0 1 0 0 1 0 1 B =35A5H 即:程序轉(zhuǎn)移到35A5H 處執(zhí)行。

(3)短轉(zhuǎn)移指令(-126— 129范圍內(nèi)的轉(zhuǎn)移指令)

短轉(zhuǎn)移指令的功能是先使程序計(jì)數(shù)器PC 加1兩次(即:取出指令碼),然后把加2后的地址和rel 相加作為目標(biāo)轉(zhuǎn)移地址。因此,短轉(zhuǎn)移指令是一條相對轉(zhuǎn)移指令,是一條雙字節(jié)雙周期指令,指令碼格式為:80H rel (操作碼 地址偏移量),這里,80H 是SJMP 指令的操作碼;rel 是地址偏移量,在程序中也常采用符號地址,上機(jī)運(yùn)行前才被代真成二進(jìn)制形式。

遇到具體問題時(shí),頭腦中一定要清楚一個(gè)關(guān)系式:目標(biāo)轉(zhuǎn)移地址=源地址 2 rel

(4)變址尋址轉(zhuǎn)移指令(只能在256個(gè)存儲(chǔ)器單元內(nèi)轉(zhuǎn)移)

這是一條單字節(jié)雙周期無條件轉(zhuǎn)移指令。

在指令執(zhí)行之前,用戶應(yīng)預(yù)先把目標(biāo)轉(zhuǎn)移地址的基地址送入DPTR ,目標(biāo)轉(zhuǎn)移地址對基地址的偏移量放在累加器A 中。在指令執(zhí)行時(shí),MCS-51單片機(jī)把DPTR 中基地址和累加器A 中地址偏移量相加,以形成目標(biāo)轉(zhuǎn)移地址送入程序計(jì)數(shù)器PC 中。

通常,DPTR 中基地址是一個(gè)確定的值,常常是一張轉(zhuǎn)移指令表的起始地址,累加器A 中之值為表的偏移量地址,機(jī)器通過變址尋址轉(zhuǎn)移指令便可實(shí)現(xiàn)程序的分支轉(zhuǎn)移

標(biāo)簽: