第3部分-Linux x86 64位汇编Intel汇编语法二
特殊符号
$和$$是编译器 NASM 预留的关键字,用来表示当前行和本 section 的地址,起到了标号的作用,是 NASM 提供的,并不是 CPU 原生支持的,相当于伪指令一样。
$是编译器给当前行安排的地址,每行都有。
$$指代本 section 的起始地址,此地址同样是编译器给安排的。
nasm 默认全部代码同为一个 section,起始地址为 0。section 也称为节、段,程序中的一小块。
vstart=来修饰后,可以被赋予一个虚拟起始地址 virtual start address
汇编乘法MUL
MUL是进行无符号乘法的指令。MUL(无符号乘法)指令有三种格式:第一种是将8位的操作数于al相乘(乘积位于ax)。第二种是将16位的操作数与ax相乘(乘积位于dx:ax); 第三种是将32位的操作数与eax进行相乘(乘积位于edx:eax)。
7种寻址方式
基址寻址、变址寻址、基址变址寻址,这三种形式中的基址寄存器只能是 bx、 bp,变址寄存器只能是 si、 di。其中 bx 默认的段寄存器是 ds,经常用于访问数据段, bp默认的段寄存器是 ss,它经常用于访问栈。
前缀指令
定义(define)变量时就用5个不同的关键字:DB,DW,DD,DQ,DT
DW(DEFINE WORD)定义一个字(两个字节)长度
DD(DEFINE DOUBLE WORD)定义双字(4个字节)长度
DQ(DEFINE QUARTET WORD)定义四字(8个字节)长度
DT(DEFINE TEN BYTE)定义十字节长度
堆栈
关于栈部分,下篇涉及。