nasm预处理器(4)

简介:

nasm定义了一套标准宏,当开始处理源文件时,这些宏都已经被定义了,如果希望程序在执行前没有预定义的宏存在,可以使用%clear清空预处理器的一切宏。

__NASM_MAJOR__ 主版本号
__NASM_MINOR__ 次版本号
__NASM_SUBMINOR__ 子次版本号
__NASM_PATCHLEVEL__ 补丁号
__NASM_VERSION_ID__ nasm版本id
__NASM_VER__ nasm版本字符串
__FILE__ 文件名
__LINE__ 行号

STRUC 和 ENDSTRUC 声明一个结构数据类型:

struc my_type
    long:resd 1
    word:resw 1
    ten_byte:resb 10
    str:resb 32
endstruc

如果要在多个结构体中定义相同的元素可以这样定义:

struc my_type
    .long:resd 1
    .word:resw 1
endstruc

由于nasm没有内部结构体支持,所以不支持以句点形式引用结构体中的成员,因此mov ax,[type_val.word]是非法的;.word是一个常数,正确语法为:

mov ax,[type_val+word]
;或者
mov ax,[type_val+my_type.word]

下面是如何定义一个结构的变量:

type_val: 
istruc my_type
    at .long,dd 0x12345678
    at .word,dw 1024
iend

数据对齐align和alignb
%line操作符用来通知nasm,输入行与另一个文件中指定的行号相关
%! 读取一个环境变量

相关文章
|
21天前
|
存储 编译器 程序员
C编译环境和预处理(非常详细,建议收藏)
C编译环境和预处理(非常详细,建议收藏)
41 0
|
7月前
|
存储 缓存 并行计算
[Eigen中文文档] 预处理器指令
可以通过定义预处理器宏来控制Eigen的某些方面。这些宏应该在包含任何Eigen头文件之前定义。通常最好在项目选项中设置它们。 本页面列出了Eigen支持的预处理器指令。
131 0
|
10月前
|
自然语言处理 编译器 程序员
文件编译和预处理
文件编译和预处理
61 0
|
NoSQL 编译器 Linux
【三、深入浅出GCC编译器】一个源文件到可执行文件是如何生成的:GCC编译工具链及编译参数详解(三)
【三、深入浅出GCC编译器】一个源文件到可执行文件是如何生成的:GCC编译工具链及编译参数详解
241 0
【三、深入浅出GCC编译器】一个源文件到可执行文件是如何生成的:GCC编译工具链及编译参数详解(三)
|
Linux C语言 C++
嵌入式Linux C(十)——编译预处理
嵌入式Linux C(十)——编译预处理
134 0
嵌入式Linux C(十)——编译预处理
|
编译器 C语言 C++
Makefile中常见的gcc编译参数
Makefile中常见的gcc编译参数
333 0
编译doubango时,ffmpeg先用 2.8.15,再用4.2.2
编译doubango时,ffmpeg先用 2.8.15,再用4.2.2
70 0
编译ffmpeg没有生成编译后ffplay
编译ffmpeg没有生成编译后ffplay
207 0
|
编译器 C#
C#编程-82:编译预处理_
C#编程-82:编译预处理_
C#编程-82:编译预处理_