8086匯編語言入門-HelloWorld


附件下載:

    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要注意。

 ==========================================================

掃一掃關注微信公眾號[跟着小白兔],及時獲取更多編程、逆向/破解等技術類軟文資訊

        

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM