NASM手册阅读笔记(1) - 编译指令

基本格式   

  nasm -f <format> <filename> [-o <output>]

  比如:   

    nasm -f elf myfile.asm ; 将myfile.asm 编译成 elf文件格式,的 myfile.o文件,elf 是linux的可执行程序格式

常用编译命令

-f

  指定要编译的格式,
  windows 用 -f win32 或者win64
  linux用 -f elf
  裸机用 -f bin
-o

   指定编译后的文件的名称 否则会有默认的文件名称
-i

   %include指定要查找的目录,最好是能在 NASMENV 环境变量里设置固定的路径,省的每次设置
-d

   宏定义,编译的时候添加宏定义,这样就可以在编译的时候决定代码的内容了
-l (小写的L)
  主要是查看汇编结果,调试之前对照用的,看哪里那个地址是不是写错了什么的

-e

  这个也是调试的时候用的,主要是查看宏展开的等是否正确

举例

   nasm myfile.asm -d debug -I c:\nasmlib -f bin -o myfile.bin -l myfile.list

编译 myfile.asm 文件
定义 debug 宏定义,如果文件中有条件宏 就可以根据我这里定义的debug 宏来是更多调试用的指令有效了
添加搜索文件的路径为 c:\nasmlib 这样如果我的文件中有%include 那么他就知道去哪里搜索对应的文件了
定义要变的格式是 bin格式
输出文件的名称叫 myfile.bin
同时产生列表文件交 myfile.list

 

NASMENV 环境变量

NASMENV 会附加在每个编译之后,但是环境变量会被空格分开,所以nasm有个特性就是环境变量的第一个字符当做空格(不能是减号)

扫描二维码关注公众号,回复: 9037174 查看本文章

比如
'!-s!-ic:\nasmlib 第一个字符是! 所以这里会把当成是空格,而真正的空格就当成一个普通的字符,所以这个就等效于-s -ic:\nasmlib

 

NASM -h 简单解释

-f
  参数指定 编译的结果的格式
  bin flat-form binary files (e.g. DOS .COM, .SYS)
  ith Intel hex
  srec Motorola S-records
  aout Linux a.out object files
  aoutb NetBSD/FreeBSD a.out object files
  coff COFF (i386) object files (e.g. DJGPP for DOS)
  elf32 ELF32 (i386) object files (e.g. Linux)
  elf64 ELF64 (x86_64) object files (e.g. Linux)
  elfx32 ELFX32 (x86_64) object files (e.g. Linux)
  as86 Linux as86 (bin86 version 0.3) object files
  obj MS-DOS 16-bit/32-bit OMF object files
  win32 Microsoft Win32 (i386) object files
  win64 Microsoft Win64 (x86-64) object files
  rdf Relocatable Dynamic Object File Format v2.0
  ieee IEEE-695 (LADsoft variant) object file format
  macho32 NeXTstep/OpenStep/Rhapsody/Darwin/MacOS X (i386) object files
  macho64 NeXTstep/OpenStep/Rhapsody/Darwin/MacOS X (x86_64) object files
  dbg Trace of all info passed to output stage
  elf ELF (short name for ELF32)
  macho MACHO (short name for MACHO32)
  win WIN (short name for WIN32)

-l
  (小写的L) 参数 可以生成 汇编而二进制文件的对照
  格式 nasm -f bin myfile.asm -l myfile.list

  使用 nasm -h 参看说明

-o
  指定输出的文件名称
  nasm -f elf myfile.asm -o self.o

-i
  指定搜索路径,主要是用在%include 伪指令包含的文件的所搜路径

-d/-D
  添加预定义宏指令
  就相当于在asm 文件前面自动添加一条 %define XXXX 指令
  比如
  nasm myfile.asm -dFOO=100
  作为在文件中写下面一行语句的一种替代实现:
  %define FOO 100

-u/-U
  与上一条相反就是取消一个宏定义

-e
  仅预处理,包括对 宏的展开等,但是不能处理计算任务,所以 如果有 $-tablestart 会报错

-p
  预包含一个文件
  就相当于在asm 文件前面自动添加一条 %include "filename" 伪指令

-M
  产生对应的MAKEFILE文件

-F
  使得输出文件带有调试信息

-g
  使得调试信息有效

-E
  将错误信息输出到文件中

-s
  把出错信息输出到stdout 中

-a
  这是在和IDE集成的时候,取消掉自身的预处理的指令,一般直接用命令行的话是用不到的

-On
  n是数字,指优化的次数,默认是两遍

-t
  TASM兼容模式,用不到

-w
  开启或者关闭某些警告
  格式
  -w+orphan-labels 开启 orphan-labels 的警告
  -w-orphan-labels 关闭 orphan-labels 的警告
  可操作性的类型有
  other any warning not specifially mentioned below (default on)
  macro-params macro calls with wrong parameter count (default on)
  macro-selfref cyclic macro references (default off)
  macro-defaults macros with more default than optional parameters (default on)
  orphan-labels labels alone on lines without trailing `:' (default on)
  number-overflow numeric constant does not fit (default on)
  gnu-elf-extensions using 8- or 16-bit relocation in ELF32, a GNU extension (default off)
  float-overflow floating point overflow (default on)
  float-denorm floating point denormal (default off)
  float-underflow floating point underflow (default off)
  float-toolong too many digits in floating-point number (default on)
  user %warning directives (default on)
  lock lock prefix on unlockable instructions (default on)
  hle invalid hle prefixes (default on)
  bnd invalid bnd prefixes (default on)
  zext-reloc relocation zero-extended to match output format (default on)
  ptr non-NASM keyword used in other assemblers (default on)
  bad-pragma empty or malformed %pragma (default off)
  unknown-pragma unknown %pragma facility or directive (default off)
  not-my-pragma %pragma not applicable to this compilation (default off)
  unknown-warning unknown warning in -W/-w or warning directive (default off)
  all all possible warnings

-v
  打印版本信息

猜你喜欢

转载自www.cnblogs.com/alwaysking/p/12287113.html