安装MinGw:
1.下载安装文件
MinGW - 适用于 Windows 的极简主义 GNU 下载 |SourceForge.net
点击下载
下载之后就是如下图的安装文件
2.安装
双击安装文件进行安装,点击Install下一步
选择安装位置,默认是安装在C盘,点击Change可以自定义安装路径,
、
但是要注意安装路径中不能有空格,比如:C:/Program Files/MinGW这样的路径就不行,因为Program Files中有空格,安装界面也会提示警告,点击Choose an Alternative就可以重新选择安装路径。
点击Continue,继续安装
继续安装的界面如下,等待安装完成。
点击Continue继续,
就会打开如下安装窗口,选择如下包安装
点击左上角菜单栏,Update Catalogue
会弹出如下窗口,点击Review Changes
之后会弹出如下窗口,点击Apply
安装完成后,点击Close
3设置环境变量
把MinGW安装路径的bin文件夹目录添加到环境变量中
打开Cmd,输入gcc测试是否添加成功,出现如下信息则表示添加成功!
安装Notepad++/Sublimtext:
1.下载安装文件
从以下网址下载,使用最新版本即可
Notepad++:Downloads | Notepad++ (notepad-plus-plus.org)
Sublimtext:Sublime Text - 文本编辑,正确完成
下载完成后是这样两个文件,可按需安装
执行C程序测试:
新建一个C语言的工作目录,并新建一个c语言文件,如下:
使用Sublimtext打开,写入以下代码:
#include <stdio.h>int main()
{printf("Hello World");
}
使用gcc编译代码,将代码文件夹在Cmd窗口打开,使用命令gcc HelloWorld.c
编译完成后,此文件夹就会出现以下执行程序
在cmd中运行此程序
安装NASM:
1.下载安装
从以下网址中下载NASM
NASMhttps://www.nasm.us/点击版本下载:
下载完成后,得到如下文件:
2.安装:
点击下载好的文件,开始安装(可以使用管理员运行,也可以双击运行,在学习使用上没区别),点击Next继续
选择好安装路径,点击Next继续
点击Install继续
3.设置环境变量
将NASM的安装目录添加到环境变量中
在Cmd测试,出现如下信息,代表环境变量设置成功!
安装SASM:
SASM是一个帮助我们轻松构建汇编程序的汇编器,通过使用 SASM,可以暂时不必学习链接的概念,它还可以轻松地打印字符串和数字,否则需要编写自己的例程或下载特殊的例程来打印到屏幕。最重要的是,可以在一个窗口中运行和测试程序。
1.下载安装
下载地址如下:
下载 Dmitriy Manushin 的 SASM (informer.com)
下载完成后,得到如下文件:
2.安装:
选择安装语言,点击OK继续
点击Next继续
同意许可,点击Next继续
选择合适安装路径,点击Next继续
点击Next继续
可选是否生成桌面图标,点击Next继续
点击Install下载
在下载完成后,就可以打开SASM窗口如下:
执行汇编程序测试:
1.使用NASM编译测试:
创建一个汇编语言的工程目录,并新建一个汇编文件,如下:
使用Sublimtext打开,并键入如下代码:
section .datamsg db 'Hello, World!', 0 ; 字符串以0结尾section .textglobal _main ; 入口点声明(MinGW需用_main)extern _printf ; 引用C标准库函数_main:push msg ; 参数压栈(32位)call _printf ; 调用printfadd esp, 4 ; 清理栈(32位)ret
使用NASM编译汇编文件,
注:-f win64:生成64位目标文件(64位MinGW需选此格式)
-o xxxx.obj:输入为xxxx.obj文件
在当前文件夹就会生成一个.obj文件
使用MinGW链接编辑后的文件为可执行程序文件.exe,gcc自动调用ld链接器,并链接C运行时库。
使用MinGW链接成64位的就出现了以上的问题,原因就是我们下载安装的是32位的MinGW,nasm编译的.obj文件与MinGW版本不匹配导致的,所以nasm要把汇编编译成32位的,再使用MinGW链接成32位的程序即可。
2.使用SASM编译测试
新建一个SASM工程,并键入以下代码:
%include "io.inc"section .datamsg db 'Hello,World!!',0section .textglobal CMAIN
CMAIN:mov ebp, esp;for correct debugging;write your code herePRINT_STRING msgxor eax, eaxret
运行工程, 输出Hello World,如下:
参考书籍:
《Developing A Computer Operating System From Scratch》