日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

NASM汇编helloworld图解

發(fā)布時間:2025/4/14 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 NASM汇编helloworld图解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

? ? NASM是一個為可移植性與模塊化而設計的一個80x86的匯編器。它支持相當多的目標文件格式,包括
Linux和''NetBSD/FreeBSD'',''a.out'',''ELF'',''COFF'',微軟16位的''OBJ''和''Win32''。

它還可以輸出純二進制文件。它的語法設計得相當?shù)暮啙嵰锥?#xff0c;和Intel語法相似但更簡單。它
持''Pentium'',''P6'',''MMX'',''3DNow!'';

nasm下載地址
https://www.nasm.us/pub/nasm/

?

nasm helloworld程序;

section .textglobal _start;_start:mov eax, 4mov ebx, 1mov ecx, stringmov edx, lengthint 80h;exit的系統(tǒng)調(diào)用mov eax, 1mov ebx, 0int 80hsection .datastring: db 'hello world',0Ahlength: equ 13section .bssvar:resb 1

使用nasm構建為.com程序,然后運行,如下圖,不能運行;

構建為.exe,運行,不能運行,如下;因為不是Windows下的程序;?

干完上述活有下面文件;?

下面這個程序也是nasm的helloworld;

org 0100h ;PSP前綴,程序從0100h開始運行 mov ax, cs ;初始化 ds和dx寄存器,為調(diào)用9號程序(顯示字符串)做準備 mov ds, ax mov dx, string ;取偏移地址,等價于MASM的 lea dx, string 或 mov dx, offset string mov ah, 9 int 21h MOV AH,4CH ;回到操作系統(tǒng) INT 21H string db "Hello, OS world!$"

?構建以后運行,也是不能運行;

看資料說,使用 nasm -f win32 *.asm 編譯出obj文件,再link,就可構建出Win下的程序;

操作如下;找不到 link 工具;

剛才下的nasm版本是解壓版的,可能不帶link;下個安裝版的;

安裝完以后,從桌面圖標進入構建環(huán)境;?

把 1.asm 拷貝到nasm安裝目錄,準備編譯和鏈接;但是看了一下,安裝目錄也沒有l(wèi)ink工具;?

仔細看一下網(wǎng)上資料;原來是用VS的link工具來鏈接的;

正確的編譯helloworld.asm的命令如下:
nasm -f win32 helloworld.asm
使用以上命令NASM生成一個名為helloworld.obj的文件。

現(xiàn)在要使用鏈接器將.obj文件鏈接到.exe文件中。打開Visual Studio Command Prompt然后輸入如
下內(nèi)容:
link.exe helloworld.obj libcmt.lib?
// or?
cl.exe helloworld.obj /link libcmt.lib

printf()函數(shù)通過libcmt.lib(此庫屬于C運行時庫)被靜態(tài)包含。如果你省略了libcmt.lib的話你將得
到錯誤error LNK2001: unresolved external symbol _printf
現(xiàn)在你可以執(zhí)行helloworld.exe來測試你的程序了。

?下回再整;

先試一下用VC6的cl.exe能不能鏈接出來;操作如下;沒鏈接成功;下回再整;

?

nasm和masm的一些區(qū)別

1. nasm是區(qū)分大小寫的;
2. nasm中訪問內(nèi)存需要使用[]將內(nèi)存地址括起來;
3.?
nasm不存儲類型信息,所以也不能使用MOVS這樣沒有表明大小的命令,而只能使用MOVSW這樣的命令;

另外往內(nèi)存中存放數(shù)據(jù)也需要注意:
如果寫成這樣:
? ? var equ 2
? ? mov [var], 1
會報錯,

需要寫成如下的形式:
var equ 2
mov word [var], 1

4. nasm中沒有ASSUME偽指令;
5. nasm沒有SMALL、COMPACT這樣的內(nèi)存模型;
6. nasm引用浮點寄存器的方式與masm不同;
7. 聲明數(shù)據(jù)塊的方式不同:
? ? stack db 64 dup (?) ? ?; masm
? ? stack resb 64 ? ? ? ? ?; nasm
? ? nasm不支持dup,且?是一個可用的變量名;

總結

以上是生活随笔為你收集整理的NASM汇编helloworld图解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。