x86筆記 第 3 章 組合語言和彙編軟體

2021-10-02 19:08:39 字數 1183 閱讀 6988

指令和被指令引用的資料在記憶體中都是一些或高或低的電平,每乙個電平都可以看成是乙個二進位制位(0 或者 1),8個二進位制位形成一位元組。

要解讀記憶體中的東西,最好的辦法就是將它們按位元組轉換成數字的形式。

比如,下面這些數字就是存放在記憶體中的8086指令,我們用的是十六進製制:

b8 3f 00 01 c3 01 c1

即使是很有經驗的技術人員,要想用這種方式來編寫指令,也是很困難的,而且很容易出錯。所以,在第乙個處理器誕生之後不久,為了克服機器指令難以書寫和理解的缺點,人們想到可以用一些容易理解和記憶的符號,也就是助記符,來描述指令的功能和運算元的型別,這就產生了組合語言(assembly language)

這樣,上面那些指令就可以寫成:

mov ax,3fh

add bx,ax

add cx,ax

組合語言對指令的大小寫沒有特別的要求。所以你完全可以這樣寫:

mov ax,3fh

mov ax,3fh

mov ax,3fh

mov ax,3fh

在很多高階語言中,如果要指示乙個數是十六進製制數,通常不採用在後面加「h」的做法,而是為它新增乙個「0x」字首。像這樣:

mov ax,0x3f

在組合語言中,使用十進位制數是最自然的。因為 3fh 等於十進位制數 63,所以你可以直接

這樣寫:

mov ax,63

mov ax,00111111b

一定要看清楚,在那串「0」和「1」的組合後面,跟著字母「b」,以表明它是乙個二進位制數。

每種處理器都可能會有自己的組合語言編譯器,而對於同一款處理器來說,針對不同的平台(比如 windows 和 linux),也會有不同版本的組合語言編譯器。

現存的組合語言編譯器有多種,用得比較多的有 masm、fasm、tasm、as86、gasm等,每種彙編器都有自己的特色和侷限性。特別是,有些還需要付費才能使用。不同於前面所列舉的這些,在本書中,我們用的是另一款叫做 nasm 的組合語言編譯器。

組合語言 基於X86 學習筆記

1.機器語言 machine language 是一種數字語言,專門設計成唄計算機處理器 cpu 理解。所有x86處理器都理解的共同機器語言。2.組合語言 assembly language 包含助記符書寫的語言。3.組合語言與機器語言是一一對應 one to one 的關係。4.彙編器 assem...

x86組合語言學習筆記2

乙個簡單的組合語言程式 data sum dword 0 code main proc mov eax,5 add eax,6 mov sum,eax invoke exitprocess,0 main endp 加法指令 add 減法指令 sub 加一指令 inc 減一指令 dec 取補指令 ne...

x86組合語言指令集

一 資料傳輸指令 8088 彙編跳轉 cmp a,b 比較a與b mov a,b 把b的值送給a ret 返回主程式 nop 無作用,英文 no operation 的簡寫,意思是 do nothing call 呼叫子程式 je 或jz 若相等則跳 jne或jnz 若不相等則跳 jmp 無條件跳 ...