本教程將會通過一個一個例子來教會大家如何寫匯編程序隐砸,今天就從最簡單的加法程序開始。(本文只為了讓讀者能容易理解并自己寫出程序吏颖,所以語言簡化搔体,并不具有專業(yè)性和權威性,具體解釋請自己參考文獻半醉,同時也多包涵文中出現的學術性錯誤)
首先是本程序要實現的是兩個數x,y相加疚俱,然后把結果,存到z里缩多。
先給出程序 的源碼:
datas segment
x dw 1234h
y dw 5678h
z dw ?
datas ends
codes segment
assume cs:codes,ds:datas
start:
mov ax,datas
mov ds,ax
mov ax,x
add ax,y
mov z,ax
mov ah,4ch
int 21h
codes ends
end start
我們來逐條分析一下這個程序呆奕。
datas segment
一開始這一個預算是定義數據段的開始,這個datas
是可以自己隨便寫的衬吆,但是為了方便理解我們就用數據的英語梁钾,這個segment
是固定格式不能亂改。
在這條代碼后面就開始我們的變量的定義逊抡,變量定義的格式是:
[變量名] [db,dw,dd] 表達式1姆泻,表達式2.....
變量名就類似于C語言的中int x=10;
中的x,是編程人員自己定義的冒嫡。第二參數相當于其中的int是定義數據類型的拇勃,db是定義字節(jié),dw是定義字孝凌,dd是定義雙字方咆,這些都是表示這個變量的長度。表達式就是其中的10蟀架,就是傳入參數瓣赂,可以是二進制,八進制辜窑,十進制钩述,十六進制。如果不確定的可以輸入穆碎?。比如這個代碼中的z dw ?
就相當于C語言中的int z;
最后把所以變量定義完了后职恳,就要用datas ends
來結束定義所禀,注意這個datas必須和你定義數據段開頭的段名一致方面。
然后就是定義代碼段了,首先codes segment
和上面一樣色徘,codes是可以自己定義的恭金,但后面ends前面的一定要一樣,然后assume cs:codes,ds:datas
就是把代碼段和數據段放進段寄存器中,這段代碼的具體意思就是褂策,把codes段放進CS這個寄存器里横腿,吧datas段放進ds寄存器里,assume是固定格式斤寂,不能改變和刪除耿焊。
這條代碼寫完后,就是開始我們正式的指令的書寫遍搞,先寫start:
這就表示代碼的開始罗侯。
mov ds,ax
這個也是固定格式,是為了把數據取出來溪猿,其中datas就是數據段的段名钩杰。接下來的代碼主要用的是mov指令,就是把后面的數據傳輸到前面的指令诊县。在寫完代碼后要寫
mov ah,4ch
int 21h
來結束程序讲弄,也是固定格式,不能改變依痊。
結束程序后垂睬,用codes ends來結束代碼段,最后在末尾填上end start一個完整的程序就寫完了抗悍。寫完后就可以編譯和鏈接來生成exe文件驹饺,具體的方法可以參考這篇文章。
最后祝大家身體健康缴渊。