如何用MASM5.0使用方法及附版本號
Masm5.0是一款DOS下匯編工具包,包含瞭MASM、LINK、EDIT、DEBUG、DEBUG32等程序,可謂是匯編者的利器,支持win7 64位操作系統,有需要的不要錯過。
如果是64位的系統需要按照dosbox
Masm5.0(windows x64位系統下匯編語言環境配置工具集合) 64位/32位
- 類型:編程工具
- 大小:2.9MB
- 語言:簡體中文
- 時間:2021-11-02
查看詳情
1.首先下載與安裝DOSBOX,GuideAH提供的文件包裡面都有,它的作用就是讓你在64位下使用32、16位的軟件。如果不使用DOSBOX就會出現程序不兼容的對話框。
開始安裝:
雙擊打開DOSBox軟件,按步驟進行安裝,安裝目錄任選,不過由於C盤是系統盤,所以最好安裝在其他盤裡;
安裝成功後打開DOSBox, 我們就可以看到一個非常熟悉的界面瞭,和電腦裡的命令提示符DOS窗口差不多: (註意:由於它的兩個窗口是在一起作用的,所以使用的時候不要關掉其中的任一個窗口)
安裝完DOSBox後,我們就能運行匯編後的程序瞭
打開DOSBox後,我們可以看到Z : \ >,這是DOSBox裡的虛擬盤,我們可以采用mount命令將其轉變到自己的D盤: mount d d:\masm
這裡,我在D盤建立瞭一個文件夾masm,作為自己做匯編實驗的文件存放位置;使用該命令後,d符號也就虛擬成瞭自己本地電腦的d:\masm目錄;這時候在DOSBOX裡面輸入d:\其實是打開電腦裡面的D:\masm
但是每次打開DOSBOX都要輸入太麻煩,所以:開始——>所有程序——>DOSBox文件——>
打開DOSBox 0.74 Options,在打開的文本裡找到[autoexec](應該會在文本的最後位置),根據你自己做匯編實驗的文件夾所在路徑進行相應的設置,在;[autoexec]項的末尾寫上上面的兩條命令:
以我的文件路徑為例:
mount d: d:\masm
d:
2、然後將自己在網上下載的DEBUG32.exe和masm5.0中的所有東西(包括masm.exe,link.exe等等)都放在d:\masm 文件夾下。
這時候打開DOSBOX就可以直接輸入:DEBUG32 使用DEBUG 瞭。
直接輸入masm 就可以用MASM進行編譯瞭,Link也一樣。
3、一些人在使用這種方法使用MASM的時候會出現unable to open input file 這個錯誤,是匯編時找不到源文件。
以我的為例,我將我的1.ASM文件放在D:\MASM\WYX這個文件夾下。如果編譯的時候用
Object Modules [.OBJ]:D:\MASM\WYX\1
就會出現上面的錯誤提示。
正確的應該是
Object Modules [.OBJ]:D:\wyx\1
這是因為DOSBOX虛擬D:\masm盤為系統盤,在DOSBOX直接輸入D:\其實是進入瞭你電腦的D:\masm
預先在E:\masm5.0\MYDOC目錄下寫好hello.asm文件:
DATA SEGMENT BUF DB 'HELLO WORLD! THIS IS MY FIRST ASM FILE! $' DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX LEA DX,BUF MOV AH,09 INT 21H MOV AH,4CH INT 21H CODE ENDS END START
首先,進入masm5.0所在路徑(裝入-連接-運行-調試均在masm5.0所在目錄中進行)
(我這裡masm5.0所在路徑是E:\masm5.0\)
Winkey+R — cmd —e:——cd masm5.0
1、裝入
格式:masm asm源文件及路徑1 obj文件目標路徑2(省去則默認當前路徑)
如:E:\masm5.0>masm .\MYDOC\hello.asm .\MYDOC\
結果:程序無錯則在E:\masm5.0\MYDOC中增加文件HELLO.OBJ
2、連接
格式:link obj文件路徑1
如:E:\masm5.0>LINK .\MYDOC\HELLO.OBJ
(此後當前目錄就會出現HELLO.EXE)
3、運行
格式:exe文件全名(即 "HELLO.EXE")
如:E:\masm5.0> HELLO.EXE
4、調試
-u 反匯編
-r 顯示寄存器內容
-g [=address1][address2][address3] 執行到斷點行,如:-g 12 為執行到第12行
-t [=address][value] 跟蹤,配合-g使用 如:-t 12 1 為從第12行開始,每執行1條指令後停下來
-d 查看數據
-q 退出返回操作系統
上圖中,
首先,-u 反匯編整個 hello.exe ;
然後-g 9 ,讓程序執行到 第9行停下來;再用-t 跟蹤,每執行一條指令停下來;
最後,連續-t跟蹤瞭3次後輸入-q退出程序。
匯編masm5.0編譯器編譯匯編文件名時,
有時可能出現 Unable to open input file:bcd2ascii.asm 的錯誤,可是代碼文件確實存在。
這時,可以考慮兩個問題,
第一:文件拓展名有沒有改過來,因為win7下會自動隱藏拓展名(除非設置過);
第二:是文件的名字系統的差別造成的,windows現在可以支持非常復雜的命名,
在cmd下也可以看到這些命名,但當執行debug,masm等程序時,系統將啟動ntvdm,
這是一個nt系統下的vdm,虛擬設備管理,就是一個16位的虛擬機,
此時,ntvdm下的cmd嚴格執行8.3命名,這時隻需要修改文件名,
主文件名8個字符以內,擴展名為asm就可以瞭
MASM使用方法及版本號
匯編語言的實現也是先利用某種編輯器編寫匯編語言源程序(*.ASM),然後經過匯編得到目標模塊文件(*.OBJ)、連接後形成可執行文件(*.EXE)。
1、匯編語言程序的語句格式
匯編語源程序由語句序列構成。語句一般由分隔符分成的四個部分組成,它們有兩種格式:
(1)執行性語句——由硬指令構成的語句,它通常對應一條機器指令,出現在程序的代碼段中:
標號:硬指令助記符 操作數,操作數 ;註釋
(2)說明性語句——由偽指令構成的語句,它通常指示匯編程序如何匯編源程序:
名字 偽指令助記符 參數,參數,… ;註釋
◆執行性語句中,冒號前的標號反映該指令的邏輯地址;說明性語句中的名字可以是變量名、段名、子程序名或宏名等等,既反映邏輯地址又具有自身的各種屬性。標號和名字很容易通過是否具有冒號來區分。
◆硬指令助記符可以是任何一條處理器指令,也可以是一條宏指令,偽指令助記符主要完成一些不產生CPU動作的說明性工作,在程序執行前由匯編程序完成處理。
◆處理器指令的操作數可以是立即數、寄存器和存儲單元。偽指令的參數可以是常數、變量名、表達式等,可以有多個,參數之間用逗號隔開。
◆語句中由分號開始的部分是註釋。
2、匯編語言源程序
這個以前已經學過,主要有簡化段定義格式和完整段定義格式
3、宏匯編程序MASM
MASM6.11,安裝文件5張軟盤,默認安裝在C:\MASM目錄下,完整的MASM匯編系統包含很多文件,但最基本的有如下幾個:
ML.EXE 匯編程序
ML.ERR 匯編錯誤信息文件
DOSXNT.EXE MS-DOS擴展文件
LINK.EXE 連接文件
LIB.EXE 子程序庫管理文件
如果采用集成開發環境PWB,主要涉及如下文件:
PWWB.EXE 程序員工作平臺
NMAKER.EXE 工程維護程序
NMAKE.EXE nmaker的MS-DOS擴展驅動程序
CV.EXE 源代碼調試器CodeView
CVPACK.EXE 調試信息壓縮器,它為CODEVIEW準備一個可執行文件
HELPMAKE.EXE 幫助文件維護程序
BSCMAKE.EXE 瀏覽數據庫創建程序
SBRPACK.EXE 瀏覽信息程序
PWBRMAKE.EXE BSCMAKE兼容驅動程序
*.MXT 各種PWB擴展工具文件
*.XXT 各種語言的PWB擴展文件
4、匯編語言的命令行開發過程
(1)原程序的編寫
用編輯軟件書寫*.asm源程序,如
LI6-1.ASM
;LI6-1.ASM
.MODEL SMALL
.STACK
.DATA
STRING DB ‘Hello,Everybody!’
.CODE
.STARTUP
MOV DX,OFFSET STRING
MOV AH,9
INT 21H
.EXIT 0
END
(2)原程序的匯編
匯編是將原程序翻譯成由機器代碼組成的目標模塊文件的過程,如下:
ML /c LI6-1.ASM
如果源程序沒有語法錯誤,則生成一個目標模塊文件LI6-1.OBJ
(3)目標文件的連接
連接程序能把一個或多個目標文件和庫文件和成一個可執行文件(.EXE、.COM文件),如下:
LINK LI6-1.OBJ
連接程序的一般格式:
LINK [/參數選項] OBJ文件列表 [EXE文件名,MAP文件名,庫文件][;]
連接程序可以將多個模塊文件連接起來,形成一個可執行文件;多個模塊文件用“+”分隔。給出EE文件名就可以替代與第一個模塊文件名相同的缺省名。給出MAP文件名將創建連接映像文件,否則不生成映像文件。庫文件是指連接程序需要的子程序庫等。“;”表示采用缺省值
事實上,ML匯編程序可以自動調用LINK連接程序(ML表示MASM和LINK),實現匯編和連接依次進行,如下即可完成可執行文件的生成:
ML LI6-1.ASM
ML的命令行格式如下:
ML [/參數選項] 文件列表 [/LINK連接參數選項]
參數選項如下(註意參數是大小寫敏感的):
/AT——允許tiny存儲模式(創建一個COM文件)
/c——隻匯編源程序,不進行自動連接
/fl 文件名——川建一個匯編列表文件(擴展名LST)
/Fr 文件名——創建一個可在PWB下瀏覽的.SBR源瀏覽文件
/Fo 文件名——根據指定的文件名生成模塊文件,而不是采用缺省名
/Fe 文件名——根據指定的文件名生成可執行文件,而不是采用缺省名
/Fm 文件名——創建一個連接映像文件(擴展名MAP)
/I 路徑名——設置需要包含進(INCLUDE)源程序的文件的所在路徑
/Sg——在生成的文件列表文件中,列出由匯編程序產生的指令
/Sn——在創建列表文件時不產生符號表
/Zi——生成模塊文件時,加入調試程序CODEVIEW需要的信息
/Zs——隻進行語法檢查,不產生任何代碼
/LINK——傳遞給連接程序LINK的參數
列表文件是一種文本文件,含有源程序和目標代碼,創建列表文件,輸入如下命令:
ML /Fl /Sg LI6-1.ASM
該命令除產生模塊文件LI6-1.OBJ和可執行文件LI6-1.EXE,還產生列表文件LI6-1.LST,采用/Sg,如果源程序具有.STARTUP、.EXIT偽指令以及流程控制偽指令.IF、.WHILE等,將在列表文件中得到相應的硬指令;否則列表文件隻給出上述偽指令。LI6-1.LST如下:
li6-1.lst
Microsoft (R) Macro Assembler Version 6.11 08/10/05 14:09:13
li6-1.asm Page 1 – 1
;LI6-1.ASM
.MODEL SMALL
.STACK
0000 .DATA
0000 48 65 6C 6C 6F 2C STRING DB ‘Hello,Everybody!’
45 76 65 72 79 62
6F 64 79 21
0000 .CODE
.STARTUP
0000 *@Startup:
0000 BA —- R * mov dx, DGROUP
0003 8E DA * mov ds, dx
0005 8C D3 * mov bx, ss
0007 2B DA * sub bx, dx
0009 D1 E3 * shl bx, 001h
000B D1 E3 * shl bx, 001h
000D D1 E3 * shl bx, 001h
000F D1 E3 * shl bx, 001h
0011 FA * cli
0012 8E D2 * mov ss, dx
0014 03 E3 * add sp, bx
0016 FB * sti
0017 BA 0000 R MOV DX,OFFSET STRING
001A B4 09 MOV AH,9
001C CD 21 INT 21H
.EXIT 0
001E B8 4C00 * mov ax, 04C00h
0021 CD 21 * int 021h
END
Microsoft (R) Macro Assembler Version 6.11 08/10/05 14:09:13
li6-1.asm Symbols 2 – 1
Segments and Groups:
N a m e Size Length Align Combine Class
DGROUP . . . . . . . . . . . . . GROUP
_DATA . . . . . . . . . . . . . 16 Bit 0010 Word Public ‘DATA’
STACK . . . . . . . . . . . . . 16 Bit 0400 Para Stack ‘STACK’
_TEXT . . . . . . . . . . . . . 16 Bit 0023 Word Public ‘CODE’
Symbols:
N a m e Type Value Attr
@CodeSize . . . . . . . . . . . Number 0000h
@DataSize . . . . . . . . . . . Number 0000h
@Interface . . . . . . . . . . . Number 0000h
@Model . . . . . . . . . . . . . Number 0002h
@Startup . . . . . . . . . . . . L Near 0000 _TEXT
@code . . . . . . . . . . . . . Text _TEXT
@data . . . . . . . . . . . . . Text DGROUP
@fardata? . . . . . . . . . . . Text FAR_BSS
@fardata . . . . . . . . . . . . Text FAR_DATA
@stack . . . . . . . . . . . . . Text DGROUP
STRING . . . . . . . . . . . . . Byte 0000 _DATA
0 Warnings
0 Errors
◆列表文件有兩部分內容。在第一部分源程序中,最左列是數據或指令在該段從0開始的相對偏移地址,向右依次是指令的機器代碼字節個數、機器代碼和匯編語言語句。機器代碼後有字母"R"表示該指令的立即數/位移量現在不能確定或是隻是相對地址,它將在程序連接或進入主存時才能定位。帶有“*”的處理器指令是由前面一條偽指令產生的,采用/Sg選項時的列表文件才羅列。如果陳序中有錯誤(ERROR)或警告(WARMING),也會會在相應位置提示。
列表文件的第二部分是標示符使用情況。對段名和組名給出他們的名字(NAME)、尺寸(Size)、長度(Length)、定位(Align)、組合(Combine)和類別(Class)屬性;對符號給出他們的名字、類型(Type)、數值(Value)和屬性(Attr)。采用簡化段定義格式,有許多匯編系統的預定義標示符,例如@DATA等。
◆映像文件也是一種文本文件,含有每段在存儲器中的分配情況。如下命令創建:
ML /Fm LI6-1.ASM
將產生LI6-1.MAP映像文件,如下:
LI6-1.MAP
Start Stop Length Name Class
00000H 00022H 00023H _TEXT CODE
00024H 00033H 00010H _DATA DATA
00040H 0043FH 00400H STACK STACK
Origin Group
0002:0 DGROUP
Address Publics by Name
Address Publics by Value
Program entry point at 0000:0000
映像文件中首先給出瞭該程序各個邏輯段的起點(Start)、終點(sTOP)、長度(Length)、段名(Name)和類別(Class);然後是段組(GROUP)位置和組名;最後提示程序開始執行的邏輯地址。註意,這裡的起點、終點和段地址是以該程序文件開頭而言的相對地址,實際的絕對地址需要在程序進入主存後確定。
5、可執行程序的調試
隻要在操作系統下輸入文件名即可:
LI6-1
操作系統裝在該文件進入主存,開始運行,是用DEBUG調試時:
DEBUG LI6-1.EXE
其中,BX.CX反映程序的大小,CS:IP指向程序開始執行的第一條指令,SS:SP指向堆棧段,DS和ES並不指向程序數據段,而是指向程序前100H處(這部分是該程序的短前綴PSP);所以,DS和ES應該在程序當中進行設置,正如該程序.STARTUP偽指令所完成的。采用簡化段定義格式的程序,在主存中從低到高依次安排代碼段、數據段和堆棧段。
找的好辛苦呀
大哥看的好的話就加給小弟呀
呵呵
祝你成功呀
MASM32 是一個為那些對學習或者編寫 32 位微軟匯編( MASM )感興趣 的程序員提供的工作環境,它最流行的版本是 8.0 版,而我所知道最新版本是 9.0 版。但是請大傢一定要註意,這裡的 8.0 版和 9.0 版不是指 MASM 編譯器 ( 即 ML) 的版本,而是 MASM32 開發環境的版本。 經常看到網上有網友發的貼把這兩個概念都搞混瞭。
那麼 MASM(ML) 編譯器的版本到底有哪些呢?教學上常用的版本是 5.0 版的,之前還有個 4.0 版的記得“全國計算機等級三級考試”就是用的 4.0 版。 5.0 版之後有個 5.1 版本,在這之後,從 6.0 版開始 MASM 就改名 ML 瞭,因為它把編譯和連接組合在一起瞭。而且 6.0 版還對匯編語言進行瞭大幅改造,使之支持高級語言的很多特性。 6.0 版之後常看到的就是 6.11 、 6.13 、 6.14 MASM32(V8.0 和 V9.0) 就是包含有 ML6.14 版 , 而不是 ML8.0 版。 6.14 之後就是 6.15 但不常見 ,但 Microsoft 從 6.15 版開始好象就不再單獨發佈 MASM 的開發工具包瞭。
以後的 ML 還有 7.0 、 7.1 版,最新的是 ML8.0 版。但它們都隻包含在 Visual Studio.Net 和 Visual Studio 2005 裡面。而且如果你 安裝瞭 Visual Studio 2005 的 64 位開發環境,你將得到一個 MASM for x64 ( ml64 .exe ) 哈哈,各位這可是支持 Intel 和 AMD 的 64 位 CPU 的匯編語言編譯器!有志於 64 位底層開發的趕快去試用看看吧。
MASM 編譯器各版本的區別
版 本 | 簡 介 |
MASM 4.00 | 這是最先廣泛使用的一個 MASM 版本,適用於 DOS 下的匯編編程。它很精巧,但使用起來不是很智能化,需要用戶自己一板一眼地寫出所有的東西。很多教科書上講的 8086 匯編語法都是針對這個版本的,對程序員來說。它隻比用 Debug 方便一點點 |
MASM 5.00 | MASM 5.00 比 4.00 在速度上快瞭很多,並將段定義的偽指令簡化為類似 .code 與 .data 之類的定義方式,同時增加瞭對 80386 處理器指令的支持,對 4.00 版本的兼容性很好 |
MASM 5.10 | 對程序員來說,這個版本最大的進步是增加瞭對 @@ 標號的支持。這樣,程序員可以不再為標號的起名花掉很多時間。另外, MASM 5.10 增加瞭對 OS/2 1.x 的支持 |
MASM 5.10B | 1989 年推出,比上一個版本更穩定、更快,它是傳統的 DOS 匯編編譯器中最完善的版本 |
MASM 6.00 | 1992 年發佈,有瞭很多的改進。編譯器可以使用擴展內存,這樣可以編譯更大的文件,可執行文件名相應從 Masm.exe 改為 Ml.exe 。從這個版本開始可以在命令行上用 *.asm 同時編譯多個源文件,源程序中數據結構的使用和命令行參數的語法也更像 C 的風格。最大的改進之一是開始支持 .if/.endif 這樣的高級語法,這樣,使用復雜的條件分支時和用高級語言書寫一樣簡單,可以做到幾千行的代碼中不定義一個標號;另外增加瞭 invoke 偽指令來簡化帶參數的子程序調用。這兩個改進使匯編代碼的風格越來越像 C ,可讀性和可維護性提高瞭很多 |
MASM 6.00A | 未發售的版本 |
MASM 6.00B | 最後一個支持 OS/2 的 MASM 版本,修正瞭上一版本中的一些錯誤 |
MASM 6.10 | 修正瞭一些錯誤,同時增加瞭 /Sc 選項,可以在產生的 list 文件中列出每條指令使用的時鐘周期數 |
MASM 6.10A | 1992 年發佈,修正瞭一些內存管理方面的問題 |
MASM 6.11 | 1993 年 11 月發佈,支持 Windows NT ,可以編寫 Win32 程序,同時支持 Pentium 指令,但不支持 MMX 指令集 |
MASM 6.11C | 1994 年發佈,增加瞭對 Windows 95 VxD 的支持 |
MASM 6.12 | 1997 年 8 月發佈,增加 .686 , .686P , .MMX 聲明和對相應指令的支持 |
MASM 6.13 | 1997 年 12 月發佈,增加瞭 .K3D 聲明,開始支持 AMD 處理器的 3D 指令 |
MASM 6.14 | 這是一個很完善的版本,它在 .XMM 中增加瞭對 Pentium III 的 SIMD 指令集的支持,相應增加瞭 OWORD ( 16 字節)的變量類型 |
MASM 6.15 | 2000 年 4 月發佈 |
到此這篇關於如何用MASM5.0 (圖解)的文章就介紹到這瞭,更多相關MASM用法內容請搜索GuideAH以前的文章或繼續瀏覽下面的相關文章,希望大傢以後多多支持GuideAH!