『壹』 怎樣在linux系統下查看匯編語言
linux下將C語言編譯為匯編代碼,需用-S參數:
編譯命令為:
$ gcc -S s1.c
如下代碼:
void fun(int a,int b)
{
/*這個函數什麼也不做*/
}
int main(void)
{
fun(100,200);
return 0;
}
『貳』 LINUX下面進行8086匯編
linux的內核中有很多匯編語言,但gcc是linux的唯一指定編譯器,說明匯編的編譯同樣使用gcc,只是命令參數不一樣
我美編寫過8086匯編,但我編譯過內核,確實不需要其他編譯器
回答補充:
原來是編輯器的問題,我還以為你找的全套流程呢。
我連vim都沒碰過,平時都是gedit,只有自動縮進一項功能,還很弱智,幫不上你了
這兒一點參考資料,貼出來,雖然有可能用不上
http://www.ibm.com/developerworks/cn/linux/l-assembly/
『叄』 LINUX下面進行8086匯編
編輯器就是普通的編輯器,vim,emacs,gedit,kate...都可以
源文件類型為ascii碼的plain
text
c/c++,asm,perl,python,vhdl...我所接觸過的編程語言都是以plain
text作為源文件的
編譯用gcc或者nasm,前者編譯AT&T匯編,後者編譯intel匯編
8086的教材上一般都是用intel,不過區別不大,可以相互轉化
鏈接就是ld,屬於gcc工具集
nasm如何鏈接,沒試過
和C一樣也是使用VIM(或者其他編輯器),不用加參數,不用配置環境(如果你不想讓vim和emacs使用起來更舒服的話,根本不用配置,配置一下僅僅是為了提高打字效率)
編譯器會自動根據plain
text的文件內容來編譯
這和windows下的編程沒有區別,只不過visual為了"用戶友好"把編譯的本質隱藏起來了
如果實在不爽,裝dosemu,dos虛擬機,一般8086匯編都是用dos的吧,debug,masm都有
『肆』 如何定位 linux源代碼 匯編語言 符號
linux下將C語言編譯為匯編代碼,需用-S參數:編譯命令為:$ gcc -S s1.c如下代碼:<pre t="code" l="cpp">void fun(int a,int b)
{
/*這個函數什麼也不做*/
}
int main(void)
{
fun(100,200);
return 0;
}
『伍』 有沒有懂linux內核源碼中的匯編代碼的#define switch_to(n){struct {long a, b;}__tmp; __asm__("cmpl "
用的at&t匯編,也就是Linux下的匯編語言,跟Intel x86匯編翻譯成i386指令是一樣的,就是寫法和符號不同。
裡面應該是__asm__()後面跟的是一個字元串,包含大量轉義字元,你把轉移字元翻譯成對於的格式再看.
『陸』 Linux系統里如何編譯匯編程序。
linux 編譯匯編程序常用的有兩種,一種是A&T方式的,你gcc 就可以編譯了。還有一種是80X86方式,一般是用NASM,NASM你要在安裝LINUX時就要添加軟體包,或者你進入圖型界面,增加NASM軟體包,就可以編譯了。
『柒』 電腦裝了虛擬機linux如何寫匯編代碼,純小白提問
linux可以使用shell來編寫代碼
當你登錄至shell之後。
可以使用輸入vim XXX.sh或者為XXX(XXX代表名字)。當你輸完之後你就會進入編寫代碼的界面,進入之後必須按個小a才能編寫(⊙o⊙)哦(左下角有提示的)。
當你編寫完後按鍵盤左上角的ESC退出編輯模式,隨後在按shift+:鍵,在輸入wq就是保存退出咯(w是保存,q是退出)
如果想運行編寫的代碼在shell界面輸入命令:
bash XXX或者XXX.sh
『捌』 linux 匯編工具以及調試
當然是
gcc
+
gdb
不過gcc/gdb
用
AT&T
風格的匯編,和
dos/win32
下的
Intel
風格不太一樣,你要去了解一下具體區別。
.s
文件表示匯編源碼文件,
可以用gcc
編譯,比如
gcc
-g
a.s
-o
a.exe
然後就可以用
gdb
a.exe
來調試了,用
print
$eax
來顯示
eax
寄存器,等等。
具體
gdb
命令自己搜索了解一下。
下面給個入門例子,把下面代碼存入
a.s
,
就可以在
linux
下用我上面說的方法編譯和調試了:
hello:
.string
"Hello
world\n"
.globl
main
main:
movl
$4,
%eax
movl
$1,
%ebx
movl
$hello,
%ecx
movl
$12,
%edx
int
$0x80
ret
『玖』 linux內核代碼 匯編部分 疑問
沒研究過。
不過我記得 Linux 內核其實是兩部分,真正的內核本體是在內核文件的後部,一般都是壓縮的。之前是一個這個架構通用的啟動代碼,應該就是你這個匯編。
bootloader 的作用是把內核讀取到指定地址,之後運行這個內核,這樣運行的恰恰就是這段匯編寫的啟動代碼,這個啟動代碼的作用就是初始化環境,之後把後面本體的內核解壓縮並且寫到內存開始部分(忘了叫什麼名字)正好蓋掉 bootloader ,並且繼續運行。這樣這個運行的內核才是最終的 Linux 內核。(至少 x86 是這樣)
但每個 CPU 架構的啟動過程又有不同的地方。應該每個 CPU 都有自己特定的頭部啟動代碼。
你說這三個文件應該是有不同目的的。compressed 應該是解壓用的,kernel 裡面的應該是執行主要啟動過程的。那個 common.s 應該是「通用」部分代碼模塊。我的 comperssed 裡面還有很多 lzma 、gzip 、lzo 以及一些設備名稱的東西,應該都是「模塊」一類的吧。
你看看 Makefile 的編譯過程應該就能開除編譯調用的文件都是什麼了。
還有,你看源代碼最好看原版的,如果使用,那就去用針對性的。不然趕上找抽的人,可能針對某個開發板的代碼,會因為太過針對而不符合通用的一些規定或者習慣。