匯編語言編輯、匯編、連接、運行的全過程


 為了理解匯編語言的編輯、匯編、連接、運行的全過程,我們不使用IDE,而是分步驟來進行:

         需要工具:

        1. 文本編輯器(如果有Notepad++或者UltraEdit就更好了)

        2.  匯編器(如MASM.exe)

        3.  連接器(對應的link.exe)

        

        為了省略盤符轉換,我在電腦的F盤中建立了myASM這個文件夾,並把Windows系統的cmd.exe復制到了該文件夾中,另外,把下載好的MASM.exe和LINK.exe都復制到該文件夾中,在myASM下建立一個文本文件1.txt, 改其名為1.asm, 在1.asm中輸入如下程序並保存

 

[plain]  view plain  copy
 
  1. assume cs : xxx  
  2. xxx segment  
  3.   
  4. mov ax, 2  
  5. add ax, ax  
  6. add ax, ax  
  7.   
  8. mov ax, 4c00H  
  9. int 21H  
  10.   
  11. xxx ends  
  12. end   

 

         點擊cmd.exe, 然后輸入masm, 按enter, 進入了masm的界面,然后按下圖輸入(有時需要按enter鍵):

       在myASM文件夾下生成了1.obj文件盒1.exe文件(注意:由於該程序只有代碼段,沒有棧段,故有no stack segment這個提示)。

 

       雙擊1.exe文件后,黑色的框框一閃而過,這是很正常的。用cmd.exe來運行1.exe, 也沒有發現什么結果,因為該程序並沒有輸出操作,所以自然也就沒有輸出結果了。那要怎么樣看結果呢?用debug嘛!步驟如下:

       有兩點值得注意:

     1. u命令表示將內存中的機器指令轉為匯編指令(至於g命令的作用,前面已經說過了)

     2. 要輸入debug 1.exe. 如果輸入debug 1, 則會出錯

     3. 在沒有學會輸出操作之前,以上方法是查看結果的好方法

 

     下面,我們來對上述程序進行解釋:

     1.

 

[cpp]  view plain  copy
 
  1. xxx segment  
  2. ...  
  3. xxx ends  

     segment和ends(不是end)是一對偽指令,用來定義一個“段”,具體是什么“段”由偽指令assume來指定。比如assume cs : xxx 指定的是代碼段(code segment)

 

    

     2. end偽指令是一個匯編語言結束的標記,碰到end, 則停止匯編

     

     3. 

 

[plain]  view plain  copy
 
  1. mov ax, 4c00H  
  2. int 21H  

       這兩條語句的功能是程序返回

 

 

     4. 

 

[plain]  view plain  copy
 
  1. mov ax, 2  
  2. add ax, ax  
  3. add ax, ax  

       這三條語句是“段”的主體(代碼段的主體)

 


免責聲明!

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



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