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图解相关推荐
- 图解在8086模拟器中运行汇编helloworld程序
汇编helloworld代码: org 100h; set video mode mov ax, 3 ; text mode 80x25, 16 colors, 8 pages (ah=0, al=3 ...
- 操作系统真象还原第1.5章 NASM汇编学习
第二章有使用 NASM 汇编写主引导记录 MBR 的内容. 在写第二章的代码前,每天晚上下班后花一些时间简单地回顾了 NASM 汇编的内容,只复习了最简单的语法,之后写 OS 时再边写边查资料. 指令 ...
- NASM汇编学习01(hello world和IDE)
首先介绍下我使用的汇编IDE(估计很多人汇编都是用记事本写,手动滑稽). SASM汇编IDE,可以在windows上使用,也可以在linux上使用,我的win10物理机和ubuntu22.04虚拟机都 ...
- Nasm汇编GDB调试
本文主要介绍了对Nasm汇编代码进行调试要如何编译,以及在调试过程中的会用到的一些基础指令. 1. 示例代码 section .datamessage db "hello, nasm!&qu ...
- nasm汇编实现贪吃蛇
title: nasm汇编实现贪吃蛇 date: 2019-12-20 18:43:10 文章目录 0. 前言 1. 需求分析 2. 数据结构设计 3. 程序流程架构 4. 难点分析 5. 具体实现 ...
- NASM汇编初探(入门教程)
Learn Assembly Language 文章目录 Learn Assembly Language 1. Lesson 1 Hello, world! 1.1 Background 1.2 Wr ...
- Ubuntu 16.04安装NASM汇编IDE-SASM
在Linux下,尤其是Ubuntu,SASM工具应该是用来开发汇编最好用的IDE,小巧且支持调试.支持的编译器有:NASM, MASM, GAS, FASM. 安装步骤: 下载: http://dow ...
- linux x64 asm 参数传递,NASM汇编学习系列(1)——系统调用和参数传递
0. 说明 本学习系列代码几乎完全摘自:asmtutor.com,如果英文可以的(也可以用谷歌浏览器翻译看),可以直接看asmtutor.com上的教程 系统环境搭建:(我用的是ubuntu18.04 ...
- VS中使用nasm汇编编译器的方法
nasm是一款可以可vs2003 甚至vc6.0兼容的汇编编译程序,在音视频底层解码的时候很容易用到汇编混合编译. 具体怎么操作哪? 一 下载nasm nasm.exe和ndisasm.exe作为加载 ...
最新文章
- 快意报表存储过程标准写法
- java 执行linux命令行_10个高效Linux技巧及Vim命令对比
- busmaster 使用教程_Busmaster使用.pdf
- ElasticSearch服务器操作命令
- np.random.randint产生一个范围内的数据
- cargo maven_用于集成测试的Maven Cargo插件
- No module named ‘wrapt‘
- Anaconda下载与安装详解
- android 代码设置休眠,几行让Android进入休眠的C代码
- LTE-OA系统架构图
- Windows图片查看器不见了注册表可以帮你修复
- 工大助手--加权平均分计算
- 微信视频号绑定公众号教程分享
- 经过本人盘点与细数,总结出个人云存储与传统网盘五大差别
- linux4k分辨率,ubuntu18.04设置支持4k分辨率
- Vue --- 登陆+注册
- 谱本征正交分解 (SPOD)附matlab代码
- CISCO设备信息泄漏漏洞案例
- 1PPS:秒脉冲 相关概念理解
- CRC校验 串行 并行 长除 移位 查表 矩阵