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,输入行与另一个文件中指定的行号相关
%! 读取一个环境变量

时间: 2024-08-01 22:48:03

nasm预处理器(4)的相关文章

nasm预处理器(3)

nasm提供一个限定符.nolist,可以包含它到一个宏定义中,这样该宏就不会在列表文件中被展开:限定符 .nolist直接放到参数后面: %macro foo 1.nolist 条件汇编 和C预处理器类似,nasm允许对一段源代码只在某特定条件满足时进行汇编: %if<condition> %elif<condition2> %else %endif %ifdef和 %ifndef 测试单行宏是否存在,在分支测试中也有类似的%elifdef和%elifndef %ifmacro测

nasm预处理器(1)

与处理器将所有以反斜杠结尾的连续行合并为一行. 单行的宏以%define来定义:当单行的宏被扩展后还含有其他宏时,会在执行时而不是定义时展开. %define a(x) 1+b(x) %define b(x) 2*x mov ax,a(8) 会被最终展开为mov ax,1+2*8,但宏b不是在定义宏a时展开的.%define定义宏是大小写敏感的,可以用%idefine来定义大小写非敏感的宏. 如果有嵌套定义的宏,与处理器只会展开第一层,保证不会进入一个死循环. 可以定义重载单行宏: %defin

nasm预处理器(2)

多行宏 %macro: %macro foo 2 push rax push rbx mov rax,%1 mov rbx,%2 pop rbx pop rax %endmacro 宏名称后的数字代表宏参数的个数,宏主体中的%1和%2分别代表实际的参数.使用如下方式调用: foo 0x11,0x22 如果宏参数中包含,号,可以将参数用{}包围起来. %macro foo 2 %2:db %1 %endmacro foo {13,10},crlf ;实际生成的代码为: crlf: db 13,10

什么是 CSS 预处理器?

就CSS本身而言,对于大多数Web前端从业人员来说就不是问题.学过CSS的人都知道,它不是一种编程语言.你可以用它开发网页样式,但是没法用它编程.换句话说,CSS基本上是设计师的工具,不是程序员的工具.在程序员的眼里,CSS是很头痛的事情,它并不像其它程序语言,比如说PHP.Javascript等等,有自己的变量.常量.条件语句以及一些编程语法,只是一行行单纯的属性描述,写起来相当的费事,而且代码难易组织和维护. 很自然的,有人就开始在想,能不能给CSS像其他程序语言一样,加入一些编程元素,让C

CSS预处理器语言sass语法:学习sass语法

文章简介:其实现在的Sass已经有了两套语法规则:一个依旧是用缩进作为分隔符来区分代码块的:另一套规则和CSS一样采用了大括号({})作为分隔符.后一种语法规则又名SCSS,在Sass3之后的版本都支持这种语法规则.我们这里讨论的如无特殊说明,全指scss. 什么是sass? Sass是是一种基于ruby编写的CSS预处理器,诞生于2007年,是最早也是最成熟的一款CSS预处理器语言,它可以使用变量.嵌套.混入.继承,运算,函数等功能,使得CSS的开发,变得简单清晰可维护,同时也大大节省了设计者

学习CSS预处理器:Sass和less进行对比

文章简介:使用Css预处理器唯一真正需要学习的只有语法,SASS是Ruby语言写的,但是两者的语法没有关系.不懂Ruby,照样可以使用.你需要的只是一个像CudeKit的应用来观察和编译你所撰写的文件. Less就更不用了,只需要调用一个js即可(在客户端运行),或者借助Node.js(服务器运行 什么是CSS预处理器? Css可以让你做很多事情,但它毕竟是给浏览器认的东西,对开发者来说,Css缺乏很多特性,例如变量.常量以及一些编程语法,代码难易组织和维护.这时Css预处理器就应运而生了.Cs

C#预处理器指令和字符串处理

一.C# 预处理器指令 在C#编程过程中,如果文件中的代码太长那么就不便于阅读,为此,采用C# 预处理器指令#region来处理代码.#region 是 C# 预处理器指令.#region 是一个分块预处理命令,它主要是用于编辑器代码的分块,在编译时会被自动删除. #region 使程序员可以在使用 Visual Studio 代码编辑器的大纲显示功能时指定可展开或折叠的代码.使用#region和#endregion,将代码写在两者之间就可以了.   public void Insert(str

C#预处理器指令

C#有许多名为预处理器指令的命令.这些命令从来不会被翻译为可执行代码中的命令,但会影响编译过程的各个方面.例如,预处理器可禁止编译器编译代码的某一部分.如果计划发布两个版本的代码,比如基本版本和企业版本,或者针对不同的.NET Framework版本进行编码,就可以使用这些指令.在Anthem.NET的代码中我们经常可以看到这种用法. 预处理器指令的开头都有符号#. 注意: C#中并没有一个像C++那样的独立预处理器,所谓的预处理器指令仍由编译器处理. 下面将对这些指令逐一介绍. 1. #def

using-asp.net 错误 CS1028: 意外的预处理器指令

问题描述 asp.net 错误 CS1028: 意外的预处理器指令 using System;using System.Collections;using System.Configuration;using System.Data;using System.Linq;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.HtmlControls;using System.Web.UI