1. 程式人生 > >C語言原始檔到組合語言的編譯

C語言原始檔到組合語言的編譯

這是我們經常寫的最簡單的程式:

#include <stdio.h>
int main()
{
printf("Hello,world!\n");
    return 0;
}

在我們使用gcc指令來編譯C語言原始檔的時候,在命令列輸入下面命令:

[[email protected] kangkang]# gcc -o hello hello.c   //#編譯C程式碼生成目標檔案為hello。

預設情況下,gcc指令將編譯連線過程一步完成,使用適當的選項可以將編譯過程分步驟完成。使用“-E”選項僅完成編譯預處理操作:

[[email protected] kangkang]# gcc -E -o hello.i hello.c   //#僅執行編譯預處理,指定預處理後生成的檔案。

接下來,使用“-S”選項生成彙編程式碼。在命令列中輸入下面的命令:

[[email protected] kangkang]# gcc -S -o hello.s hello.i    //#將C語言轉換為彙編原始碼檔案“hello.s”  。

最後,使用cat指令檢視生成的“.s”檔案:

[[email protected] kangkang]# cat hello.s
        .file   "hello.c"
        .section        .rodata
.LC0:
        .string "Hello,world!"
        .text
.globl main
        .type   main, @function
main:
        leal    4(%esp), %ecx
        andl    $-16, %esp
        pushl   -4(%ecx)
        pushl   %ebp
        movl    %esp, %ebp
        pushl   %ecx
        subl    $4, %esp
        movl    $.LC0, (%esp)
        call    puts
        movl    $0, %eax
        addl    $4, %esp
        popl    %ecx
        popl    %ebp
        leal    -4(%ecx), %esp
        ret
        .size   main, .-main
        .ident  "GCC: (GNU) 4.1.2 20070626 (Red Hat 4.1.2-14)"
        .section        .note.GNU-stack,"",@progbits

////////////////////////////////////////////////////////////////////////////////////////////////////////////////

使用as指令的“-o”選項可以將彙編程式碼檔案編譯為目標檔案:

[[email protected] kangkang]# as -o hello.o hello.s      //#將彙編檔案編譯為目標檔案。

相關推薦

C語言原始檔組合語言編譯

這是我們經常寫的最簡單的程式: #include <stdio.h> int main() {printf("Hello,world!\n");     return 0; } 在我們使用gcc指令來編譯C語言原始檔的時候,在命令列輸入下面命令: [[email

(轉)C語言的條件編譯#if, #elif, #else, #endif、#ifdef, #ifndef

n+1 ifdef int pan 不能 ica 推薦 代碼 表達式 有些程序在調試、兼容性、平臺移植等情況下可能想要通過簡單地設置一些參數就生成一個不同的軟件,這當然可以通過變量設置,把所有可能用到的代碼都寫進去,在初始化時配置,但在不同的情況下可能只用到一部分代碼,就

C語言中的編譯時分配內存

一個 地址 移植 eap 也會 功能 空間大小 全局區 限定 1.棧區(stack) --編譯器自動分配釋放,主要存放函數的參數值,局部變量值等; 2.堆區(heap) --由程序員分配釋放; 3.全局區或靜態區 --存放全局變量和靜態變量;程序結束時由系統釋放,分為全局初

深入理解C語言的預編譯指令之include

get http npe target info pdb tfs mar 語言 慫b促64u父猩84卵ml0http://www.facebolw.com/space/2101977 0俜垂屹17該性膠1http://tushu.docin.com/hmd622 6PD

Linux下C語言程序的編譯過程與ssc平臺出租

vim 匯編 實例 \n sem urn 結果 linux return 使用gcc編譯程序時,編譯工程分為4個階段:ssc平臺出租(企 娥:217 1793 408) (1)預處理:(Pre-Processing) (2)編譯:(Compiling) (3)匯編:(Ass

如何在ubuntu中寫一個簡單的C語言程式碼並編譯執行

首先需要安裝一個編譯器 因為筆者也是剛剛開始學習ubuntu所以不知道各個編譯器之間的區別,筆者所用的是gcc就簡單介紹一下gcc的安裝方法吧。 方法一: 開啟控制檯輸入以下程式碼: sudo apt-get build-dep gcc; sudo apt-get bui

C語言獲取當前編譯執行檔案(XXX.exe)檔名和目錄路徑

C語言獲取當前編譯執行檔案(XXX.exe)檔名和目錄路徑 vc2010編譯通過 #include<stdio.h> #include<string.h> #include<windows.h> #include<stdlib.h> int ma

窺探C語言程式的編譯、連結

窺探C語言程式的編譯、連結 C語言程式從原始檔到生成可執行程式需要經過編譯器的預處理,彙編、編譯、連結。這裡簡化為編譯、連結兩個階段 編譯:對原始檔語法做檢查 連結:會查詢函式的具體實現並把專案中所有相關的.o目標檔案、C語言函式庫合併在一起生成可執行檔案 我來編寫一個main.c 對main.c

深入理解C語言組合語言程式設計師角度)

轉自:http://blog.sina.com.cn/s/blog_16696ec8f0102wq2d.html   一、比較C與彙編的語言要素(可有表格、例子等) 1.資料型別比較:所有資料型別(數與資訊、無符號、有符號等;包括布林型別、   &

一個C語言程式的編譯過程

這是一個再簡單不過的C語言程式: #include <stdio.h> int main() { printf("hello world!\n"); return 0; } 執行gcc test.c,就使一個原始檔變成了可

C語言程式的編譯、連結具體過程及Linux環境下的具體例項

我們知道一個C語言程式從編寫完成到生成可執行檔案分為預處理、編譯、彙編、連結,最後再生成可執行檔案。 預處理階段 前處理器主要做四部分工作,分別是:標頭檔案展開、巨集替換、去註釋以及條件編譯。 (1)標頭檔案展開就是編譯器會根據字元#開頭的命令去讀取相

C語言組合語言之間的函式呼叫

教材:嵌入式系統及應用,羅蕾、李允、陳麗蓉等,電子工業出版社 ARM 程式設計 C與彙編之間的函式呼叫 ATPCS簡介 ARM-Thumb 過程呼叫標準 ATPC

VSCode的多個(C/C++)原始檔編譯執行(Linux)

引言 VSCode作為微軟推出的一款免費的輕量級的整合開發環境,可謂是良心之作。它擁有VS的高顏值,而且像瑞士軍刀一樣,擁有豐富的外掛,c/c++、java、python、js、html等等,它都能輕鬆駕馭。 在這裡介紹關於多個C/C++原始檔在V

C語言組合語言相互呼叫

在使用C語言時,要用到和組合語言的混合程式設計。若彙編程式碼較為簡潔,則可使用直接內嵌彙編的方法;否則要將彙編程式以檔案的形式加入到專案中,按照ATPCS(ARM/Thumb過程呼叫標準,ARM/Thumb Procedure Call Standard)的規定與C程

C語言】淺析編譯原理

致讀者: 提到“編譯原理”,大部分人的首要反應就是苦惱。確實,編譯原理這一部分的內容在計算機學習中是比較難以理解的一部分。首次接觸編譯原理,我也感覺很複雜,難以理解。但是當看過幾次之後,對於一些簡單知識點的理解就有點眉目了。在這裡就將有點眉目的知識寫一下。 編譯原理:

聊聊C語言的預編譯指令include

“include”相信大家不會陌生,在我們寫程式碼時,開頭總會來一句“include XXX”。include是幹嘛用的,很多教材都提到了,因此這裡不會再詳細解釋了,大概意思就是將程式碼檔案需要用到的函式宣告、常量等包含到程式碼檔案中。include不是C語言的關鍵字,而是屬於一種預編譯的指令,那麼預編譯又

linux中編譯C語言程序

編輯器 ins spa include all 運行程序 gcc linux中 style 1.首先安裝gcc編輯器 yum install gcc* -y 2.編寫C語言程序 [[email protected]/* */ ~]# vim aa.c #i

C語言編碼轉換gb2312 to utf8,utf8 to gb2312 代碼,GCC編譯,支持Windows、Linux

inb style fine mem amp blog linu print from 編譯:gcc -o f.exe f.c -liconv #include <stdio.h> #include <stdlib.h> #include <

C語言/原子/編譯,你真的明白了嗎?

clas done ati pre 內存 程序 導致 裏的 creat   說到原子,類似於以下的代碼可能人人都可以看出貓膩。 #include <stdio.h> #include <pthread.h> int cnt = 0;

C語言編譯數組中有的加code有的不加,有什麽區別

hid 比較 嵌入 編碼 系統 itl targe www bsp 像uchar code table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};和uchar ds1302[]={0xfe,0xfd,0xfb,0xf7,0