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图解相关推荐

  1. 图解在8086模拟器中运行汇编helloworld程序

    汇编helloworld代码: org 100h; set video mode mov ax, 3 ; text mode 80x25, 16 colors, 8 pages (ah=0, al=3 ...

  2. 操作系统真象还原第1.5章 NASM汇编学习

    第二章有使用 NASM 汇编写主引导记录 MBR 的内容. 在写第二章的代码前,每天晚上下班后花一些时间简单地回顾了 NASM 汇编的内容,只复习了最简单的语法,之后写 OS 时再边写边查资料. 指令 ...

  3. NASM汇编学习01(hello world和IDE)

    首先介绍下我使用的汇编IDE(估计很多人汇编都是用记事本写,手动滑稽). SASM汇编IDE,可以在windows上使用,也可以在linux上使用,我的win10物理机和ubuntu22.04虚拟机都 ...

  4. Nasm汇编GDB调试

    本文主要介绍了对Nasm汇编代码进行调试要如何编译,以及在调试过程中的会用到的一些基础指令. 1. 示例代码 section .datamessage db "hello, nasm!&qu ...

  5. nasm汇编实现贪吃蛇

    title: nasm汇编实现贪吃蛇 date: 2019-12-20 18:43:10 文章目录 0. 前言 1. 需求分析 2. 数据结构设计 3. 程序流程架构 4. 难点分析 5. 具体实现 ...

  6. NASM汇编初探(入门教程)

    Learn Assembly Language 文章目录 Learn Assembly Language 1. Lesson 1 Hello, world! 1.1 Background 1.2 Wr ...

  7. Ubuntu 16.04安装NASM汇编IDE-SASM

    在Linux下,尤其是Ubuntu,SASM工具应该是用来开发汇编最好用的IDE,小巧且支持调试.支持的编译器有:NASM, MASM, GAS, FASM. 安装步骤: 下载: http://dow ...

  8. linux x64 asm 参数传递,NASM汇编学习系列(1)——系统调用和参数传递

    0. 说明 本学习系列代码几乎完全摘自:asmtutor.com,如果英文可以的(也可以用谷歌浏览器翻译看),可以直接看asmtutor.com上的教程 系统环境搭建:(我用的是ubuntu18.04 ...

  9. VS中使用nasm汇编编译器的方法

    nasm是一款可以可vs2003 甚至vc6.0兼容的汇编编译程序,在音视频底层解码的时候很容易用到汇编混合编译. 具体怎么操作哪? 一 下载nasm nasm.exe和ndisasm.exe作为加载 ...

最新文章

  1. 快意报表存储过程标准写法
  2. java 执行linux命令行_10个高效Linux技巧及Vim命令对比
  3. busmaster 使用教程_Busmaster使用.pdf
  4. ElasticSearch服务器操作命令
  5. np.random.randint产生一个范围内的数据
  6. cargo maven_用于集成测试的Maven Cargo插件
  7. No module named ‘wrapt‘
  8. Anaconda下载与安装详解
  9. android 代码设置休眠,几行让Android进入休眠的C代码
  10. LTE-OA系统架构图
  11. Windows图片查看器不见了注册表可以帮你修复
  12. 工大助手--加权平均分计算
  13. 微信视频号绑定公众号教程分享
  14. 经过本人盘点与细数,总结出个人云存储与传统网盘五大差别
  15. linux4k分辨率,ubuntu18.04设置支持4k分辨率
  16. Vue --- 登陆+注册
  17. 谱本征正交分解 (SPOD)附matlab代码
  18. CISCO设备信息泄漏漏洞案例
  19. 1PPS:秒脉冲 相关概念理解
  20. CRC校验 串行 并行 长除 移位 查表 矩阵

热门文章

  1. java linkedlist 方法_Java LinkedList getFirst()方法与示例
  2. python脚本中执行另一个脚本_如何用python调用另一个python脚本?
  3. 采用TCPListener/TCPClient实现图片传输
  4. DevExpress XPO使用WCF数据源
  5. DM达梦数据库 - 设置忽略关键字方法,login关键字处理实例演示
  6. Geany整体增加减少缩进快捷键
  7. 模拟电路技术之基础知识
  8. bitand( ) 函数用法
  9. arcLength函数
  10. 【MPI编程】任意节点数的蝶形求和(高性能计算)