㈠ 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汇编的。