欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

NASM汇编helloworld图解

发布时间:2025/4/14 51 豆豆
生活随笔 收集整理的这篇文章主要介绍了 NASM汇编helloworld图解 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

    NASM是一个为可移植性与模块化而设计的一个80x86的汇编器。它支持相当多的目标文件格式,包括
Linux和''NetBSD/FreeBSD'',''a.out'',''ELF'',''COFF'',微软16位的''OBJ''和''Win32''。

它还可以输出纯二进制文件。它的语法设计得相当的简洁易懂,和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的系统调用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寄存器,为调用9号程序(显示字符串)做准备 mov ds, ax mov dx, string ;取偏移地址,等价于MASM的 lea dx, string 或 mov dx, offset string mov ah, 9 int 21h MOV AH,4CH ;回到操作系统 INT 21H string db "Hello, OS world!$"

 构建以后运行,也是不能运行;

看资料说,使用 nasm -f win32 *.asm 编译出obj文件,再link,就可构建出Win下的程序;

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

刚才下的nasm版本是解压版的,可能不带link;下个安装版的;

安装完以后,从桌面图标进入构建环境; 

把 1.asm 拷贝到nasm安装目录,准备编译和链接;但是看了一下,安装目录也没有link工具; 

仔细看一下网上资料;原来是用VS的link工具来链接的;

正确的编译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来测试你的程序了。

 下回再整;

先试一下用VC6的cl.exe能不能链接出来;操作如下;没链接成功;下回再整;

 

nasm和masm的一些区别

1. nasm是区分大小写的;
2. nasm中访问内存需要使用[]将内存地址括起来;
3. 
nasm不存储类型信息,所以也不能使用MOVS这样没有表明大小的命令,而只能使用MOVSW这样的命令;

另外往内存中存放数据也需要注意:
如果写成这样:
    var equ 2
    mov [var], 1
会报错,

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

4. nasm中没有ASSUME伪指令;
5. nasm没有SMALL、COMPACT这样的内存模型;
6. nasm引用浮点寄存器的方式与masm不同;
7. 声明数据块的方式不同:
    stack db 64 dup (?)    ; masm
    stack resb 64          ; nasm
    nasm不支持dup,且?是一个可用的变量名;

总结

以上是生活随笔为你收集整理的NASM汇编helloworld图解的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。