8086組合語言入門-HelloWorld

來源:互聯網
上載者:User

標籤:erro   入門   技術   相容性問題   緩衝   分段   大小寫   連結   資訊   

附件下載:

    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    ENDS12 13 CSEG    SEGMENT14         ASSUME  CS:CSEG,DS:DSEG15 BEGIN:  MOV AX,DSEG16         MOV DS,AX17         MOV DX,OFFSET MESS18         MOV AH,919 20         INT 21H21         MOV AH,4CH22         INT 21H23 CSEG    ENDS24         END  BEGIN25    

 

 

 

初學者首先需要知道的是,組合語言程式由兩個基本元素組成:作業碼、運算元

作業碼,指明要進行的操作,如加、減、乘、除....

運算元,被操作的對象,可以是數字、字串、儲存單元(變數)等

本文不對代碼細節做過多的解釋,因為需要很多前置知識做鋪墊,才能更好的理解這段代碼。

前置知識包括,位元制換算、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要注意。

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

掃一掃關注公眾號[Cracker之家],及時擷取更多編程、逆向/破解等技術類軟文資訊

        

 

8086組合語言入門-HelloWorld

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.