附件下載:
http://pan.baidu.com/s/1i5R9qO9 密碼:rfgk
80x86微處理器匯編語言編程。學習任何編程語言都免不了要跨越HelloWorld這道坎,面向機器的匯編語言與面向過程/對象的高級語言不同,編碼過程中對寄存器、內存的分配等細節都需要編程人員去關心;而高級語言程序如C語言、C++,即使你不知道printf具體是怎么實現的,只要掌握使用方法即可(封裝成模塊)。C語言的helloworld程序簡單到只有一行執行語句:
printf("Hello,World!"); //在屏幕緩沖區中顯示"Hello,World!"一串字符
而匯編語言的Helloworld,同樣很簡潔,卻讓很多初學者摸不到頭腦;打一個簡單比喻,上面的printf(.....)就好比一把手槍,字符串"Hello,World!"好比子彈,給printf裝上“子彈”就能完成射擊的功能。當然你也可以更換其他子彈.....匯編語言要實現往屏幕緩沖區輸出字符串並顯示,所需做的工作就沒有這么直觀容易理解了。 匯編語言編程,面向的是“寄存器”,寄存器是計算機CPU內部的一種超高速緩存(速度勝過內存數倍,但容量極小),對數據的各種操作都由“指令”來進行,也被稱作匯編指令,比如ADD AX,BX 意思是將寄存器AX與BX的值相加,結果存放到AX;AX/BX都屬於8086通用數據寄存器。更多匯編知識將在以后篇幅中講解。
hello.asm 源程序
1 ;80x86匯編語言<入門程序> 2 ;YPP.20170928 3 ;文件名Hello.asm 4 5 DSEG SEGMENT 6 MESS DB 'Hello,World!' ,0DH,0AH,24H 7 DSEG ENDS 8 9 SSEG SEGMENT PARA STACK 10 DW 256 DUP(?) 11 SSEG ENDS 12 13 CSEG SEGMENT 14 ASSUME CS:CSEG,DS:DSEG 15 BEGIN: MOV AX,DSEG 16 MOV DS,AX 17 MOV DX,OFFSET MESS 18 MOV AH,9 19 20 INT 21H 21 MOV AH,4CH 22 INT 21H 23 CSEG ENDS 24 END BEGIN 25
初學者首先需要知道的是,匯編語言程序由兩個基本元素組成:操作碼、操作數
操作碼,指明要進行的操作,如加、減、乘、除....
操作數,被操作的對象,可以是數字、字符串、存儲單元(變量)等
本文不對代碼細節做過多的解釋,因為需要很多前置知識做鋪墊,才能更好的理解這段代碼。
前置知識包括,二進制數制換算、CPU內存單元尋址、14個16位寄存器組、存儲器分段、中斷機制等等
上面的代碼編輯或復制到記事本中,另存為.asm文件,這是匯編語言的源代碼文件,中間要進行匯編的操作,生成的.obj文件是目標文件,經過鏈接之后,才能形成最終的可執行文件.exe,整個過程與高級語言的運行過程是大致相仿的。
工具有很多,但還是推薦經典的Masm5.0,
注:編寫80x86平台的匯編語言,不要在Win-Vista\7\8.1\10的系統上操作,因為16位程序會出現兼容性問題。
本文均在Windows XP sp3操作系統上編輯、匯編、鏈接、運行.
Masm5.0下載:http://pan.baidu.com/s/1hsjCcRi 密碼:syqo
masm無需安裝,解壓到某磁盤根目錄下,進入DOS操作
Win+R輸入CMD進入DOS,先用DOS命令進入MASM5.0文件目錄下,同時hello.asm源文件也要復制到同一路徑下。
匯編命令格式> masm xxx.asm 回車 注:DOS下不區分大小寫
連續回車,表示使用默認文件名,四個回車下來,會生成Hello.obj文件;如果出現錯誤應當更改源文件后重新匯編,
0 Warning Errors.....表示沒有錯誤。
沒有錯誤后,下一步進行“Link”鏈接,命令格式>link xxx
注:鏈接時要指定文件名,就是剛剛生成的Hello.obj 可以省略后綴,名字不要省略!不然會報錯
link hello 回車 三次回車后,正常情況下會生成Hello.exe 那也就是程序的最終形態,直接輸入hello就運行了這個程序(不要雙擊運行,不然DOS窗口一閃而過看不到執行結果)
HelloWorld字符串被成功輸出出來,這個程序也就完成了
源文件Hello.asm——>目標文件Hello.obj——>可執行文件Hello.exe
這就是整個過程。
另外補充一點,由asm到obj在匯編語言中,這個過程叫做“匯編Assembly”;在高級語言中叫做“編譯Compile”
有的教程中會缺少堆棧段SSEG,沒有堆棧段 在masm中也會報錯,會提示no stack segment要注意。
==========================================================
掃一掃關注微信公眾號[跟着小白兔],及時獲取更多編程、逆向/破解等技術類軟文資訊