組合語言中的JMP指令



贊助商連結


流浪者~MIT
2003-03-30, 07:40 AM
程式範例如下:
PORT1 ORG P1
PORT2 ORG P2
REG 0H
JMP MAIN
ORG 30H
MAIN:
MOV A,#55H
..........................
..........................

其中有一個指令JMP
如果改成
AJMP
SJMP
LJMP
有何差別嗎??

贊助商連結


stuart
2003-03-30, 09:59 AM
AJMP addr11:絕對跳躍

AJMP addr11   ; 動作: (PC) ← (PC)+2

 (PC10-0) ← page address ;機械週期:2

由於有效位址只有11位元,所以欲跳躍之目的位址,必須在相同的2K bytes範圍內。8085沒有此動作指令。

LJMP addr16:遠程跳躍

LJMP addr16   ; 動作: (PC) ← address15-0

由於有效位址為16位元,所以跳躍之目的位址可在64K byte程式記憶體的任何位址,本指令可簡寫為” JMP address ”。此指令與8085之 “ JMP address “相同,8051需要2個機械週期,8085需要3個機械週期。

SJMP rel:短程跳躍

SJMP   ; 動作: (PC) ← (PC)+2

(PC) ← (PC)+相對位址 ; 機械週期:2

8085沒有這樣的指令。

小弟不才∼只查到這樣的資料!當初學組語時連這些指令都沒學到咧..^^"
看起來差別只在跳躍的距離及機械週期吧∼
不知是否有高手解答∼^^

Javen
2003-03-30, 11:09 AM
還有一樣, OPCODE 的長短. 不知 MIT 兄是用哪一顆 CPU 來做 JMP?
通常 JMP 在組譯時會自動根據你的目地的自動選擇 SJMP, LJMP, 或 AJMP.
不過我通常是用 SJMP, 不得已, 才會用 AJMP, 再不得已, 最後用 LJMP.
我沒記錯的話, SJMP, AJMP = 2 Bytes, LJMP = 3 Bytes. (Intel MCS-51 Family)

k2
2003-03-30, 04:07 PM
0H->30H的位址距離應該還屬同一Page所以沒差別.
但是不同的CPU組語指令差異不小,還是要查DATASHEET為準.

流浪者~MIT
2003-03-30, 04:44 PM
最初由 文子 發表
還有一樣, OPCODE 的長短. 不知 MIT 兄是用哪一顆 CPU 來做 JMP?
通常 JMP 在組譯時會自動根據你的目地的自動選擇 SJMP, LJMP, 或 AJMP.
不過我通常是用 SJMP, 不得已, 才會用 AJMP, 再不得已, 最後用 LJMP.
我沒記錯的話, SJMP, AJMP = 2 Bytes, LJMP = 3 Bytes. (Intel MCS-51 Family)
我是用8051來作CPU的

C.C.
2003-03-30, 04:48 PM
應該是單晶片51 吧!
結果如同 stuart 所說的吧!
AJMP 跟 SJMP 都佔用兩個 Bytes (但 opcode 並不一樣)
LJMP 佔用 3 Bytes