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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2574|回復(fù): 14
收起左側(cè)

型號:PIC18F25J11 反匯編代碼疑問

[復(fù)制鏈接]
ID:399501 發(fā)表于 2021-7-3 09:51 | 顯示全部樓層 |閱讀模式
0x44C0    ED93         CALL 0x44326, 0x1
0x44C2    F221         NOP

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

回復(fù)

使用道具 舉報

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

使用道具 舉報

ID:399501 發(fā)表于 2021-7-3 17:10 | 顯示全部樓層
hhdsdy 發(fā)表于 2021-7-3 11:03
雖然沒有學過用過PIC的單片機,但是感覺你的反匯編有點問題,你確定ED93的兩個字節(jié)反匯編就是CALL 0x44326, ...

好的,謝謝指導(dǎo)。我摸索一下
回復(fù)

使用道具 舉報

ID:88256 發(fā)表于 2021-7-3 19:11 | 顯示全部樓層
HISAUC 發(fā)表于 2021-7-3 17:10
好的,謝謝指導(dǎo)。我摸索一下

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

使用道具 舉報

ID:401564 發(fā)表于 2021-7-3 20:40 | 顯示全部樓層
反匯編一定得是匯編高手
CALL 0x44326, 0x1
CALL 是調(diào)用指令
0x44326是標號,不是內(nèi)存地址
0x1是S位,S位決定了調(diào)用模式是不是使用快速模式
PIC18匯編指令都是有三個操作數(shù)的

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

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

使用道具 舉報

ID:883242 發(fā)表于 2021-7-3 21:22 | 顯示全部樓層
Y_G_G 發(fā)表于 2021-7-3 20:40
反匯編一定得是匯編高手
CALL 0x44326, 0x1
CALL 是調(diào)用指令

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

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

評分

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

查看全部評分

回復(fù)

使用道具 舉報

ID:401564 發(fā)表于 2021-7-4 17:09 | 顯示全部樓層
Hephaestus 發(fā)表于 2021-7-3 21:22
8位的PIC單片機其指令體系設(shè)計之初考慮的是如何用最少的晶體管數(shù)量實現(xiàn)完整的功能,從來就沒考慮過用高級 ...

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

回復(fù)

使用道具 舉報

ID:399501 發(fā)表于 2021-7-5 08:56 | 顯示全部樓層
hhdsdy 發(fā)表于 2021-7-3 19:11
我沒找到PIC18F25J11的匯編指令對照表,如果你有就發(fā)出來看看,是不是反匯編出錯就比較明顯了。

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

這個網(wǎng)址就是規(guī)格書
回復(fù)

使用道具 舉報

ID:399501 發(fā)表于 2021-7-6 15:10 | 顯示全部樓層
Y_G_G 發(fā)表于 2021-7-3 20:40
反匯編一定得是匯編高手
CALL 0x44326, 0x1
CALL 是調(diào)用指令

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

使用道具 舉報

ID:401564 發(fā)表于 2021-7-6 15:24 | 顯示全部樓層
HISAUC 發(fā)表于 2021-7-6 15:10
那請教一下,MOVF FSR1L, W, ACCESS,這個語句傳遞的是FSRL1上的值,還是FSR1所指向地址的內(nèi)容呢?

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

使用道具 舉報

ID:399501 發(fā)表于 2021-7-7 14:35 | 顯示全部樓層
Y_G_G 發(fā)表于 2021-7-6 15:24
PIC指令跟8051不一樣的,很難理解的,你沒有寫過內(nèi)幾個程序是很難理解這指令什么意思的,如果真的想學,那就 ...

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等寄存器分別起了什么作用,我看了手冊還是沒明白
回復(fù)

使用道具 舉報

ID:401564 發(fā)表于 2021-7-7 16:13 | 顯示全部樓層
HISAUC 發(fā)表于 2021-7-7 14:35
0x1656            RCALL 0x165a
0x1658            BRA 0x166e
0x165A            PUSH        ;將下一個 ...

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

但是,程序計數(shù)器是不能直接操作的,不要問我為什么,PIC規(guī)定的!它只能間接操作,
操作的方法是通過操作PCLATH完成程序計數(shù)器的操作,等于是說:你操作了PCLATH就是操作了程序計數(shù)器
這程序計數(shù)器是有21位的,所以,是要三個地址的,數(shù)據(jù)手冊里79頁面有說明
TOSL也是是一樣的,它是堆棧操作用的,大概的原理是前面的程序計數(shù)器是一樣的,不同的是它是只讀的,它只能讀取堆棧最頂?shù)闹?br />
你沒有真正寫過PIC匯編,真的是很難理解的,用PIC匯編,特別是PIC18系列的匯編,只有以下幾個原因:
1,公司要求
2,原本就是匯編,你修改或者升級
3,抄,就是反匯編,破解什么的
回復(fù)

使用道具 舉報

ID:399501 發(fā)表于 2021-7-7 16:29 | 顯示全部樓層
Y_G_G 發(fā)表于 2021-7-7 16:13
程序計數(shù)器是用來存放下一條要執(zhí)行的指令的
這個是內(nèi)部自動執(zhí)行的,不需要代碼編寫的,但是,如果修改了程 ...

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

使用道具 舉報

ID:401564 發(fā)表于 2021-7-7 16:52 | 顯示全部樓層
HISAUC 發(fā)表于 2021-7-7 16:29
確實很晦澀難懂,之前都沒接觸過,一頭霧水。項目需要沒辦法。
0x165C           MOVWF PCLATH, ACCESS ...

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

使用道具 舉報

ID:399501 發(fā)表于 2021-7-7 16:59 | 顯示全部樓層
Y_G_G 發(fā)表于 2021-7-7 16:52
不知道!
你得自己去驗證,在0x205e放一條點亮一個IO的LED的指令,程序運行先關(guān)燈,執(zhí)行這條指令了,如果關(guān)燈 ...

好的,謝謝大佬指教。
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日韩精品免费在线 | 五月免费视频 | 国产一区二区在线免费视频 | 久久精品欧美一区二区三区不卡 | 久久精品国产亚洲一区二区 | 免费一二区 | 一区二区三区小视频 | 国产色婷婷久久99精品91 | 国产日韩欧美激情 | 久久国产精品久久久久久 | 国产高清免费 | 亚洲精品av在线 | 亚洲乱码国产乱码精品精的特点 | 91精品国产综合久久久亚洲 | 日韩欧美国产一区二区三区 | 日本免费视频在线观看 | 亚洲第一天堂 | 这里有精品 | 亚洲精品国产电影 | 午夜在线影院 | 色综合天天综合网国产成人网 | 看一级毛片 | 国产精品99视频 | 欧美精品中文字幕久久二区 | 高清色视频 | 亚洲一区二区三区免费在线观看 | 欧美日韩电影免费观看 | 久久久久99 | 国产精品成人一区二区三区 | 红色av社区 | 久草精品视频 | 91嫩草精品| a在线v| 免费一区二区三区 | 欧美一级网站 | 国产精品免费一区二区 | 超碰日本 | 草草在线观看 | www.日本在线观看 | 欧美日韩在线视频观看 | 中文字幕视频在线 |