nasm笔记

nasm编译器

  • nasm只是一个编译器,只能输出目标文件,你还需要一个链接器来生成exe。
  • nasm支持多种输出文件格式,比如obj、elf等等。用参数-f告诉nasm输出什么格式。参数-hf可以查看支持的格式。
  • 在没有-f参数的情况下,nasm默认的输出文件格式是bin,比如要写boot sector就要输出成bin。bin这种格式没有所谓段这个概念,分段都是自己管理。
    在这里插入图片描述

nasm编译选项

nasm 1.asm -o 1.com
只展开宏不编译
nasm -e 1.asm -o 2.asm

nasm中section的概念

nasm支持以下三个标准的段,编译后的程序文件中的内存地址顺序是.text, .data,用户自定义section
1 .text

用于存放程序代码的区域, 编译时确定, 只读。更进一步讲是存放处理器的机器指令,当各个源文件单独编译之后生成目标文件,经连接器链接各个目标文件并解决各个源文件之间函数的引用,与此同时,还得将所有目标文件中的.text段合在一起,但不是简单的将它们“堆”在一起就完事,还需要处理各个段之间的函数引用问题。

2 .data

用于存放在编译阶段(而非运行时)就能确定的数据,可读可写。也是通常所说的静态存储区,赋了初值的全局变量、常量和静态变量都存放在这个域。
而bss段不在可执行文件中,由系统初始化。

3.bss

BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域,一般在初始化时bss 段部分将会清零(bss段属于静态内存分配,即程序一开始就将其清零了)。
比如,在C语言程序编译完成之后,已初始化的全局变量保存在.data 段中,未初始化的全局变量保存在.bss 段中。

nasm之bits

'BITS’指令指定NASM产生的代码是被设计运行在16位模式的处理器上还是运行在32位模式的处理器上。

section .text
bits 16

nasm基础语法

nasm基础语法与masm差不多,但是有些地方需要注意

1. nasm使用寄存器+偏移地址寻址时寄存器要写在里面

mov [es:120], ax

2. nasm不使用offest关键字,[地址值]即代表使用地址里面的值

mov [es:120], ax

3. nasm 定义的 7 种数据 size
  • byte : 8 位
  • word : 16 位
  • dword : 32 位
  • qword : 64 位
  • tword : 80 位
  • oword : 128 位
  • yword : 256 位
4.nasm 定义了用于初始化上面 7 种 size 的 db 家族,它们用于定义初化常量值。

db : define byte
dw :define word
dd :define doubleword
dq :define quadword
dt :define tword
do :define oword
dy :define yword

5. nasm 为操作数指定一个size值

mov byte [buffer + 0x01] , 'a'

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值