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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

問一個C語言匯編 之間互相調用的問題

[復制鏈接]
跳轉到指定樓層
樓主
ID:624769 發表于 2021-11-12 22:44 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
在 C 語言中,如果聲明一個變量,
unsigned char ABC;
在匯編中 可以用
extrn DATA(ABC)
來調用,

那么,C 語言中一個define  如:
#define MainForse  24000000L
在匯編中應該怎么調用?

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

使用道具 舉報

沙發
ID:883242 發表于 2021-11-13 00:02 | 只看該作者
沒可能實現。#define是在預處理階段把MainForse直接簡單替換成24000000L,MainForse這個名字都不可能出現在obj文件里面,更別說讓linker找到跟asm編譯出來的obj連接在一起了。
回復

使用道具 舉報

板凳
ID:401564 發表于 2021-11-13 00:25 | 只看該作者
#define MainForse  24000000L
這個只是文本上替換而已,不會被編譯的
而且,#define 是可以在匯編環境下使用的,但是匯編幾乎每個指令都是地址有有關,#define還不如EQU實用,所以,一般的匯編是不用#define的
當然,我見過一些由C轉匯編的人喜歡用#define
回復

使用道具 舉報

地板
ID:624769 發表于 2021-11-13 01:30 | 只看該作者
Y_G_G 發表于 2021-11-13 00:25
#define MainForse  24000000L
這個只是文本上替換而已,不會被編譯的
而且,#define 是可以在匯編環境下使 ...

那么假定 我在  匯編里  
MainForse    EQU    24000D

在 C 里面有辦法調用么?
現在主要問題是,在混合編寫的時候,有些設定,兩頭都設定,在修改時,容易出現錯漏,所以希望能有可以兩邊都引用的方法。
回復

使用道具 舉報

5#
ID:624769 發表于 2021-11-13 01:33 | 只看該作者
Hephaestus 發表于 2021-11-13 00:02
沒可能實現。#define是在預處理階段把MainForse直接簡單替換成24000000L,MainForse這個名字都不可能出現在 ...

假定, 我有 24000000 這個值,匯編也要用到,C 也要用到,除了兩個文件分別 用 define 和 EQU 之外,有什么別的變通的辦法,可以實現只在一個地方 設定?
回復

使用道具 舉報

6#
ID:401564 發表于 2021-11-13 12:13 | 只看該作者
188610329 發表于 2021-11-13 01:30
那么假定 我在  匯編里  
MainForse    EQU    24000D

沒有試過混編,不知道
但這沒什么意義,至少在當前的8051單片機上,C和匯編混編沒什么實際的好處,99.99%的情況下,C是可以實現匯編的功能的
除了要精確一兩個時鐘的的時序程序,匯編沒什么優勢可言,沒有必要深入這方面的東西,要么就是匯編,要么就是C
回復

使用道具 舉報

7#
ID:624769 發表于 2021-11-13 12:23 | 只看該作者
Y_G_G 發表于 2021-11-13 12:13
沒有試過混編,不知道
但這沒什么意義,至少在當前的8051單片機上,C和匯編混編沒什么實際的好處,99.99%的 ...

好的,謝謝。

好處是: 代碼可以變小很多。
但是,可能年紀大了,全都用匯編的話……,腦殼疼……,只好退而求其次,混編。
回復

使用道具 舉報

8#
ID:401564 發表于 2021-11-13 13:24 | 只看該作者
188610329 發表于 2021-11-13 12:23
好的,謝謝。

好處是: 代碼可以變小很多。

代碼占用空間變小,我還真沒有覺得
如果說是在只有幾百B的低端國產單片機上,匯編是絕對需要的
程序空間超過1K的,用C來寫,盡量的調用函數,匯編在代碼大小上是沒有優勢的
只要你去熟練C的編程原則,總比啃匯編好
不會匯編的人多了去了,也就新手還在發帖問"內存不夠怎么辦",有經驗的單片機從業者,用C一樣的能寫出簡潔的程序出來
我之前就是用匯編的,用了幾年,煩了,累了
回復

使用道具 舉報

9#
ID:883242 發表于 2021-11-13 17:20 | 只看該作者
換STM8吧,51那120byte的直接尋址能力看了就想吐。
回復

使用道具 舉報

10#
ID:624769 發表于 2021-11-13 20:30 | 只看該作者
Y_G_G 發表于 2021-11-13 13:24
代碼占用空間變小,我還真沒有覺得
如果說是在只有幾百B的低端國產單片機上,匯編是絕對需要的
程序空間 ...

嗯……, 或許是我C語言的編寫能力太濫了吧……,畢竟我是業余的……
我是先學的C,后來,玩STC8的時候,碰到31之后的中斷號,才被迫的碰了點匯編的皮毛,那時候還是比較抵觸匯編的,再后來碰到幾個對時序要求非常嚴的問題,怎么也搞不定,才去學的匯編,不知道為什么,一開始認真接觸匯編,忽然感覺一種奇特的親切感,利用匯編解決了那幾個時序問題之后,就開始仔細研究匯編。
越學越覺得這東西合我意啊,有一種直接操縱單片機的爽感,可以在整個FLASH里面隨意的跳,隨意的讀,不用去考慮有沒有聲明這個,有沒有聲明那個,也不會有在C里面那種,不能從這個函數直接跳去那個函數而不返回的郁悶。手握絕對操控權的感覺。 當然,如果玩脫了,RET次數沒有計算控制好,PUSH,POP沒有配對,后期糾錯也相當的痛苦事。
之后,歷時2年左右,通過用匯編重寫以前大量的程序,總算對匯編有了一定的掌握。在這個過程,大部分在用C寫的時候10K左右的程序(當時不得不用STC15W408, IAP15W413以及后來STC8F2K16),匯編改寫后,很多順利的塞進了STCW204里面。當然,里面可能有一開始思考的不成熟,匯編改寫后,順便優化了算法的功勞,但是在壓縮程序體積上,匯編還是有絕對的優勢的。C語言無論你設計多精簡,最終還是不可能帶著A,R0~R7  從這個函數跳到那個函數,也不可能在一個函數里通過反復切換RS0,RS1,讓函數同時操縱32個通用寄存器,但是,這些都是減小代碼量的有效手段。
說那么多,我不是說匯編有多好,只是想表達,我有多喜歡匯編,奈何這方面的資料太少…… 很多目的無法實現,可惜……
回復

使用道具 舉報

11#
ID:967119 發表于 2021-11-13 21:36 | 只看該作者
真的理解。可能就是那種一切盡在掌握中,程序都跑不飛的那種上帝視角的感覺。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 五月婷婷色 | 日韩有码一区 | 国产免费一区二区三区 | 亚洲视频www | 国产精品亚洲一区二区三区在线观看 | 亚洲区一| 国产不卡一区 | 日韩中文一区 | 国产精选一区 | 一区二区三区四区在线 | 伊人天堂网| 最新中文字幕在线播放 | 天堂一区二区三区 | 久久久久久久国产精品影院 | 麻豆久久久9性大片 | 国产日韩欧美一区二区 | 国产精品亚洲一区二区三区在线观看 | 日韩国产精品一区二区三区 | 精品av久久久久电影 | 久久久久久久国产 | 一区二区三区视频在线观看 | 成人午夜影院 | www.日韩av.com| 97精品久久 | 91九色在线观看 | 亚洲欧美在线观看 | 国产精品一区二区三区在线播放 | 天天做日日做 | 久久久久久久久久久久久9999 | 一本一道久久a久久精品蜜桃 | 午夜激情国产 | 国产精品久久久久久婷婷天堂 | 国产成人综合久久 | 6996成人影院网在线播放 | av一区二区三区四区 | 91色在线视频 | 午夜电影福利 | 波多野结衣一二三区 | 99久久婷婷国产综合精品首页 | 欧美一区二区三区视频 | 在线免费观看成年人视频 |