欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1824|回復: 10
收起左側

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

[復制鏈接]
ID:624769 發表于 2021-11-12 22:44 | 顯示全部樓層 |閱讀模式
在 C 語言中,如果聲明一個變量,
unsigned char ABC;
在匯編中 可以用
extrn DATA(ABC)
來調用,

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

回復

使用道具 舉報

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

使用道具 舉報

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

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

使用道具 舉報

ID:401564 發表于 2021-11-13 12:13 | 顯示全部樓層
188610329 發表于 2021-11-13 01:30
那么假定 我在  匯編里  
MainForse    EQU    24000D

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

使用道具 舉報

ID:624769 發表于 2021-11-13 12:23 | 顯示全部樓層
Y_G_G 發表于 2021-11-13 12:13
沒有試過混編,不知道
但這沒什么意義,至少在當前的8051單片機上,C和匯編混編沒什么實際的好處,99.99%的 ...

好的,謝謝。

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

使用道具 舉報

ID:401564 發表于 2021-11-13 13:24 | 顯示全部樓層
188610329 發表于 2021-11-13 12:23
好的,謝謝。

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

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

使用道具 舉報

ID:883242 發表于 2021-11-13 17:20 | 顯示全部樓層
換STM8吧,51那120byte的直接尋址能力看了就想吐。
回復

使用道具 舉報

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個通用寄存器,但是,這些都是減小代碼量的有效手段。
說那么多,我不是說匯編有多好,只是想表達,我有多喜歡匯編,奈何這方面的資料太少…… 很多目的無法實現,可惜……
回復

使用道具 舉報

ID:967119 發表于 2021-11-13 21:36 | 顯示全部樓層
真的理解。可能就是那種一切盡在掌握中,程序都跑不飛的那種上帝視角的感覺。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表