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有個特性就是環境變量的第一個字符當做空格(不能是減號)

比如
'!-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
  打印版本信息


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM