vc編程實例教程 c語言中如何調(diào)用匯編程序?
c語言中如何調(diào)用匯編程序?20?如何自己用C#編寫匯編語言編譯器?計算機上唯一可以運行的語言是二進制代碼。但是二進制是很難寫或讀的(你可以想象一個完整的0和1的代碼)。為了使用戶更好地讀寫代碼,在匯編
c語言中如何調(diào)用匯編程序?
20?如何自己用C#編寫匯編語言編譯器?
計算機上唯一可以運行的語言是二進制代碼。但是二進制是很難寫或讀的(你可以想象一個完整的0和1的代碼)。為了使用戶更好地讀寫代碼,在匯編語言中,用助記符代替操作碼,用地址符號或標簽代替地址碼。這樣,機器語言的二進制代碼就被符號所取代,機器語言就變成了匯編語言。換句話說,匯編可以直接轉(zhuǎn)換成二進制語言并在CPU上運行,所以它不需要任何驅(qū)動程序來運行。當然,需要硬件制造商提供的匯編編譯器將匯編代碼轉(zhuǎn)換為二進制代碼。當你提到計算機如何識別指令時,問題非常復雜。它涉及數(shù)字電路、計算機原理和其他東西??傊?,這些是CPU制造商需要考慮的事情。
匯編怎樣調(diào)用C?
匯編調(diào)用C,根據(jù)函數(shù)調(diào)用規(guī)范傳遞參數(shù)(即棧壓),常用函數(shù)調(diào)用規(guī)范有stdcall,cdecl,cdecl是常用的默認調(diào)用規(guī)范。如果是cdecl,則堆棧清理操作由調(diào)用方處理,也就是說,程序集需要在C函數(shù)返回后清除堆棧。
另外,匯編調(diào)用C,還要處理ABI的返回值,常用的arm ABI oabi、EABI等,相關(guān)的返回值在哪個寄存器中。
C調(diào)用程序集。除了按照上述函數(shù)調(diào)用規(guī)范和ABI規(guī)范處理參數(shù)和返回值外,assembly還應該使用MOV、PC、LR返回C,即當C調(diào)用發(fā)生時,LR有調(diào)用的返回地址