久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

關于DOS匯編學習的一些經驗

作者:佚名   來源:本站原創   點擊數:  更新時間:2012年01月02日   【字體:

我吧一些學習心得寫在這里,希望 能給于志同道合的人一點幫助,同時也記錄下自己點點滴滴。
 
      首先要有個開發環境。下個MASM6.1X 與MASN5.0   幾百K吧。平常用到了是MASM  LINK    ML  DEBUG   。
    我簡單介紹下MASM 匯編編譯器,吧匯編代碼編譯成2進制目標代碼

                       LINK   模塊連接器     
                       ML是一種自動調用MASM與LINK的程序
                       DEBUG   調試用的
     我簡單寫個匯編代碼    aa.asm
       DATA SEGMENT
        AA  DB   'WWWWWWWW','$'
       DATA ENDS
       CODE SEGMENT 'CODE'
              ASSUME CS:CODE ,DS:DATA
      START:
            MOV AX,DATA
            MOV DS,AX        ;代碼段的地址
            LEA  AX, AA     
            MOV DS ,AX       
            INT 21H       
           MOV AX,4C00H    ;結束   
           INT 21H     
      CODE ENDS
       END   START
 

用MASM   aa.asm  編譯成模塊  aa.obj   然后用link  aa.obj   
這時會報錯  error LNK1123: failure during conversion to COFF: file invalid or corrupt 
  這我 查了資料下面是原話: 
   Windows平臺下,源代碼編譯出來的obj主要有兩種格式:OMF和COFF,其中,OMF格式是原來IBM(好像是吧,不記得了)使用的格式,而COFF格式則是從微軟從UNIX移植過來的,因為微軟公司開發Windows的軟件工程師大多對UNIX很熟,所以自然而然的采用了類似UNIX COFF的這種Win32 COFF格式(和UNIX的"純種"COFF是有區別的,但仍然叫COFF格式)
   這個也差點讓我斷下接下去的路。  解決辦法就是弄個16位的連接器,  這里MASN5.0就起做用了,你最好是吧里面link.exe改成link16.exe
 然后link16  aa.obj這樣就編譯成exe文件了,然后在DOS中直接aa.exe就可以看到結果了。
    可能我省略了一些細節問題。就是打開DOS打MASM沒反應,那么這既是你沒設置環境變量得關系。如果你學過JAVA就應該知道,在系統設置 --環境變量中  --PATH  在里面加上你這些工具的目錄就行,或者在DOS理直接設置set PATH= MASM所在的路徑,這個在DOS退出設置就會沒了。  至于為什么這么做,我簡單說下,程序是死的,你必須讓電腦知道你的MASM工具在哪,dos默認是在PATH系統環境變量中去尋找你敲的,你一旦設置了,那么久直接啟動MASM,那么你可以敲命令了。
       還有個你編譯匯編文件時,你得確保DOS所在目錄在你源碼文件目錄里,我的CMD默認C:\Documents and Settings\Owner>如果我直接masm  c:\test\aa.asm那么生成的aa.obj就在C:\Documents and Settings\Owner里,為了防止這個,就必須  cd c:\test\ 進入 
 然后顯示c:\test\> 這是你輸入masm aa.asm 那么aa.obj就在aa.asm在同個目錄了。這些就是新手不了解的,因為我曾經搞過一段時間的JAVA但是也折騰了很長時間才找到的。
      環境好了后,就可以開始學習了。
     學習的時候,可能你和我一樣會看到 有些代碼
       .modle small
        .data
       .code
       .startup
           |
       .exit 0
       end
     其實這個和上面同時匯編,只是寫的模式不一樣。   所以不用懷疑再到處找資料,我也是看完才知道的,因為有linux匯編,我還以為有幾種匯編,所以才有2中不同模式。
      匯編的學習,其實沒有想象中的那么復雜,關鍵是理解。 記住每個寄存器的作用。  還有看不懂原理的時候也要多次看加深印象。     像內存的分配圖和程序怎么裝載的。這些雖然不影響程序的編寫,但是對于理解操作系統的運轉是很重要的。  常常我們為太多的匯編指令而頭疼,其實沒必要記,學會查,下個匯編指令手冊,一遍看程序一遍查,用多了就記住了。    匯編他有自己的格式,我們寫的時候必須要規范。  比如
匯編開始的時候都會有mov  ax, data   mov ds,ax   首先DS是指存放數據寄存器的段地址的寄存器,然后你就知道這步其實是告訴程序數據的地址。但是沒看到其他的地址,那么你查資料就會知道  其他的可以不用寫。因為  stack 有個segment stack   已經定位好了堆棧,至于代碼的地址,如果看程序如何裝載到內存中的,那么你就知道這個是系統來設置的,不用我們再手動去定位了。   學習的時候如果你不知道寫什么,那么你多看看上面的例子,例子看完了,自己就脫離這些例子來寫,多練掌握很快的。
     當匯編有一定基礎,你就可以開始進行DOS匯編了,所謂DOS匯編就是利用匯編基本語法來進行DOS程序的編寫。這個或許剛學的人搞不透,其實很簡單的。首先你要有BIOS中斷手冊,上面的int  21h什么的都是中斷,至于什么意思,你查手冊。你想做什么功能呀是到手冊上找相應的中斷提供和一些數據的怎么在寄存器上定義的。  然后多寫寫就可以了。 我有一篇就講了下這其中是怎么實現的。
   到此我吧一些心得寫完了,至于具體的看個人。

關閉窗口

相關文章

主站蜘蛛池模板: 亚洲精品久久久久久久久久久 | 日韩视频精品在线 | 亚洲精品在线看 | 91精品一区二区三区久久久久久 | 四虎影视1304t| 在线日韩视频 | 久久久久综合 | 天天操天天干天天透 | 欧美精品欧美精品系列 | 久久久九九 | 国产成人网 | 日本手机看片 | 日本亚洲精品成人欧美一区 | 国产精品二区三区在线观看 | 久精品久久 | 一二三四在线视频观看社区 | 国产成人福利在线观看 | 久久久久久久久久久成人 | 色网在线观看 | 超碰成人在线观看 | 亚洲三级在线 | 精品国产欧美一区二区 | 成人免费福利 | 很很干很很日 | 91亚洲精品在线 | 色综合九九 | 国产成人精品亚洲日本在线观看 | 精品国产一区二区三区四区在线 | 成人在线欧美 | 成人福利在线视频 | www.亚洲一区二区 | 国产精品视频一二三区 | 欧美一级做a爰片免费视频 国产美女特级嫩嫩嫩bbb片 | 欧美网站一区二区 | 日韩av一区二区在线观看 | 成人在线免费观看视频 | 99re国产精品 | 大陆一级毛片免费视频观看 | 久夜精品 | 国产线视频精品免费观看视频 | 99re在线播放|