天天看點

Win32彙編源程式的結構(1)

      羅雲彬的彙編書籍确實比較入門,前面兩章把打下一些基礎、環境配置完畢,後面的内容輕松許多了!

      “麻雀雖小,五髒俱全”,多經典的一句話!簡單的一個Hello World來很清楚的說明了Win32彙程式設計式的架構。

1、 Win32彙編源程式的結構

任何種類的語言,總是有基本的源程式結構規範,在讨論C語言的書中,大家都會記得這個非常經典的Hello World程式:

#include <stdio.h>

int main()

{

printf("Hello,world!/n");

return 0;

}

像這樣一個程式,就說明了C語言中最基本的格式,main()中的括号和下面的花括号說明了一個函數的定義方法,printf語句說明了一個函數的調用方法,調用函數語句後面的分号也是基本的格式。C是一種進階語言,在C源程式中,不必為堆棧段、資料段和代碼段的定義而擔心,編譯器會把程式中的字元串和語句代碼分别放到它們該去的地方,程式開始執行的時候也會自己找到main()函數。而彙編是低級語言,必須為所有的東西找到它們該去的地方,是以在DOS的彙編中,Hello World又長成了這樣一副模樣:

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

; 堆棧段

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

stack              segment stack

                   db        100 dup (?)

stack              ends

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

; 資料段

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

data               segment

szHello            db        'Hello, world',0dh,0ah,'$'

data               ends

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

; 代碼段

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

code               segment

                   assume    cs:code,ds:data,ss:stack

start:

                   mov       ax,data

                   mov       ds,ax

                   mov       ah,9

                   mov       dx,offset szHello

                   int       21h

                   mov       ah,4ch

                   int       21h

code               ends

                   end       start

在這個源程式中,stack段為堆棧找了個家,hello world字元串則跑到資料段中去了,代碼則放在代碼段中,程式的開始語句必須由最後一句end start來說明應該從start這個标号開始執行,整個程式在使用過DOS彙編的程式員眼裡是非常的熟悉。

到了Win32彙編的時候,程式的基本結構還是如此,先來看一看這個看起來很新鮮的Win32的Hello world程式:

    怎麼樣,看來和上面的C以及DOS彙編又不同了吧!但從include,.data和.code等語句“顧名思義”也能看出一點苗頭來,include應該就是包含别的檔案,.data想必是資料段,.code應該就是代碼段了吧!接下來通過這個例了程式逐段介紹Win32彙程式設計式的結構。

繼續閱讀