第3部分-Linux x86 64位汇编Intel汇编语法二

第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)定义十字节长度

 

堆栈

    关于栈部分,下篇涉及。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章