NASM汇编语言基础

眉间皱痕 提交于 2020-02-26 06:09:08

    NASM(NetWide Assembler)是可移植性高的80x86汇编器,支持多种目标文件格式。

  • 源代码行格式

    [标号]    [指令]    [注释]
    标号由字母、数字、下划线、点号、问号、~、$、@、#组成,必须以字母、下划线、点号或问号开始,区分字母大小写,后缀冒号可选。标号所辖区域从当前开始直到另一标号开始,以点号开始的标号称局部标号,属于当前非局部标号,可用所属标号限定。
    指令包括计算机支持的机器指令和NASM支持的伪指令,通常由操作码和操作数组成,多个操作数之间用逗号分隔。
    注释以分号开始,直到行尾。

  • 伪指令

1、    定义数据(初始化)
    DB|DW|DD|DQ|DT        <数据>    ;DQ、DT只允许小数,DD可以是小数。
2、    保留空间(未初始化)
    RESB|RESW|RESD|RESQ|REST    <数量>
3、包含二进制文件(插入数据)
    INCBIN    “文件名”[,<跳过字节数>[,最多插入字节数]]
4、定义符号常量
    <符号名>        EQU        <数字>    ;定义后不可修改
5、重复汇编
    TIMES    <次数>        <指令>        ;将指令重复n次

  • 表达式

    表达式主要用来形成操作数,在汇编时计算。其中$和$$分别表示当前汇编地址与汇编起始地址。
1、    常量
    A、    整数:二进制(前缀B)、八进制(前缀Q)、十进制、十六进制(前缀0X或$以及后缀H)。
    B、    小数:数字.[数字][[E|e][+|-]数字]
    C、    字符或字符串:用单引号或双引号括起来,表示数值时,前字符在低字节。
2、    位运算符:|或OR、^或XOR、&或与、<<、>>
3、    算术运算符:+、-、*、/(无符号整数除法)、//(有符号整数除法)、%(无符号整数求余)、%%(有符号整数除法)
4、    单目运算符:+、-、~、SEG(取段地址,非二进制输出时有效)

  • 预处理指令

    预处理指令由预处理器在汇编前进行文本替换及处理,均以百分号开始。
1、    定义宏:无论单行宏还是多行宏,均可相互引用。
    %define    sum(a,b)        a+b    ;带参数的单行宏,可用sum(1,2)
    %define    pi    3.1415926    ;不带参数的单行宏,%idefine定义不区分字母大小写的宏
    %undef    pi                ;取消宏定义,只单行宏有效
    %macro puts     1            ;定义多行宏,可用puts msg
        …                        ;用%n引用参数
    %endmacro
2、    定义宏变量
    %assign    i    3            ;定义宏变量,可用%assign    i    i+1修改i的值
3、    条件汇编
    %ifdef     <macro_name>|%if    <expression>    ;当宏被定义或表达式非0时汇编
           …
    %endif
4、    重复汇编
    %rep        <n>                ;重复汇编多条指令,而TIMES只能重复汇编一条指令
        …
    %endrep
5、    文件包含
    %include    “filename”

  • 汇编指引

    汇编指引用来给汇编器提供汇编指示或引导,以便正确汇编,汇编指引均用方括号括起来。
1、    处理器模式:[BITS 16]或[BITS 32]
2、    定义段:对于纯二进制文件,NASM可识别[SECTION .text]、[SECTION .data]、[SECTION .bbs],其它目标文件需要自定
3、    汇编起始地址:[ORG    <数字>]
其它补充
1、编绎:nasm -f<文件格式> <源代码文件名> -o<输出文件名> -l<列表文件名>

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!