久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

型號:PIC18F25J11 反匯編代碼疑問

[復制鏈接]
跳轉到指定樓層
樓主
0x44C0    ED93         CALL 0x44326, 0x1
0x44C2    F221         NOP

PIC18F25J11 程序存儲空間為0-0x7fffh,該指令調用了超出FLASH范圍的函數,是否是調用了庫函數?如果是如何知道是哪個庫函數?

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

使用道具 舉報

沙發
ID:88256 發表于 2021-7-3 11:03 | 只看該作者
雖然沒有學過用過PIC的單片機,但是感覺你的反匯編有點問題,你確定ED93的兩個字節反匯編就是CALL 0x44326, 0x1?這個偏移量太大了吧?放在51是絕對做不到偏移那么大的,而空操作又占用兩個字節,有點詭異。
庫函數是在軟件里應用的吧?是為了寫程序方便,單片機里面是不可能封裝庫函數的(只是猜測,畢竟沒接觸過PIC和庫函數),如果真有廠家愿意這么做,好像也可以?
回復

使用道具 舉報

板凳
ID:399501 發表于 2021-7-3 17:10 | 只看該作者
hhdsdy 發表于 2021-7-3 11:03
雖然沒有學過用過PIC的單片機,但是感覺你的反匯編有點問題,你確定ED93的兩個字節反匯編就是CALL 0x44326, ...

好的,謝謝指導。我摸索一下
回復

使用道具 舉報

地板
ID:88256 發表于 2021-7-3 19:11 | 只看該作者
HISAUC 發表于 2021-7-3 17:10
好的,謝謝指導。我摸索一下

我沒找到PIC18F25J11的匯編指令對照表,如果你有就發出來看看,是不是反匯編出錯就比較明顯了。
回復

使用道具 舉報

5#
ID:401564 發表于 2021-7-3 20:40 | 只看該作者
反匯編一定得是匯編高手
CALL 0x44326, 0x1
CALL 是調用指令
0x44326是標號,不是內存地址
0x1是S位,S位決定了調用模式是不是使用快速模式
PIC18匯編指令都是有三個操作數的

ADDCWFC   f,d,a  ;W與 f 帶進位相加
f代表W與F相加(指令后面有C的就表示帶進位相加)
d代表相加的帶有進位的結果保存在什么地方
a代表要不要BSR寄存器指定存儲為RAM

看完這個,如果你覺得PIC匯編簡單的話,可以學學反匯編,反正我是不想看PIC匯編
回復

使用道具 舉報

6#
ID:883242 發表于 2021-7-3 21:22 | 只看該作者
Y_G_G 發表于 2021-7-3 20:40
反匯編一定得是匯編高手
CALL 0x44326, 0x1
CALL 是調用指令

8位的PIC單片機其指令體系設計之初考慮的是如何用最少的晶體管數量實現完整的功能,從來就沒考慮過用高級語言。所以c語言編譯器出來的代碼特別的擰巴和效率低下,跟ARM的c語言編譯器出來的代碼流暢高速完全是相反的。所以能用匯編就別用c語言。

8位PIC單片機晶體管數量少的特征導致鼎盛時期臺約有50家山寨廠家仿制兼容型號。

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

7#
ID:401564 發表于 2021-7-4 17:09 | 只看該作者
Hephaestus 發表于 2021-7-3 21:22
8位的PIC單片機其指令體系設計之初考慮的是如何用最少的晶體管數量實現完整的功能,從來就沒考慮過用高級 ...

你說的是PIC16系列或者以前的產品了
樓主這是18系列的,時代不一樣我學PIC匯編也是因為公司指定用匯編,有些程序C編譯之后確實是沒有直接用匯編好,但那都是16系列之前的產品,18系列用匯編實在是太累人了
以前的PIC自己不出C編譯器的,現在PIC自己出了C的編譯器,而且18系列的單片機也是針對C語言進行了優化的,
所以,18系列能用C就不用匯編,18系列之前的產品,估計真正批量用于產品中的,公司也會要求用匯編的


回復

使用道具 舉報

8#
ID:399501 發表于 2021-7-5 08:56 | 只看該作者
hhdsdy 發表于 2021-7-3 19:11
我沒找到PIC18F25J11的匯編指令對照表,如果你有就發出來看看,是不是反匯編出錯就比較明顯了。

https://b2b.baidu.com/land?iid=3cd52e2e643111db2ea93323ecaaede8

這個網址就是規格書
回復

使用道具 舉報

9#
ID:399501 發表于 2021-7-6 15:10 | 只看該作者
Y_G_G 發表于 2021-7-3 20:40
反匯編一定得是匯編高手
CALL 0x44326, 0x1
CALL 是調用指令

那請教一下,MOVF FSR1L, W, ACCESS,這個語句傳遞的是FSRL1上的值,還是FSR1所指向地址的內容呢?
回復

使用道具 舉報

10#
ID:401564 發表于 2021-7-6 15:24 | 只看該作者
HISAUC 發表于 2021-7-6 15:10
那請教一下,MOVF FSR1L, W, ACCESS,這個語句傳遞的是FSRL1上的值,還是FSR1所指向地址的內容呢?

PIC指令跟8051不一樣的,很難理解的,你沒有寫過內幾個程序是很難理解這指令什么意思的,如果真的想學,那就先學一下PIC16F887A,學了這個,你就差不多理解PIC匯編了,直接學PIC18有點難
這是中文數據手冊,在目錄里面有指令的,你去看一下,表27-1詳細解釋了指令的大概意思
http://www.microchip.com.cn/newc ... brary/39932d_cn.pdf
回復

使用道具 舉報

11#
ID:399501 發表于 2021-7-7 14:35 | 只看該作者
Y_G_G 發表于 2021-7-6 15:24
PIC指令跟8051不一樣的,很難理解的,你沒有寫過內幾個程序是很難理解這指令什么意思的,如果真的想學,那就 ...

0x1656            RCALL 0x165a
0x1658            BRA 0x166e
0x165A            PUSH        ;將下一個指令的PC值存到堆疊的最上層。
0x165C           MOVWF PCLATH, ACCESS
0x165E           MOVLB 0x1                                  ;BSR = 1
0x1660           MOVF 0x86, W, BANKED
0x1662           MOVWF TOSL, ACCESS
0x1664           MOVF 0x87, W, BANKED
0x1666           MOVWF TOSH, ACCESS
0x1668           CLRF TOSU, ACCESS
0x166A           MOVF PCLATH, W, ACCESS
0x166C           RETLW 0x1
文檔我有下載了,能否再向您請教一下,這段代碼中PCLATH和TOSL等寄存器分別起了什么作用,我看了手冊還是沒明白
回復

使用道具 舉報

12#
ID:401564 發表于 2021-7-7 16:13 | 只看該作者
HISAUC 發表于 2021-7-7 14:35
0x1656            RCALL 0x165a
0x1658            BRA 0x166e
0x165A            PUSH        ;將下一個 ...

程序計數器是用來存放下一條要執行的指令的
這個是內部自動執行的,不需要代碼編寫的,但是,如果修改了程序計數器的值,就會改變下一條要執行的指令了,等于去改變下一條指令
等于說:你原本讀寫的程序是要向左,如果不改變程序計數器的值,這下一條指令就是要向左了
            但是,可能是中斷,也可能是按鍵,現在改變了程序計數器的值,下一條指令變成了向右了

但是,程序計數器是不能直接操作的,不要問我為什么,PIC規定的!它只能間接操作,
操作的方法是通過操作PCLATH完成程序計數器的操作,等于是說:你操作了PCLATH就是操作了程序計數器
這程序計數器是有21位的,所以,是要三個地址的,數據手冊里79頁面有說明
TOSL也是是一樣的,它是堆棧操作用的,大概的原理是前面的程序計數器是一樣的,不同的是它是只讀的,它只能讀取堆棧最頂的值

你沒有真正寫過PIC匯編,真的是很難理解的,用PIC匯編,特別是PIC18系列的匯編,只有以下幾個原因:
1,公司要求
2,原本就是匯編,你修改或者升級
3,抄,就是反匯編,破解什么的
回復

使用道具 舉報

13#
ID:399501 發表于 2021-7-7 16:29 | 只看該作者
Y_G_G 發表于 2021-7-7 16:13
程序計數器是用來存放下一條要執行的指令的
這個是內部自動執行的,不需要代碼編寫的,但是,如果修改了程 ...

確實很晦澀難懂,之前都沒接觸過,一頭霧水。項目需要沒辦法。
0x165C           MOVWF PCLATH, ACCESS,只操作了三個寄存器中的一個,假設W 的值是0x20,那接下來執行的指令應該就是0x205e了吧
回復

使用道具 舉報

14#
ID:401564 發表于 2021-7-7 16:52 | 只看該作者
HISAUC 發表于 2021-7-7 16:29
確實很晦澀難懂,之前都沒接觸過,一頭霧水。項目需要沒辦法。
0x165C           MOVWF PCLATH, ACCESS ...

不知道!
你得自己去驗證,在0x205e放一條點亮一個IO的LED的指令,程序運行先關燈,執行這條指令了,如果關燈了,就說明是這么一回事了
一般來說,自己寫的程序是不會去修改程序計數器的,這個真的太難理解了,直接用GOTO的
你這種估計是C程序反匯編來的,人工寫的匯編都很難理解的,編譯出來的就更加了
你不要指望著速成,那是不可能的,指令集和詳解你不看它上百次是不會完全理解的,更加不可能像C一樣大概看過去的,PIC匯編沒有重點這一說法,所有的東西都是重點,有可能漏掉一個點,你就蒙半天..........
如果你工作上已經用到了匯編,那我還是推薦你學匯編的,雖然說現在C是主流,但就單片機這一塊而言,會匯編的C語言編程工資是要比不會匯編的工資高的
回復

使用道具 舉報

15#
ID:399501 發表于 2021-7-7 16:59 | 只看該作者
Y_G_G 發表于 2021-7-7 16:52
不知道!
你得自己去驗證,在0x205e放一條點亮一個IO的LED的指令,程序運行先關燈,執行這條指令了,如果關燈 ...

好的,謝謝大佬指教。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久999 | 国产精品国产三级国产a | 国产一区二区三区 | 成人自拍视频网站 | 久久这里有精品 | 人妖一区 | 精品av天堂毛片久久久借种 | xxx视频| 欧美精品久久久 | 国产在线一区二 | 日韩一级精品视频在线观看 | 午夜精品久久久久久久星辰影院 | 欧美综合久久 | 色婷婷久久久亚洲一区二区三区 | 一区二区三区影院 | 一区二区日韩精品 | 五月激情婷婷网 | 日日夜夜狠狠操 | 国产电影一区二区 | 国产一区二区三区四区三区四 | 精品国产乱码久久久 | 久久久久久久久精 | 欧美一区视频 | 欧美精品一区在线 | 国产国产精品久久久久 | 欧美综合久久 | 国产99小视频| 国产精品69毛片高清亚洲 | www一级片 | 91精品久久久久久久久久入口 | 亚洲精品日本 | 欧美一级片在线播放 | av大片在线观看 | 国产日韩欧美精品一区二区三区 | 亚洲一区二区三区视频 | 国产欧美日韩在线播放 | 成人精品国产免费网站 | 日本福利视频 | 99在线观看 | 日韩免费在线 | 亚洲精品一区二区三区丝袜 |