使用NASM和CL(或LINK)寫HelloWorld
前言
...
編譯彙編程式碼
我們來編譯連結這個名為helloworld.asm的彙編程式碼
; This is a Win32 console program that writes "Hello, World" on one line and
; then exits. It needs to be linked with a C library.
global _main
extern _printf
section .text
_main:
push message
call _printf
add esp, 4
ret
message:
db 'Hello, World', 10, 0
正如你所看到的我們使用printf來列印出Hello, World。這個函式使用了extern,因為它是匯入函式(它屬於C執行時庫)。Paul Carter的教程中提供了用於編譯例子程式碼的命令:
; To assemble for Microsoft Visual Studio
; nasm -f win32 -d COFF_TYPE asm_io.asm
遺憾的是語法錯誤。-d開關似乎在NASM2.09.04版本中被廢棄,它不起任何作用。表示檔案型別的win32看上去是沒問題的(它表示檔案輸出格式為win32)。
正確的編譯helloworld.asm的命令如下:
nasm -f win32 helloworld.asm
使用以上命令NASM生成一個名為helloworld.obj的檔案。現在我們要使用連結器將.obj檔案連結到.exe檔案中。開啟Visual Studio Command Prompt然後輸入如下內容:
link.exe helloworld.obj libcmt.lib
// or
cl.exe helloworld.obj /link libcmt.lib
printf()函式通過libcmt.lib(此庫屬於C執行時庫)被靜態包含。如果你省略了libcmt.lib的話你將得到錯誤error LNK2001: unresolved external symbol _printf
現在你可以執行helloworld.exe來測試你的程式了。
相關文章
- 使用cl.exe和linker.exe連線程式線程
- 用eclipes寫第一個HelloWorld
- 機器語言編寫helloworld
- nasm彙編ASM
- vs整合nasmASM
- 編寫最簡單的核心:HelloWorld
- OpenCL中的管道cl::Pipe的使用
- Appium使用のhelloworldAPP
- Database Link使用Database
- 教練我想寫一個 HelloWorld Babel 外掛Babel
- cl 的完整程式
- BitBake使用攻略--從HelloWorld講起
- C與彙編(NASM) (1)ASM
- 用 Smali 手寫一個可執行的 HelloWorld
- helloworld
- vc的nasm和vcsp5 vcpp5的安裝。ASM
- grpc-go使用教程之helloworldRPCGo
- 樹莓派4B-SPI讀寫flash-FM25CL16B(同時支援FM25CL64等其它系列Flash)樹莓派
- oracle database link 的使用OracleDatabase
- nasm彙編以及bochs除錯ASM除錯
- 【轉載】CL_HTTP_CLIENT的HTTP和SOAP用法示例HTTPclient
- link和@import引入css 區別,不建議使用@importImportCSS
- 002 安裝Rust和WebAssembly工具鏈和helloworldRustWeb
- Ubuntu 18.04.1 搭建Java環境和HelloWorldUbuntuJava
- 快速開始HelloWorld和Python之禪Python
- js 與或運算子&&和||使用技巧JS
- CL_ABAP_CHAR_UTILITIES類
- link和@import的區別Import
- NASM 與 GDB 簡易除錯指南ASM除錯
- 自己動手從零寫桌面作業系統GrapeOS系列教程——10.NASM彙編作業系統ASM
- 鴻蒙HarmonyOS實戰-工具安裝和Helloworld案例鴻蒙
- SpringMVC——HelloWorldSpringMVC
- vue之HelloworldVue
- HelloWorld.phpPHP
- FASM之HelloWorldASM
- css link和@import的區別CSSImport
- CSS中 link 和@import的區別CSSImport
- Flutter系列(四)——HelloWorldFlutter