2014-09-29 22 views
2

我剛開始在Assembly中完全編碼的大型項目。有多個子程序,宏,內存表等。我想知道如何最好地將代碼分成多個文件。目標顯然是更好的結構和更好的可讀性。大型彙編代碼的結構(包括.asm/.inc文件的差異)

目前我使用.inc文件包含我所有的常量定義(.equ),但如何處理我的許多子例程?如果我想將它們放在另一個文件中,是否需要使用.asm文件(因爲它包含可執行代碼)?更一般的:.asm-和.inc-文件有什麼區別,尤其是關於如何將它們包含在一個主文件中?

一旦我分割了文件,我該如何處理多個依賴關係(即文件A包括文件B和C,其中文件B也包含文件C)。由於顯然我目前的環境,Atmel工作室6,不喜歡雙夾雜。

+1

我對atmega並不是很熟悉。但是在其他彙編語言中,您可以定義由鏈接器解析的全局符號(有時與「extern」結合使用)。至於「雙重包含」,如果你的彙編程序支持它,那麼在C的方法中使用變體:'#ifndef file1 \ n #define file1'?我很抱歉,如果atmega不支持這些(或類似的東西)。但由於您沒有收到任何其他答覆,我認爲我會提供我所能提供的幫助。 – 2014-09-30 08:32:53

+0

對不起,對於最近的答案,但確實有類似的:.IFDEF和.ENDIF如下所示:[avr-asm-tutorial.net](http://www.avr-asm-tutorial.net/avr_en/beginner/ DIREXP.html)我將暫時與此合作,謝謝! – lorenzli 2014-10-07 06:23:33

回答

0

有更復雜的問題,它是寄存器分配。由於您正在編寫所有代碼,因此如果更多的函數需要特定的寄存器而另一個函數需要另一個函數,則可能會遇到麻煩C編譯器足夠聰明,可以根據優化設置處理它。如此驚人的大型ASM項目可能不如C代碼有效。

+0

我同意關於優化,但正弦的一些模塊是時間緊要關於語言沒有選擇。對於我使用名稱定義來區分它們的寄存器,我不認爲這會是一個問題。 – lorenzli 2014-10-07 06:17:03

+0

但是,除非您使用區分寄存器多次包含asm代碼,否則寄存器將在全局範圍內被阻止。我個人在C代碼中使用gcc內聯彙編程序來處理時間緊迫的事情。如果有選擇,它會在編譯器上留下優化。你需要知道什麼寄存器/常量可以在特定的操作碼中使用。 asm指令使用相當神祕的語法,但它是可行的。 – TMa 2014-10-07 06:28:29

+0

赦免,但你的意思是「包含asm代碼與不同的寄存器多次,然後寄存器被全局阻止」? – lorenzli 2014-10-07 07:45:16