❶ 51單片機 pc怎麼算
在51單片機裡面,pc永遠指向下一條指令的首地址,計算方法就是:當前執行的指令的首地址+本指令所佔的位元組長度。
❷ 程序存儲器2168H地址單元存放雙位元組指令SJMP,,,52H執行後PC的值是多少
執行之後PC=2168H+2H+52H=21C2H。
❸ 加拿大pc演算法教程
1.三級流水線:其實對於PC = PC +8這個問題很簡單,這兩個PC其實代表著不同的意義,第一個PC是對於CPU而言,而第二個PC而言是我們通過編譯器看到的PC(PC指向程序正在運行的那一條指令),但是對於CPU的PC是永遠指向取指那個步,故PC = PC +8。
2.五級流水線; ARM9流水線包括取指(fetch)、解碼(decode)、執行(excute)、緩沖/數據(buffer/data)、回寫(write-back)寄存器堆。ARM9流水線在解碼階段已經開始讀取操作數寄存器,因此解碼階段的PC值和取指階段的PC值關系為:PC(decode)=PC(fetch)+4。因此執行階段的PC值和解碼階段的PC值關系為:PC(excute)=PC(decode)+4。
3.對於軟中斷函數的返回時的PC:如下
ARM Thumb
SWI PC-8 PC-4
xxx 》 PC -4 PC-2 (異常返回將執行這條指令)
yyy PC PC
因此返回指令為: MOV PC , LR
原因:異常是由指令本身引起的,因此內核在計算LR時的PC值並沒有被更新。對於ARM狀態,因為SWI指令表示將跳到異常處理函數,此時SWI這條指令的PC = PC -8,當進入異常處理函數之前,硬體會自動把PC-4保存到LR寄存器中,所以異常處理函數結束後直接MOV PC, LR就行,就會跳到xxx這一條指令去執行。對於Thumb狀態同理。
4.對於IRQ和FIQ中斷函數返回時的PC:
ARM Thumb
xxx PC-12 PC-6 (程序在運行這條代碼時就產生了中斷信號)
yyy 》 PC-8 PC-4 (異常返回將執行這條指令)
zzz PC-4 PC-2
www PC PC
返回指令為: SUBS PC, LR, #4
原因:異常在當前指令執行完成後才會被響應,因此內核在計算LR時的PC值已被更新。對於ARM狀態,程序在執行xxx這條指令時,中斷信號產生,但是由於中斷必須在這一條指令執行完之後才會被響應,執行完後,則此時對於CPU的PC已經指向了www這條指令的取指,在中斷函數函數時應該執行yyy這條指令,雖然硬體會把PC-4的值賦值給LR寄存器,但是這是指向zzz這條指令的,所以返回時應該SUBS PC, LR, #4。對於Thumb狀態同理。
❹ 在匯編語言寫單片機的程序的時候,如何知道當前的PC指針是多少
當前PC指針的值,可以通過一定的方法來獲得,比如如果使用LCALL指令,那麼單片機執行過程是:保護現場,將當前PC壓入堆棧,當程序返回時,再彈出該保護的PC,由此,我們就可以獲得當前的PC,具體程序如下:
........
LCALL GETPC ;調用一個子程序以獲得當前PC值
...........
GETPC:
POP ACC ;取得PC高八位
POP B ;取得PC低八位
PUSH B ;恢復SP
PUSH ACC ;恢復SP
......
RET
❺ MCS51單片機AJMP指令執行後PC的值如何計算
AJMP 佔用2個位元組,所以如果你問的是 AJMP後面一行的指令PC的話,就是當前值+2.
❻ 分析一下程序,執行完以後pc的值為多少
所以第一次執行djnz r0,ll後r0=ffh=255,則程序要執行的次數為256次,r0最後的值為0。解:程序要循環的次數為256@a+pc指令需注意兩點:1)指令中的pc是執行完本條指令後的pc值,即pc等於本條指令地址加1。2)a是修正值,它等於查表
❼ 匯編語言中PC寄存器的計算
1)現在的CPU都是預取指令的,PC值不是當前指令的PC值,而是下一條(或者下幾條)指令的PC值;
2)#24,似乎應該是十進制的;
3)你單步運行,看看PC寄存器的值吧;
❽ 單片機pc值怎麼計算。
先找到當前指令下一條指令的PC值,再加上相對偏移量rel。
PC是一個16位的計數器。用於存放和指示下一條要執行的指令的地址。定址范圍達64KB。PC有自動加1功能,以實現程序的順序執行。PC沒有地址,是不可定址的,無法用指令對它進行讀寫。但在執行轉移、調用、返回等指令時能自動改變其內容,以改變程序的執行順序。
❾ 單片機裡面的pc值是什麼意思
pc總是指向下一條指令的首地址的。但是在返回的時候得看堆棧中的數了。上面程序執行完之後:
例如:
(A)=50H;
sp=50H(因為在程序中,sp減了兩次,後來又加了兩次,在程序最後ret有在返回的時候減了兩次,即地址出棧,故最終結果是50h。
(51h)=30h;
(52h)=50h;
因為ret指令返回時,出棧的結果是高地址=(52h)=50h;而低地址=(51h)=30h;故最終結果pc值是5030h;
(9)如何求程序執行後的pc值擴展閱讀
單片機在電子技術中的開發,主要包括CPU開發、程序開發、 存儲器開發、計算機開發及C語言程序開發,同時得到開發能夠保證單片機在十分復雜的計算機與控制環境中可以正常有序的進行,這就需要相關人員採取一定的措施,下文是筆者的一些簡單介紹:
(1)CPU開發。開發單片機中的CPU匯流排寬度,能夠有效完善單片機信息處理功能緩慢的問題,提高信息處理效率與速度,開發改進中央處理器的實際結構,能夠做到同時運行2-3個CPU,從而大大提高單片機的整體性能。
(2)程序開發。嵌入式系統的合理應用得到了大力推廣,對程序進行開發時要求能夠自動執行各種指令,這樣可以快速准確地採集外部數據,提高單片機的應用效率。
(3)存儲器開發。單片機的發展應著眼於內存,加強對基於傳統內存讀寫功能的新內存的探索,使其既能實現靜態讀寫又能實現動態讀寫,從而顯著提高存儲性能。
(4)計算機開發。進一步優化和開發單機片應激即分析,並應用計算機系統,通過連接通信數據,實現數據傳遞。
(5)C語言程序開發。優化開發C語言能夠保證單片機在十分復雜的計算機與控制環境中,可以正常有序的進行,促使其實現廣泛全面的應用。
❿ 51單片機的 pc值怎麼算
A=( 50h ),SP=( 50h ),(51H)=( 30h ),(52H)=(50h ),PC=( 5030h )
pc總是指向下一條指令的首地址的。但是在返回的時候得看堆棧中的數了。上面程序執行完之後:
(A)=50H;
sp=50H(因為在程序中,sp減了兩次,後來又加了兩次,在程序最後ret有在返回的時候減了兩次,即地址出棧,故最終結果是50h。
(51h)=30h;
(52h)=50h;
因為ret指令返回時,出棧的結果是高地址=(52h)=50h;而低地址=(51h)=30h;故最終結果pc值是5030h;
(10)如何求程序執行後的pc值擴展閱讀:
51單片機功能特性
1、可以模擬63K程序空間,接近64K 的16位地址空間;
2、可以模擬64Kxdata 空間,全部64K 的16位地址空間;
3、可以真實模擬全部32 條IO腳;
4、完全兼容keilC51 UV2 調試環境,可以通過UV2 環境進行單步,斷點, 全速等操作;
5、可以使用C51語言或者ASM匯編語言進行調試 ;
6、可以非常方便地進行所有變數觀察,包括滑鼠取值觀察,即滑鼠放在某 變數上就會立即顯示出它此的值;
7、可選 使用用戶晶振,支持0-40MHZ晶振頻率;
8、片上帶有768位元組的xdata,您可以在模擬時選 使用他們,進行xdata 的模擬;
9、可以模擬雙DPTR 指針;
10、可以模擬去除ALE 信號輸出. ;
11、自適應300-38400bps 的所有波特率通訊;
12、體積非常細小,非常方便插入到用戶板中.插入時緊貼用戶板,沒有連接電纜,這樣可以有效地減少運行中的干擾,避免模擬時出現莫名其妙的故障;
13、模擬插針採用優質鍍金插針,可以有效地防止日久生銹,選擇優質園腳IC插座,保護模擬插針,同時不會損壞目標板上的插座. ;
14、模擬時監控和用戶代碼分離,不可能產生不能模擬的軟故障;
15、RS-232介面不計成本採用MAX202集成電路,串列通訊穩定可靠,絕非一般三極體的簡易電路可比。