用gcc编译16位汇编
① 请教C++中编译64位程序的时候能否使用32位内联汇编
从x64的设计来说,64-bit模式下是可以使用32-bit指令和大部分16-bit指令的(有一部分16-bit指令的编码被重用了,所以不能用,还有一部分涉及段操作的也不能用),但是在long mode下运行的32-bit(兼容模式)代码是不能使用64-bit指令和新寄存器的。
至于编译器能否使用内嵌汇编,要看设计,cl64就彻底不允许任何嵌入汇编,但是icc、gcc是允许的。
② 要学习汇编语言要用什么软件
1,上位机汇编(即PC机汇编);可以采纳"烛秋"网友的回答。
2,如果是学习单片机汇编,你可以使用一个很古老的软件,WAVE汇编软件。我就是从这个软件开始学的单片机。
推荐你用Keil,单片机汇编是底层语言,电子专业的起步必经之路(其实也可以跳过),学起来之后,就回到c语言的平台上了,只有各别特殊的地方需要使用汇编。
Keil可以做汇编,及C语言,并且支持很多芯片,被收购之后,现在可以做ARM编程。
这两款软件都可以从网上找到。顺祝学习顺利,呵呵
③ 请问为什么用as,ld在Windows平台编译16位汇编程序编译出来的应用程序会无效
as ld是gcc的套件,gcc能不能产生exe格式的目标文件?不能的话nasm替代
④ 我想用gcc编译一个汇编程序,就是把c语言转成汇编。
假设你的函数保存在main.c中。
gcc -S main.c -o main.s
-S表示assembly 汇编的意思,也就是生成汇编文件
⑤ 正常编写的c语言程序编译器会自动进行针对特定指令集用汇编语言优化吗
这个要看你使用什么编译器了。查看编译器的帮助文档,它会告诉你它支持那些指令集,并且做哪些可能的优化。
不同的编译器,是不一样的。
补充:GCC 不太清楚,你连VC++的版本都不说。汗,VC6是不支持SSE的,需要安装VC6SP5。
VS2005 和 VS2008 都支持 SSE。对 SSE/MMX 指令集优化得最好的,还是 Intel 的 c++ 编译器。
对并行和高性能计算,Fortran 的优势比较大。特别是 Fortran2003 的新特征,为并行计算做了很多专门的设定。Intel 也有 Fortran 的编译器。
⑥ C语言和汇编语言的关系
程序员编写的C语言代码,首先要经过C语言编译器,生成汇编代码,这个过程称为编译阶断,当C语言编译器生成汇编代码后,再调用汇编器来将汇编代码编译成汇编指令。
这是一种站在巨人肩人的作法,最早的C++编程语言也是这样的实现方法,只不过那时候叫Cfront程序,Cfront程序的作用是将C++代码转换成C语言代码,类似于一个文本处理器,然后再调用C语言编译器,将C源码编译成汇编代码,然后再调用汇编器将汇编代码编译成机器码。
这个过程,在Windows平台上不容易操作,但是在Linux平台上很容易看到。以gcc这款c语言编译器为例,它实际上是四个小程序。
cp: c语言预处理程序,有它负责进行预处理操作。
cc: C语言编译器,它负责将C源码编译成汇编代码。
as: 汇编器,它负责将汇编代码编译成机器码,一般使用gcc test.c这样的命令编译C语言时,会生成一个a.out的程序,它实际上指的就是as ouput,即汇编器输出文件。
link: 链接器,它负责将汇编器输入的机器码和库打包成一个操作系统可以运行的可执行文件,在Linux上的可执行文件格式是ELF格式,这个格式的实现是有链接器来完成的。