第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)定義十字節長度
堆棧
關於棧部分,下篇涉及。