如果是写16位汇编,下载masm50(微软的16位宏汇编包),百度一下就有下载!使用masmexe编译16位汇编源代码生成obj文件,在用linkexe连接生成16位可执行文件exe。在32位机器上是可以写16位程序的,因为x86的计算机体系就是为了兼容低阶程序而存在的,计算机在启动的时候就是以实模式(可以简单理解为16位的)启动的,之后 *** 作系统才使用机器指令转向32位保护模式(因为这样从硬件级支持多任务)。编写16位、32位、以及64位汇编程序只要下载安装相应的汇编包就可以了。
在Win32编程中,由于Windows有很多的数据结构和定义,这些都放在include文件中,还有连接时要用到Import库(通俗的讲就是Windows提供的DLL文件中的函数列表,也就是告诉程序到哪里去调用API函数),这些都放在include 和lib目录中。我们在编译时要指定以下的系统环境:
set include=\Masm32v5\Include
set lib=\Masmv5\lib
set path=\Masmv5\Bin
这样编译器就会到正确的路径中去找 include 文件和 lib 文件。你可以自己在 autoexecbat 文件中加上以上语句,为了产生Windows的PE格式的执行文件,在编译和连接中要指定相应的参数:
编译: Ml /c /coff 文件名asm
连接: Link /SUBSYSTEM:WINDOWS OBJ文件名obj 资源文件名res
为了不在每次编译时都要打这么多的参数,我们可以用 nmake 文件来代为执行,nmake 是代码维护程序,他会检查 asm obj exe res 等文件的时间,如果你更新了源程序,他会自动执行编译程序或连接程序产生相应的文件。你可以在文件名为 makefile 的文件中指定使用的编译器和连接程序以及相应的参数,下面是一个 makefile 文件的例子:
NAME = Clock
OBJS = $(NAME)obj
RES = $(NAME)res
$(NAME)exe: $(OBJS) $(RES)
Link /DEBUG /SUBSYSTEM:WINDOWS $(OBJS) $(RES)
$(RES): $(NAME)rc
Rc $(NAME)rc
asmobj:
Ml /c /coff $(NAME)asm
文件告诉 nmake程序,程序名为 clock,产生 clockexe 文件需要 clockobj和 clockres 文件,而产生 clockres 文件需要 clockrc 文件,产生 clockobj 文件要用到 clockasm 文件,至于是否需要执行 ml, link 和 rc,程序会根据文件的时间自动判断。
C语言编译器目前主要有VC++、dev-C++、C-Free、win-TC、TC 20等等。
其中比较经典的VC++,微软的产品,编译器,链接器,运行,调试等功能于一体的强大开发工具,特点是功能十分强大,对于新手来说需要一段时间去摸索。
dev-C++是windows下一款开发c/c++的开发环境,使用gcc为编译器,遵循标准,功能比较强大,语法高量,可以进行单步调试(这对排除错误很重要),进行断点设置等功能,遵循C标准,是一款很强大的开发工具。
C-Free是一款支持多种编译器的专业化C/C++集成开发环境(IDE)。利用C-Free,使用者可以轻松地编辑、编译、连接、运行、调试C/C++程序。
TC 20:Borland公司的产品,在dos界面下编译运行,小巧、灵活,但是不能使用鼠标。
win-TC:在tc20的基础上加上了界面,能够使用鼠标,具有语法高量,可以嵌入汇编等特点,对新手一些,拜托了不能用鼠标的困难。
编译器,简单讲,就是将“一种语言(通常为高级语言)”翻译为“另一种语言(通常为低级语言)”的程序。一个现代编译器的主要工作流程:源代码 (source code) → 预处理器 (preprocessor) → 编译器 (compiler) → 目标代码 (object code) → 链接器(Linker) → 可执行程序 (executables)。
过程如下: 1、编辑:用编辑软件(EDITEXE或记事本)形成源程序(ASM),如:LXASM; 2、汇编:用汇编程序(MASMEXE)对源程序进行汇编,形成目标文件(OBJ),格式如下:MASM LXASM; 3、连接:用连接程序(LINKEXE)对目标程序进行连接,形成可执行文件(EXE),格式如下:LINK LXOBJ; 4、执行:如果结果在屏幕在显示,则直接执行可执行文件。 5、调试:用调试程序(LINKEXE)对可执行文件进行调试,格式如下:DEBUG LXEXE 现在有集成汇编工具(visualasm),可视化环境,比较好用。下载地址为: >
1 GCC
大名鼎鼎的GNU的C/C++/Obj-C编译器, 当前版本是281, 但据说与27有兼容性
问题 而使用较广的是gcc 272系列, 如RedHat5中带的就是gcc 2723
有时候在Cyrix上用gcc会有些问题, 因此有一套针对Cyrix特点的gcc 2723
我这里有RedHat5的rpms ftp://1661116898/pub/Warez-CD/Huricane-contrib
(Cyrix 2723 & 281)
其基本结构就是一个front end和back end,
/usr/bin/gcc 就是个front end, 其kernel东西都放在 /usr/lib/gcc-lib下面,
cpp是C预处理器, cc1的1M多的就是编译器的核心模块了
cc1 C compiler
cc1plus C++ compiler
cc1obj Object-C compiler
但gcc并没有集成Fortran的compiler, 一般要用f2c转成C后才用gcc编译
好象也还有个g77 Fortran compiler吧
gcc的不断发展完善使许多commercial compiler都相形见绌, 那当然, gcc/emacs
都由GNU创始人Richard Stallman手创, 是GNU的旗舰产品, 质量当然没得说了:-)
由于 Unix平台的高度可移植性, gcc几乎在各种常见的Unix平台上都有, 即使是
Win32/DOS也有gcc的port 比如说该死的Solaris普通版本连compiler都没有, 也
就只好用gcc了
2 EGCS(Experimental/Enhanced GNU Compiler System)
这是gcc的发展方向, 把fortran等编译器集成进来, 也许还会有Pascal
它的构造很清晰, 把对gcc的各种改进/port都集成回去 如gcc 27系列据说是
没有对Pentium进行优化的, 而egcs则把pgcc对Pentium的一些优化集成进去了
现在gcc的开发工作主要就是egcs, 由Cygnus公司领导(), 这Cygnus公司还是很
不错的, 还出了GNU-Win32, SourceNavigator等, 是GNU的坚实拥护者:-))
>
开发C程序有四个步骤:编辑、编译、连接和运行。
任何一个体系结构处理器上都可以使用C语言程序,只要该体系结构处理器有相应的C语言编译器和库,那么C源代码就可以编译并连接到目标二进制文件上运行。
1、预处理:导入源程序并保存(C文件)。
2、编译:将源程序转换为目标文件(Obj文件)。
3、链接:将目标文件生成为可执行文件(EXE文件)。
4、运行:执行,获取运行结果的EXE文件。
扩展资料:
将C语言代码分为程序的几个阶段:
1、首先,对源代码文件进行测试。以及相关的头文件,比如Stdio。HCPP预处理为。我的文件。预编译。该文件不包含任何宏定义,因为所有宏都已展开,且包含的文件已插入。我提起。
2、编译过程是对预处理后的文件进行词法分析、语法分析、语义分析和优化,生成相应的汇编代码文件。这个过程通常是整个程序的核心部分,也是最复杂的过程之一。
3、汇编程序不直接输出可执行文件,而是输出目标文件。汇编程序可以调用LD来生成可运行的可执行程序。也就是说,您需要链接到大量文件以获得最终可执行文件“aout”。
4、在链接过程中,其他目标文件中定义的函数调用指令需要重新调整,而其他目标文件中定义的变量也存在同样的问题。
参考资料来源:百度百科-c语言
以上就是关于怎么编译连接16位的汇编程序全部的内容,包括:怎么编译连接16位的汇编程序、win32汇编中nmake用法、C语言编译器有哪些各有什么特点等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)