欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 34651|回復: 0
打印 上一主題 下一主題
收起左側

正確區分LJMP、AJMP、SJMP、JMP單片機跳轉指令

[復制鏈接]
跳轉到指定樓層
樓主
ID:325686 發表于 2018-5-9 10:09 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
MCS-51的控制轉移類指令,共17條,分為無條件轉移指令、條件轉移指令、子程序調用和返回指令、空操作指令等四類。

無條件轉移指令(共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  

第一條指令稱為長轉移指令(Long Jump);
第二條指令叫作絕對轉移指令(Absolute Jump);
第三條指令稱作短轉移指令(Short Jump);
第四條指令是變址尋址轉移指令(散轉指令)。

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

(1)長轉移指令(64KB范圍內轉移指令)
長轉移指令的功能是:把指令碼中的目標地址addr16裝入程序計數器PC,使機器執行下一條指令時無條件轉移到addr16處執行程序,不影響任何標志。由于addr16是一個16位二進制地址(地址范圍為0000H—FFFFH),因此長轉移指令一條可以在64KB范圍內轉移的指令。為了使程序設計方便易編,addr16常采用標號地址(如:LOOP、LOOP1、MAIN、START、DONE、NEXT1……)表示,只有在上機執行前才被匯編(或代真)為16位二進制地址。
長轉移指令為三字節,雙周期指令。
上機試試吧!很直觀的!  For Example: LJMP F886H
注意:
在下載的這個8051DEBUG軟件中,不支持標號,且程序狀態字PSW(Program State Word)中的D0位,即奇偶標志位P,與正確的正好相反,這一點是錯誤的,用的時候留意一下。

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

(2)絕對轉移指令(2KB范圍內的轉移指令)
絕對轉移指令是一條雙字節雙周期指令,11位地址addr11(a10—a0)在指令中的分布是:
a10 a9 a8 0 0 0 1|a7 a6 a5 a4 a3 a2 a1 a0,其中,00001B是操作碼。在程序設計中,11位地址也可以用符號表示,但在上機執行前必須按照上述指令格式加以代真。
絕對轉移指令執行時分為兩步:
第一步是取指令操作,程序計數器PC中內容被加1兩次;
第二步是把PC加2后的高5為地址PC15—PC11和指令代碼中低11位構成目標轉移地址:PC15—PC11   a10  a9   a8   a7   a6   a5   a4   a3   a2   a1   a0

其中,a10—a0的地址范圍是全“0”——全“1”。因此,絕對轉移指令可以在2KB范圍內向前或向后跳轉。
如果把單片機64KB尋址區分成32頁(每頁2KB),則PC15—PC11(00000B—11111B)稱為頁面地址(即:0頁—31頁),a10—a0稱為頁內地址,但應注意:AJMP指令的目標轉移地址不是和AJMP指令地址在同一個2KB區域,而是應和AJMP指令取出后的PC地址(即:PC+2)在同一個2KB區域。例如:若AJMP指令地址為2FFEH,則PC+2=3000H,故目標轉移地址必在3000H—37FFH這2KB區域中。
例如:MGH2001:AJMP addr11,
其中,MGH2001為AJMP addr11指令的標號地址,由該指令在程序存儲器中的位置確定,addr11為11位地址,試分析該指令執行后的情況以及指令碼的確定方法。
解:設MGH2001=3100H,addr11=10110100101B,則根據上述指令碼格式可得絕對轉移指令的格式碼為:1 0 1| 0 0 0 0 1|1 0 1 0 0 1 0 1|(a10 a9 a8|操作碼|a7—a0|)
即:A1A5H。該指令執行后:
           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
  即:程序轉移到35A5H處執行。

(3)短轉移指令(-126—+129范圍內的轉移指令)
短轉移指令的功能是先使程序計數器PC加1兩次(即:取出指令碼),然后把加2后的地址和rel相加作為目標轉移地址。因此,短轉移指令是一條相對轉移指令,是一條雙字節雙周期指令,指令碼格式為:80H rel(操作碼  地址偏移量),這里,80H是SJMP指令的操作碼;rel是地址偏移量,在程序中也常采用符號地址,上機運行前才被代真成二進制形式。
遇到具體問題時,頭腦中一定要清楚一個關系式:目標轉移地址=源地址+2+rel

(4)變址尋址轉移指令(只能在256個存儲器單元內轉移)
這是一條單字節雙周期無條件轉移指令。
在指令執行之前,用戶應預先把目標轉移地址的基地址送入DPTR,目標轉移地址對基地址的偏移量放在累加器A中。在指令執行時,MCS-51單片機把DPTR中基地址和累加器A中地址偏移量相加,以形成目標轉移地址送入程序計數器PC中。
通常,DPTR中基地址是一個確定的值,常常是一張轉移指令表的起始地址,累加器A中之值為表的偏移量地址,機器通過變址尋址轉移指令便可實現程序的分支轉移跳轉的范圍不一樣,可以說是到達的遠近距離不一樣。存儲空間占用不一樣。
AJMP 的范圍是11位地址,也就是2K的空間內,占用存儲空間2個字節,執行周期24個時鐘周期。
LJMP 的范圍是16位地址,也就是64K的空間內,占用存儲空間3個字節,執行周期24個時鐘周期。
SJMP 的范圍是8位地址,也就是256BIT的空間內,占用存儲空間2個字節,執行周期24個時鐘周期。
JMP一般配合DPTR使用,存儲空間1個字節,執行周期24個時鐘周期。一般用于多分枝選擇的時候使用,比如按鍵處理。
ACALL,LCALL和以上說明類似,是調用指令,ACALL占用存儲空間2個字節,執行周期24個時鐘周期。LCALL占用存儲空間3個字節,執行周期24個時鐘周期。


完整的Word格式文檔51黑下載地址:
正確區分LJMP,AJMP,SJMP,JMP.docx (17.81 KB, 下載次數: 20)


評分

參與人數 2黑幣 +61 收起 理由
laopihappy123 + 11 很給力!
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂1 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表