安裝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》