彙編語言編輯、彙編、鏈接、運行的全過程

 爲了理解彙編語言的編輯、彙編、鏈接、運行的全過程,咱們不使用IDE,而是分步驟來進行:編輯器

         須要工具:工具

        1. 文本編輯器(若是有Notepad++或者UltraEdit就更好了)spa

        2.  彙編器(如MASM.exe).net

        3.  鏈接器(對應的link.exe)debug

        

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

 

[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鍵):blog

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

 

       雙擊1.exe文件後,黑色的框框一閃而過,這是很正常的。用cmd.exe來運行1.exe, 也沒有發現什麼結果,由於該程序並無輸出操做,因此天然也就沒有輸出結果了。那要怎麼樣看結果呢?用debug嘛!步驟以下:內存

       有兩點值得注意:get

     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  

       這三條語句是「段」的主體(代碼段的主體)

相關文章
相關標籤/搜索