Ⅰ 單片機AJMP指令和LJMP指令有何區別
區別如下:
1、定義不同。
AJMP是無條件跳轉指令之一,叫做絕對跳轉。而LJMP則是長轉移指令。如果一個程序代碼在2KB以內(是指編譯後的BIN代碼),可以用AJMP指令。如果一個程序代碼超過了2KB,就要用LJMP指令了。
2、范圍不同。
AJMP 跳轉的范圍是2KB之內的,就是AJMP指令和跳轉的目的地址在ROM中的同一個2KB范圍內。
LJMP 跳轉的范圍是64KB全部的ROM存儲區。
3、使用功能不同。
AJMP主要是用來改變程序執行的路線,到需要的指令或程序去執行。ljmp長轉移指令的功能是:把指令碼中的目標地址addr16裝入程序計數器PC,使機器執行下一條指令時無條件轉移到addr16處執行程序,不影響任何標志。
Ⅱ 單片機AJMP問題
M_TAB是下面四個跳轉指令的首地址,到底執行哪個跳轉指令由A中的內容確定,AJMP後面的數字都是表示地址
Ⅲ 單片機中的短跳轉指令AJMP其轉移目標指令地址怎麼算
AJMP
addr11
說明:把11位的addr11內容直接給PC(16位的指針)的PC0——PC10位。
這樣的話addr11=00100000000B=0100H,原來PC=1030
推出轉移地址為:1100
同樣的道理原來的PC=3030時,算出轉移地址為:3100
仔細看一下書本,看你的困惑不是不了解這個地址是11位的問題,應該是和其他的指令搞混淆了。
SJMP
rel
PC=(PC)+rel
LJMP
addr16
PC=addr16
AJMP
addr11
PC10-0=addr11
這下你明白了嗎,個人認為自己回答的還很透徹,記得給分喲
Ⅳ 單片機程序中程序結尾AJMP $是什麼意思
跳轉到本行,就是一個死循環,使程序停在這里。
$是一個(也是唯一一個)不需要定義的地址標號,代表當前行命令的地址。
不過SJMP $用得更多。
Ⅳ 單片機中的AJMP LJMP SJMP JMP有什麼區別
1、位元組不同
SJMP 如果跳轉到的標號地址距離當前PC所指的地址小於256位元組,用SJMP。
AJMP 如果跳轉到的標號地址距離當前PC所指的地址小於2K位元組,用AJMP。
LJMP 如果跳轉到的標號地址距離當前PC所指的地址小於64K位元組,用LJMP。
ACALL是調用的子程序入口地址距離當前PC所指地址需介於0~2K,LCALL是0~64K。
2、跳轉的范圍不一樣。
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個時鍾周期。
(5)ajmp單片機擴展閱讀:
①短程轉移(直接短轉移)
指令格式:JMP SHORT OPRD
語法格式: JMP 地址標號 ;(IP)←(IP)+8位位移量
指令功能:OPRD為轉移地址的標號,指令中的SHORT規定了OPRD為有符號的8位二進制數,OPRD為轉移地址的偏移量。該指令將程序執行的順序轉移到由(IP)+OPRD形成的新的程序執行的目標地址,從而實現程序的轉移。
轉移的目標地址OPRD在指令中可以直接使用標號地址,但要求轉移的目標地址的范圍只能在JMP指令所處地址的-128~+127位元組范圍之內,如超出該范圍,匯編時出錯。
② 近程轉移(段內直接轉移)
指令格式:JMP NEAR PTR OPRD
語法格式: JMP 地址標號 ;(IP)←(IP)+16位位移量
指令功能:與短程轉移的功能和要求相同,不同之處是近程轉移的OPRD為有符號的16位二進制數,指令將程序執行的順序轉移到由(IP)+OPRD形成的新的程序執行的目標地址。
轉移的目標地址的范圍只能在JMP指令所處地址的-32768~+32767位元組范圍之內,如超出該范圍,匯編時出錯。使用該指令時NEAR可省略
③段間直接轉移(遠程轉移)
指令格式:JMP FAR PTR OPRD
語法格式: JMP 地址標號 ;(IP)←新的偏移地址, ;(CS)←新的代碼段地址
指令功能:指令中用FAR PTR規定了該指令為段間的轉移,OPRD為目的地址的標號,目的地址與JMP指令所在地址不在同一段內。執行該指令時要修改CS和IP的內容,將OPRD所在段的段地址送CS中,OPRD的段內偏移地址送IP中。
④ 段內間接轉移
指令格式:JMP WORD PTR OPRD
語法格式:JMP reg16/mem ;(IP)←新的偏移地址
指令功能:與短程轉移的功能和要求相同,不同之處是段內間接轉移的OPRD 可以是除立即數外的任何寄存或存儲器定址方式,轉移的目標地址由OPRD的內容確定。
⑤ 段間間接轉移
指令格式:JMP DWORD PTR OPRD
語法格式:JMP mem32
指令功能:指令中用DWORD PTR規定了該指令為段間間接轉移,OPRD只能是存儲器定址方式。執行該指令時將定址到的內存單元的第一個字送入IP中,第二個字送入CS中。
Ⅵ 單片機程序中「AJMP $」若去掉會如何
AJMP $ ; 本身就是一條死循環指令,在實際應用中 一般不會用的,
; 只是調試程序時 可能會這樣用。
Ⅶ 單片機AJMP的問題
ROUT0123
什麼的是個標號,隨便放在哪都可以的.
這段程序的意思是程序跳轉到離TABLE標號偏移為A的地方繼續執行,
下邊的TABLE標號那裡是一連串的跳轉語句,每個語句兩位元組,所以編譯後AJMP
ROUT1、AJMP
ROUT2、AJMP
ROUT3是連續的六個位元組。
要用JMP
@A+DPTR跳轉到AJMP
ROUT2,A要先賦值為02H,
跳轉到AJMP
ROUT3,A就得是04H,以此類推。
Ⅷ 單片機:AJMP指令的跳轉范圍是2K,SJMP $ 偏移量是多少
SJMP的偏移量是8位補碼,-128~+127。
Ⅸ 單片機AJMP有什麼用
類似的無條件轉移指令共有三條:LJMP、AJMP和SJMP。
LJMP轉移的范圍最大,可達64K,但是其指令為三個位元組。
AJMP轉移的范圍稍小,只有2K,但是其指令為兩個位元組。
多年前,單片機的ROM的容量小,外接晶元價格也很貴,AJMP就較受青睞;
目前,ROM容量已經不算什麼問題,編程時,用了多少位元組,多數情況下都不用考慮。所以,AJMP指令的優點,就不被人看重了。
現在,AJMP幾乎就沒有什麼必要使用了,完全可以用LJMP代替。
Ⅹ 為什麼在用單片機匯編編程時,開頭都要寫上 ORG 0000H AJMP MAIN ORG 0030H這些呢請各位大俠多多指點!
原因:單片機中,0000H單元為系統啟動地址,ORG 0000H AJMP MAIN 就是在該地址存放一條絕對跳轉指令,轉入主程序的入口地址。ORG 0030H 是為了把用戶程序定位到用戶RAM區(30H-7FH),0000H-0030H存儲單元地址是有其他特殊功能的。
在匯編語言源程序的開始通常都用一條ORG偽指令來實現規定程序的起始地址。如果不用ORG規定則匯編得到的目標程序將從0000H開始。程序從ROM的0000開始存放程序,但是AJMP MAIN是一條無條件跳轉指令,也就是說,單片機上電之後首先從0000處開始執行程序。
但是,AJMP直接將程序跳轉到MAIN標號指向的存儲區域開始取指令,並執行,而一般MAIN標號是放在語句ORG 0030之後的,也即,主程序是從0030這個地址開始存放的。
(10)ajmp單片機擴展閱讀:
單片機數據存儲器的特殊區段:
1、工作寄存器區(00H-1FH)
在00H-1FH共32個單元,被均勻地分為四組工作寄存器堆:RB0、RB1、RB2、RB3,每組寄存器堆包含8個工作寄存器,均以R0-R7來命名,這些寄存器被稱為通用寄存器。工作寄存器用於臨時存放8位信息。在使用時,由程序狀態字寄存器中的RS0、RS1來選擇工作寄存器堆。
2、位定址區(20H-2FH)
片內數據存儲器的20H-2FH存儲區為位定址區,既可作為一般單元按位元組定址,也可按位進行定址。位定址區有16個位元組,位地址為00H-7FH。