㈠ linux匯編和windows匯編為什麼不同
只能說,機器語言是和硬體溝通的語言。
使用 Intel 的 CPU,機器語言肯定是相同的。
匯編語言,要用一個編譯軟體,才能編譯成機器語言。
編譯軟體,就要依賴 OS 了。
即使是在同一個 OS,不同軟體公司編寫的編譯軟體,它們所識別的匯編語言,也不完全一樣。
㈡ 基於x86平台的windows和linux是否使用統一匯編語言呀
並不統一。Windows下的匯編語法是Intel匯編格式,Linux下的匯編語法是AT&T匯編格式。
Linux是Unix家族的一員,盡管Linux的歷史不長,但與其相關的很多事情都發源於Unix。就Linux所使用的386匯編語言而言,它也是起源於Unix。Unix最初是為PDP-11開發的,曾先後被移植到VAX及68000系列的處理器上,這些處理器上的匯編語言都採用的是AT&T的指令格式。當Unix被移植到i386時,自然也就採用了AT&T的匯編語言格式,而不是Intel的格式。盡管這兩種匯編語言在語法上有一定的差異,但所基於的硬體知識是相同的。
在Intel的語法中,寄存器和和立即數都沒有前綴。但是在AT&T中,寄存器前冠以「%」,而立即數前冠以「$」。在Intel的語法中,十六進制和二進制立即數後綴分別冠以「h」和「b」,而在AT&T中,十六進制立即數前冠以「0x」。
Intel語法
mov eax,8
mov ebx,0ffffh
movl $8,%eax
movl $0xffff,%ebx
AT&T語法
int 80h
int $0x80
操作數的方向
Intel與AT&T操作數的方向正好相反。在Intel語法中,第一個操作數是目的操作數,第二個操作數源操作數。而在AT&T中,第一個數是源操作數,第二個數是目的操作數。
例如:在Intel中, mov eax,[ecx]
在AT&T中,movl (%ecx),%eax
㈢ 如何在Linux下使用匯編語言
如果是運行的話建議使用模擬器,現在Linux平台也有比較全面的模擬器去模擬運行匯編語言了。
㈣ LINUX下面進行8086匯編
linux的內核中有很多匯編語言,但gcc是linux的唯一指定編譯器,說明匯編的編譯同樣使用gcc,只是命令參數不一樣
我美編寫過8086匯編,但我編譯過內核,確實不需要其他編譯器
回答補充:
原來是編輯器的問題,我還以為你找的全套流程呢。
我連vim都沒碰過,平時都是gedit,只有自動縮進一項功能,還很弱智,幫不上你了
這兒一點參考資料,貼出來,雖然有可能用不上
http://www.ibm.com/developerworks/cn/linux/l-assembly/
㈤ 適不適合在Linux下進行匯編語言編程
linux本身是c寫出來的,所以跑c或是c++程序更適合,
匯編主要是在操作系統未啟動的情況下使用,比如用在bootloader程序設計上,
所以在linux下再用回匯編不適合,而且用匯編語言無法開發大型工程
㈥ linux下哪些匯編編譯器支持完整的段定義偽操作
查下nasm的中文手冊吧,玩這些,最好手裡面有份編譯器的文檔,自己查著也方便
㈦ linux下鏈接過程中編譯器會做哪些工作
1. 預處理
首先源代碼文件(.c/.cpp)和相關頭文件(.h/.hpp)被預處理器cpp預編譯成.i文件(C++為.ii)。預處理命令為:
gcc –E hello.c –o hello.i
預編譯過程主要處理那些源代碼中以#開始的預編譯指令,主要處理規則如下:
u 將所有的#define刪除,並且展開所有的宏定義;
u 處理所有條件編譯指令,如#if,#ifdef等;
u 處理#include預編譯指令,將被包含的文件插入到該預編譯指令的位置。該過程遞歸進行,及被包含的文件可能還包含其他文件。
u 刪除所有的注釋//和 /**/;
u 添加行號和文件標識,如#2 「hello.c」 2,以便於編譯時編譯器產生調試用的行號信息及用於編譯時產生編譯錯誤或警告時能夠顯示行號信息;
u 保留所有的#pragma編譯器指令,因為編譯器須要使用它們。
2. 編譯
編譯過程就是把預處理完的文件進行一系列詞法分析,語法分析,語義分析及優化後生成相應的匯編代碼文件(.s)。編譯的命令為:
gcc –S hello.i –o hello.s
或者從源文件直接輸出匯編代碼文件:
gcc –S hello.c –o hello.s
現在版本的GCC把預編譯和編譯兩個步驟合並成一個步驟,由程序cc1來完成(C++為cc1plus)。
3. 匯編
匯編就是將匯編代碼轉變成機器可以執行的命令,生成目標文件(.o),匯編器as根據匯編指令和機器指令的對照表一一翻譯即可完成。匯編的命令為:
gcc –c hello.s –o hello.o
或者從源文件直接輸出目標文件:
gcc –c hello.c –o hello.o
4. 鏈接
鏈接就是鏈接器ld將各個目標文件組裝在一起,解決符號依賴,庫依賴關系,並生成可執行文件。鏈接的命令為:
ld –static crt1.o crti.o crtbeginT.o hello.o –start-group –lgcc –lgcc_eh –lc-end-group crtend.o crtn.o
一般我們使用一條命令就可以完成上述4個步驟:
gcc hello.c
實際上gcc只是一些其它程序的包裝,它會根據不同參數去調用預編譯編譯程序cc1、匯編器as、鏈接器ld。
㈧ 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系統中怎麼使C程序變成Intel的匯編程序而不是AT&T的,gcc編譯後默認的是AT&T的
gcc編譯的程序碼是沒有「Intel」、「at&t」之分的⋯⋯就是二進制而已。所謂的「Intel」、「at&t」是指匯編語言的寫作格式。
如果你用yum軟體包管理器,sudo yum install nasm。
如果你用apt-get,sudo apt-get install nasm。
如果不行,就到sourceforge下載nasm的rpm(如果是yum)或deb(apt-get),然後安裝。
如果還不行,下載源碼,然後終端里(在解壓出的目錄下):
./configure
make
sudo make install
最後,ndisasm -b 32 文件名。
順便一說安裝的這個nasm是intel格式的匯編編譯器。相當好。然後ndisasm是它附帶的反匯編器。
不好意思沒法放網址。網路會把這個回答給刪掉。
star特530的是ARM匯編的。