




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
-.z.匯編編譯工具M(jìn)ASM的使用2.1.實(shí)驗(yàn)?zāi)康膶W(xué)習(xí)如何安裝MASM;學(xué)習(xí)如何使用和使用編譯和鏈接匯編語(yǔ)言程序。2.2.根底知識(shí)1、常用匯編語(yǔ)言工具軟件名稱運(yùn)行平臺(tái)軟件說明下載地址MasmV6.11DOS微軟匯編工具M(jìn)asm32Windows98/2000/*P微軟Win32匯編工具Windows98/2000/*P微軟Win32匯編工具DOSBorland匯編工具2、DOS匯編與WIN32匯編在DOS下編寫匯編程序,程序員可以管理系統(tǒng)的所有資源,訪問和改動(dòng)系統(tǒng)中所有的內(nèi)存,修改內(nèi)存控制塊,修改中斷向量表截獲中斷,直接對(duì)I/O端口進(jìn)展讀寫。DOS是個(gè)單任務(wù)操作系統(tǒng),只有一個(gè)運(yùn)行級(jí)別,任何進(jìn)程和DOS操作系統(tǒng)都是同等級(jí)別的。因此,DOS系統(tǒng)中各個(gè)進(jìn)程會(huì)互相影響,如果*個(gè)進(jìn)程死機(jī)的話,整個(gè)系統(tǒng)都會(huì)垮掉。DOS工作在實(shí)模式下,程序員可以尋址1M的內(nèi)存,通過段存放器來指定段的初始地址,每個(gè)段的大小為64K。超過1M的局部,就只能把他作為*MS使用。1M以上的內(nèi)存空間只能用作數(shù)據(jù)存放而無法在其中執(zhí)行程序。Win32是指32位的Windows操作系統(tǒng),進(jìn)程有多種運(yùn)行級(jí)別,操作系統(tǒng)工作在最高級(jí)別——0級(jí),而應(yīng)用程序工作在3級(jí)。在第三級(jí)別,進(jìn)程無法直接訪問I/O端口,無法訪問其它進(jìn)程運(yùn)行的內(nèi)存,連向自己的運(yùn)行代碼寫入數(shù)據(jù)都是非法的。只有對(duì)于最高級(jí)別的進(jìn)程,系統(tǒng)才是全開放的。Windows工作在保護(hù)模式下,所有的資源對(duì)進(jìn)程來說都是被"保護(hù)〞的。在內(nèi)存方面,Windows使用了處理器的分頁(yè)機(jī)制,程序員不必用一個(gè)段存放器去指定段的地址,因?yàn)樵诒Wo(hù)模式下,段存放器的含義是不同的〔參見80386手冊(cè)方面的書籍〕。程序員可以直接指定一個(gè)32位的地址來尋址4GB的內(nèi)存。在程序構(gòu)造方面,Windows程序也有很大的不同,它是"基于消息〞的。在上面列舉的匯編工具中,一些是DOS匯編工具,一些是Win32匯編工具。初學(xué)者可以從DOS匯編入手,先掌握匯編編程的思路、根本語(yǔ)法和編程技巧,待入門后再學(xué)習(xí)Win32匯編。當(dāng)然,學(xué)習(xí)DOS匯編并不一定需要安裝和使用DOS操作系統(tǒng)。程序員可以在Win32環(huán)境中安裝或其它16位匯編工具,在命令提示符狀態(tài)下編譯和鏈接DOS匯編程序。DOS匯編程序在Win32環(huán)境中運(yùn)行時(shí),操作系統(tǒng)會(huì)模擬實(shí)模式運(yùn)行16位進(jìn)程。對(duì)于一些可能會(huì)影響整個(gè)操作系統(tǒng)工作的指令,Win32操作系統(tǒng)會(huì)拒絕執(zhí)行。2.3.MASM的安裝首先從Internet下載,這是一個(gè)ZIP壓縮文件??梢杂肳INZIP或WINRAR等壓縮解壓軟件指定一個(gè)目錄將其解壓,目錄名例如為F:\MASM60。運(yùn)行"命令提示符〞,在解壓目錄中運(yùn)行setup程序,開場(chǎng)安裝MASM。在主菜單界面選擇"InstalltheMicrosoftMacroAssembler〞繼續(xù)。在系統(tǒng)設(shè)置界面選擇"DOS/Windows&NT〞操作系統(tǒng)繼續(xù)。選擇安裝Windows有關(guān)文選擇安裝PWD〔Programmer’sWorkBench〕,繼續(xù)。無須安裝"Briefcompatibility〞〔常見編輯器兼容〕,繼續(xù)。選擇復(fù)制微軟鼠標(biāo)驅(qū)動(dòng)器"MicrosoftMouseDriver〞,繼續(xù)。選擇安裝MASM工具,繼續(xù)。選擇安裝幫助文件,繼續(xù)。選擇安裝例程〔sampleprogram〕,繼續(xù)。選擇系統(tǒng)的安裝目錄,例如將系統(tǒng)安裝在E盤。接下來是詢問各局部程序的安裝目錄,一般情況下由系統(tǒng)自行決定即可。參數(shù)設(shè)置完畢后最后檢查一次。檢查如果無需改動(dòng),則選擇"NOCHANGES〞開場(chǎng)安裝。安裝完畢后系統(tǒng)會(huì)提示與版本有一些區(qū)別,具體的內(nèi)容可以觀看安裝菜單中的"SpecialNoteforMASMv5.1users〞,或者編程指南中的附錄A。設(shè)置MASM的DOS操作系統(tǒng)環(huán)境參數(shù)需要修改和兩個(gè)文件,MASM提供了和兩個(gè)文件作為參考。如果MASM安裝在Windows98/NT/2000/*P操作系統(tǒng)環(huán)境下,需要參考文件的內(nèi)容進(jìn)展設(shè)置,設(shè)置方式稍后介紹。接下來是操作系統(tǒng)環(huán)境下的設(shè)置要求。如果安裝在操作系統(tǒng)中,需要參考文件修改系統(tǒng)環(huán)境配置文件。如果安裝在32位Windows中,無須理會(huì)的內(nèi)容。然后是關(guān)于PWD〔Programmer’sWorkBench〕的設(shè)置,安裝系統(tǒng)會(huì)提供一個(gè)參考文件。最后是有關(guān)內(nèi)存方面的設(shè)置。當(dāng)MASM工作在非DOS環(huán)境下時(shí),不需要理會(huì)這些方面的內(nèi)容。在安裝完畢前最好看一看"SpecialNoteforCodeViewusers〞、"SpecialNoteforMASMv5.1users〞、"〞和"〞的內(nèi)容。最后再退出安裝。2.3.WIN32操作系統(tǒng)中MASM的環(huán)境參數(shù)設(shè)置安裝完MASM后,需要設(shè)置一下MASM的環(huán)境參數(shù)。步驟如下:在桌面"我的電腦〞上點(diǎn)擊鼠標(biāo)右鍵,在彈出式菜單上選擇"屬性〞項(xiàng),在"系統(tǒng)屬性〞窗口里翻開"高級(jí)〞頁(yè)。點(diǎn)擊"環(huán)境變量〞按鈕。在"環(huán)境變量窗口〞的系統(tǒng)變量列表中選擇"PATH〞項(xiàng),再點(diǎn)擊系統(tǒng)變量列表下的"編輯〞按鈕。在"編輯環(huán)境變量窗口〞的"變量值〞欄里追加MASM的BIN、BINB、INCLUDE目錄的路徑參數(shù)。例如:當(dāng)MASM安裝在E:\MASM611目錄,則在"變量值〞欄里追加";E:\MASM611\BINR;E:\MASM611\BIN〞。除此之外,還需要增加以下環(huán)境變量:LIB=c:MASM611\LIBINCLUDE=c:MASM611\INCLUDEINIT=c:MASM611\INITHELPFILES=c:MASM611\HELP\*.HLPASME*=c:\ASM611\SAMPLES說明:環(huán)境參數(shù)改變后需要重新啟動(dòng)計(jì)算機(jī)才能生效。有些機(jī)房在計(jì)算機(jī)中使用了磁盤保護(hù)卡,一旦重新啟動(dòng)所有安裝的文件和設(shè)置的參數(shù)都將消失。在這種情況下,可以在DOS命令行模式中輸入一些臨時(shí)命令設(shè)置MASM的環(huán)境參數(shù)?!布僭O(shè)MASM安裝在E:\MASM611目錄〕SETPATH=E:\MASM611\BINR;E:\MASM611\BIN;%PATH%SETLIB=E:\MASM611\LIBSETINCLUDE=E:\MASM611\INCLUDESETINIT=E:\MASM611\INITSETHELPFILES=E:\MASM611\HELP\*.HLPSETASME*=E:\MASM611\SAMPLES2用于將匯編源程序匯編成目標(biāo)文件。當(dāng)MASM匯編環(huán)境參數(shù)配置好之后,在"命令提示符〞窗口中鍵入"MASM/H〞指令,將顯示出MASM的使用介紹。MASM的命令格式如下:MASM[option...]source(.asm),[out(.obj)],[list(.lst)],[cref(.crf)][;]可選局部是MASM的各種匯編參數(shù)。source(.asm)指定匯編源文件的名稱,缺省的擴(kuò)展名是ASM。out(.obj)指定輸出的目標(biāo)代碼文件。缺省的文件名與匯編源文件一樣,擴(kuò)展名改為OBJ。list(.lst)指定輸出的列表文件,缺省的擴(kuò)展名是LST。缺省情況下MASM不生成列表文件。cref(.crf)指定輸出的穿插參考文件,缺省的擴(kuò)展名是CRF。缺省情況下MASM不生成穿插參考文件,穿插參考文件的后綴為SBR。最后的分號(hào)表示其后的工程按缺省情況處理。以下就各個(gè)匯編參數(shù)逐個(gè)加以說明。參數(shù)名作用/C生成穿插參考文件/D<sym>[=<val>]定義一個(gè)符號(hào)sym并對(duì)其賦值val/E模擬浮點(diǎn)運(yùn)算指令和IEEE格式/H顯示MASM的使用幫助/HELP顯示MASM的使用幫助/I<path>尋找引入文件〔INC〕的目錄/L生成列表文件/La生成全部列表文件/ML區(qū)分所有標(biāo)識(shí)符號(hào)的大小寫/MU將全局標(biāo)識(shí)符號(hào)轉(zhuǎn)換為大寫/M*區(qū)分全局標(biāo)識(shí)符號(hào)的大小寫/N隱藏列表文件中的符號(hào)表/T隱藏成功匯編時(shí)的顯示消息/W[0/1/2]設(shè)置告警等級(jí)〔0:無;1:嚴(yán)重;2:勸告〕/*列舉錯(cuò)誤條件/Zi生成CodeView的行號(hào)信息/Zd生成CodeView的標(biāo)識(shí)符號(hào)信息下面用一個(gè)匯編程序說明的使用方法。匯編程序名稱為,內(nèi)容如下:data1 segmentmsg db "Hello,world.",0dh,0ah,"$"data1 endscode1 segmentassumecs:code1,ds:data1start: mov a*,data1mov ds,a* mov d*,offsetmsgmov ah,9 int 21hmov a*,4c00h int 21hcode1ends endstart輸入"masmhello;〞指令,指令后的分號(hào)表示一切按缺省情況進(jìn)展。運(yùn)行后顯示以下內(nèi)容:Microsoft(R)MASMCompatibilityDriverCopyright(C)MicrosoftCorp1993.Allrightsreserved.Invoking:ML.E*E/I.Copyright(C)MicrosoftCorp1981-1993.Allrightsreserved.執(zhí)行指令,用記事本觀看生成的的內(nèi)容。2用于將目標(biāo)文件鏈接成可執(zhí)行文件。當(dāng)環(huán)境參數(shù)配置好之后,在"命令提示符〞窗口中鍵入"LINK/?〞指令,將顯示出LINK的參數(shù)表。LINK的命令格式如下:LINK[option...]<objs>,<e*efile>,<mapfile>,<libs>,<deffile>[;]可選局部是LINK的各種鏈接參數(shù)。objs指定目標(biāo)文件的名稱,缺省的擴(kuò)展名是OBJ??梢杂卸鄠€(gè)目標(biāo)文件,目標(biāo)文件之間用加號(hào)或者空格間隔。e*efile指定輸出的可執(zhí)行文件的名稱。缺省的文件名與目標(biāo)文件一樣,缺省擴(kuò)展名改為E*E。mapfile指定輸出的列表文件的名稱,缺省的擴(kuò)展名是MAP。缺省情況下不生成列表文件。libs指定鏈接時(shí)使用的庫(kù)文件,缺省的擴(kuò)展名是LIB??梢杂卸鄠€(gè)庫(kù)文件,庫(kù)文件之間用加號(hào)或者空格間隔。缺省情況下MASM不使用庫(kù)文件。最后的分號(hào)表示其后的工程按缺省情況處理。deffile指定輸出的定義文件的名稱,缺省的擴(kuò)展名是DEF。缺省情況下不生成定義文件。最后的分號(hào)表示其后的工程按缺省情況處理。以下就各個(gè)鏈接參數(shù)逐個(gè)加以說明。參數(shù)名縮寫作用/ALIGNMENT:size/A:size根據(jù)指定的大小在分段執(zhí)行文件中排列段數(shù)據(jù),不可用于DOS程序/BATCH/B隱藏庫(kù)或目標(biāo)文件找不到的提示/CODEVIEW/CO參加CodeView的標(biāo)識(shí)符號(hào)及列號(hào),該選項(xiàng)與/E*EPACK不兼容。/CPARMA*ALLOC:number/CP:number以16字節(jié)為單位設(shè)置程序最大分配空間/DOSSEG/DO用缺省順序排列段〔用于微軟高級(jí)語(yǔ)言〕/DSALLOCATE/DS從數(shù)據(jù)段的尾部開場(chǎng)裝入全部數(shù)據(jù),用于鏈接成E*E文件/E*EPACK/E壓縮可執(zhí)行文件的大小,與/CO和/INCR不兼容/FARCALLTRANSLATION/F優(yōu)化遠(yuǎn)程調(diào)用,當(dāng)使用/TINY時(shí)自動(dòng)使用/FARCALL。當(dāng)鏈接WINDOWS程序時(shí)不建議同時(shí)使用/FARCALL和/FARCALLTRANSLATION/HELP/HE顯示簡(jiǎn)要幫助信息/HIGH/HI執(zhí)行時(shí)盡可能地裝入高端內(nèi)存區(qū),和/DEALLOC并用。〔用于微軟高級(jí)語(yǔ)言〕/INCREMENTAL/INC準(zhǔn)備參加ILINK鏈接,與/E*EPACK和/TINY不兼容。/INFORMATION/INF顯示鏈接過程的信息/LINENUMBERS/LI將源文件行號(hào)和相關(guān)地址參加MAP文件,目標(biāo)文件必須帶行號(hào)匯編。/MAP/M將公共標(biāo)識(shí)符加到MAP文件/NODEFAULTLIBRARYSEARCH[:library]/NOD[:library]忽略指定的缺省庫(kù)/NOE*TDICTIONARY/NOE阻止LINK尋找?guī)熘械臄U(kuò)展字典,當(dāng)重定義標(biāo)識(shí)符導(dǎo)致錯(cuò)誤L2044時(shí)使用/NOE/NOFARCALLTRANSLATION/NOF制止遠(yuǎn)程調(diào)用/NOIGNORECASE/NOI區(qū)別大小寫字母/NOLOGO/NOL隱藏版權(quán)信息/NONULLSDOSSEG/NON類似于/DOSSEG參數(shù),但是在_TE*T段前不加額外的字節(jié)/NOPACKCODE/NOP對(duì)代碼段不壓縮/PACKCODE:number/PACKC:number將相鄰的代碼段合并壓縮,指定的字節(jié)數(shù)用于設(shè)定物理段的最大值。/PACKDATA:number/PACKD:number將相鄰的數(shù)據(jù)段合并壓縮,指定的字節(jié)數(shù)用于設(shè)定物理段的最大值。僅用于windows/PAUSE/PAU鏈接過程中暫停以更換磁盤/PMTYPE:type/PM:type指定基于Windows的應(yīng)用程序的類型。類型為PM表示是WindowsAPI;類型為VIO表示是WindowsCompat;類型為NOVIO表示不是WindowsCompat;/QUICKLIBRARY/Q建立QuickBasic程序庫(kù)/SEGMENTS:number/SE:number設(shè)置鏈接時(shí)的段總數(shù),缺省值為127/STACK:number/ST:number設(shè)置棧段的最大字節(jié)數(shù),不超過64K/TINY/T生成小模式的COM文件,與/INCR不兼容/"/"顯示簡(jiǎn)要幫助信息下面將剛剛用匯編出來的目標(biāo)程序進(jìn)展鏈接。目標(biāo)程序名稱為。輸入"linkhello;〞指令,指令后的分號(hào)表示一切按缺省情況進(jìn)展。運(yùn)行后顯示以下內(nèi)容:Microsoft(R)SegmentedE*ecutableLinkerVersionJul131992Copyright(C)MicrosoftCorp1984-1992.Allrightsreserved.LINK:warningL4021:nostacksegment鏈接警告沒有定義棧段,這不影響程序的運(yùn)行。接下來可以運(yùn)行,看看顯示結(jié)果是不是"Hello,world.〞。2的功能相當(dāng)于和的總和,可以將匯編語(yǔ)言源程序匯編和鏈接后直接生成可執(zhí)行文件。當(dāng)環(huán)境參數(shù)配置好之后,在"命令提示符〞窗口中鍵入"ML/?〞指令,將顯示出ML的參數(shù)表。ML的命令格式如下:ML[/options]filelist[/linklinkoptions]可選局部是ML的各種鏈接參數(shù),/linklinkoptions里設(shè)定的是鏈接參數(shù),這些參數(shù)可以參照2.5LINK的有關(guān)參數(shù)。filelist指定匯編源文件的名稱,缺省的擴(kuò)展名是ASM??梢杂卸鄠€(gè)匯編源文件,文件之間用空格間隔。以下就各個(gè)鏈接參數(shù)逐個(gè)加以說明。參數(shù)名作用/ATEnabletinymodel(file)允許小模式〔生成COM文件〕/Bl<linker>Usealternatelinker使用linker參數(shù)里指定的鏈接器/cAssemblewithoutlinking僅僅匯編不鏈接/CpPreservecaseofuseridentifiers區(qū)分用戶標(biāo)識(shí)符的大小寫/CuMapallidentifierstouppercase將所有標(biāo)識(shí)符映象為大寫/C*Preservecaseinpublics,e*terns區(qū)分公共標(biāo)識(shí)符和外部標(biāo)識(shí)符的大小寫/D<name>[=te*t]Definete*tmacro用給定的名字定義文字宏/EPOutputpreprocessedlistingtostdout生成預(yù)處理列表并輸出至屏幕/F<he*>Setstacksize(bytes)設(shè)置堆棧大小/Fb[file]Generatebounde*ecutable生成限制性的可執(zhí)行文件/Fe<file>Namee*ecutable設(shè)置可執(zhí)行文件的名稱/Fl[file]Generatelisting生成匯編代碼列表文件/Fm[file]Generatemap生成鏈接映象文件/Fo<file>Nameobjectfile設(shè)置目標(biāo)文件的名稱/FPiGenerate80*87emulatorencoding生成80*87模擬代碼/Fr[file]Generatelimitedbrowserinfo生成源瀏覽文件〔SBR〕/FR[file]Generatefullbrowserinfo生成擴(kuò)展源瀏覽文件〔SBR〕/G<c|d>GeneratePascalorCcalls指定匯編生成的調(diào)用格式。C:pascal類型D:C類型/H<number>Setma*e*ternalnamelength設(shè)置擴(kuò)展名的最大長(zhǎng)度/I<name>Addincludepath添加include文件的目錄/link<linkeroptionsandlibraries>鏈接選項(xiàng)和庫(kù)/nologoSuppresscopyrightmessage取消版權(quán)信息/SaMa*imizesourcelisting列表文件最大化/SfGeneratefirstpasslisting生成第一遍的匯編代碼列表/Sl<width>Setlinewidth設(shè)置列表文件行寬/SnSuppresssymbol-tablelisting隱藏列表文件中的符號(hào)表/Sp<length>Setpagelength設(shè)置列表文件的頁(yè)長(zhǎng)度/Ss<string>Setsubtitle設(shè)置列表文件的子標(biāo)題/St<string>Settitle設(shè)置列表文件的標(biāo)題/S*Listfalseconditionals列表文件中列舉錯(cuò)誤條件/Ta<file>Assemblenon-.ASMfile匯編非ASM后綴的文件/VMEnablevirtualmemory啟動(dòng)虛擬存儲(chǔ)器/wSameas/W0/W*設(shè)置告警級(jí)別為0/W*Treatwarningsaserrors傳回告警的錯(cuò)誤碼/W<number>Setwarninglevel設(shè)置告警級(jí)別〔1、2、3〕/*IgnoreINCLUDEenvironmentpath忽略INCLUDE環(huán)境路徑/ZdAddlinenumberdebuginfo在目標(biāo)文件中產(chǎn)生CodeView列號(hào)/ZfMakeallsymbolspublic在目標(biāo)文件中產(chǎn)生CodeView所有公共標(biāo)識(shí)符/ZiAddsymbolicdebuginfo在目標(biāo)文件中產(chǎn)生CodeView標(biāo)識(shí)符/ZmEnableMASM5.10compatibility/Zp[n]Setstructurealignment排列構(gòu)造數(shù)據(jù)的起始地址為n〔1、2、4〕的倍數(shù)/ZsPerformsynta*checkonly只檢查語(yǔ)法不產(chǎn)生目標(biāo)文件下面使用對(duì)ASM文件進(jìn)展匯編和鏈接。匯編文件的名稱為。執(zhí)行"MLhello.asm〞指令,如無錯(cuò)誤的話將生成可執(zhí)行文件。Copyright(C)MicrosoftCorp1981-1991.Allrightsreserved.Copyright(C)MicrosoftCorp1984-1991.Allrightsreserved.RunFile[temp.e*e]:"hello.e*e"ListFile[NUL.MAP]:NULLibraries[.LIB]:DefinitionsFile[NUL.DEF]:;LINK:warningL4021:nostacksegment運(yùn)行,看看顯示結(jié)果是不是"Hello,world.〞。2.7.用DEBUG調(diào)試可執(zhí)行文件用MASM編譯了匯編語(yǔ)言源文件之后,用DEBUG調(diào)試可執(zhí)行程序。具體的做法是:在"命令提示符〞窗口下執(zhí)行"DEBUG<文件所在路徑+文件名>〞指令。執(zhí)行"R〞指令觀看段存放器CS和DS的值,在E*E文件中兩值應(yīng)該不同。執(zhí)行"U〞指令觀看CS:IP所指地址的反匯編代碼。程序剛開場(chǎng)時(shí)會(huì)設(shè)置DS段存放器的值,將其指向DATA1數(shù)據(jù)段。用跟蹤指令"P〞檢查這兩條指令的執(zhí)行結(jié)果。DS段存放器的值被修改后,執(zhí)行指令"DDS:0”繼續(xù)用指令P進(jìn)展程序跟蹤,檢查各存放器和標(biāo)志位的修改內(nèi)容以及程序的運(yùn)行情況。程序正常完畢后,用"RIP〞指令修改存放器IP的值,將其設(shè)置為0。重復(fù)第4步到第6步的工作,改用指令T而不是指令P對(duì)程序進(jìn)展跟蹤,觀看跟蹤情況。2.8.用MASM和LINK生成COM可執(zhí)行文件對(duì)于有多個(gè)數(shù)據(jù)段、棧段的匯編語(yǔ)言程序,建議將其匯編和鏈接成E*E文件。如果程序的代碼和數(shù)據(jù)量比擬小,可以將其匯編和鏈接成COM文件。E*E文件可以有多個(gè)段,每個(gè)段的最大空間為64KB,程序在執(zhí)行需要對(duì)多個(gè)段進(jìn)展管理,所以E*E文件的構(gòu)造有些復(fù)雜。而COM文件只有一個(gè)段,執(zhí)行代碼和數(shù)據(jù)都處于一個(gè)段中,因此,COM文件比E*E文件顯得更加短小精悍。COM文件其唯一的約束就是可執(zhí)行的程序的大小不允許超過64KB。編寫如下的匯編程序,文件名定為,內(nèi)容如下:code1 segment assumecs:code1,ds:code1start: jmp ne*tmsg db "Hello,world.",0dh,0ah,"$"ne*t: mov a*,csmov ds,a* mov d*,offsetmsgadd d*,100h mov ah,9int 21h mov a*,4c00hint 21hcode1ends endstart執(zhí)行以下指令對(duì)源文件進(jìn)展匯編:。執(zhí)行以下指令將目標(biāo)文件鏈接成COM文件:LINK/TINYHELLO2;。命令執(zhí)行完畢后,將生成HELL2文件,執(zhí)行HELLO2觀看運(yùn)行結(jié)果。比擬一下和HELL2的大小,用DEBUG調(diào)試可執(zhí)行程序HELLO2,了解它的程序構(gòu)造。=================================================================================================\o"默認(rèn)分類"默認(rèn)分類2009-04-2217:52:54閱讀98評(píng)論0
字號(hào):大中小訂閱一、安裝前的準(zhǔn)備工作1.
安裝MASM6.11的操作系統(tǒng)要求為Windows98。2.
在D∶\盤或別的硬盤上建一個(gè)文件夾。今假設(shè)在D∶\盤上建立一個(gè)如下的文件夾:"D∶\*****yyyyyy〞,其中"*****〞是班級(jí)名,"yyyyyy〞是本人姓名。3.
從教師機(jī)上下載文件夾"MASM611SETUP〞及其內(nèi)容,并放入文件夾"D∶\*****yyyyyy〞。4.
在文件夾"D∶\*****yyyyyy〞下建立一個(gè)如下的工作目錄:"D∶\*****yyyyyy\mymasm〞,以備將來在工作的時(shí)候存放MASM6.11匯編語(yǔ)言源文件、目標(biāo)文件、可執(zhí)行文件。二、安裝過程1.
翻開MASM611SETUP文件夾,運(yùn)行"Setup〞。2.
在出現(xiàn)"Microsoft
MASM6.11
Setup〞屏幕之后,按"ENTER〞鍵。3.
在出現(xiàn)的"Microsoft
MASM6.11
Setup
Main
Menu〞屏幕上,選中"Installthe
Microsoft
Macro
Assembler〞,按"ENTER〞鍵。4.
在出現(xiàn)的"Microsoft
MASM6.11
Setup
System
Configuration〞屏幕上,選中"MS-DOS/Microsoft
WINDOWS〞,按"ENTER〞鍵。5.
在出現(xiàn)的"Microsoft
MASM6.11
Setup
Microsoft
Windows
Files〞屏幕上,對(duì)于"Install
Files
for
Microsoft
Windows?〞,選中"Yes〞,按"ENTER〞鍵。6.
在出現(xiàn)的"Microsoft
MASM6.11
Setup
Programmer’s
Workbench〞屏幕上,對(duì)于"Install
PWB?〞,選中"Yes〞,按"ENTER〞鍵。7.
在出現(xiàn)的"MicrosoftMASM6.11SetupBriefCompatibility〞屏幕上,對(duì)于"InstallBriefCompatibility?〞,選中"No〞,按"ENTER〞鍵。8.
在出現(xiàn)的"MicrosoftMASM6.11SetupMouseDriver〞屏幕上,對(duì)于"CopytheMicrosoftMouseDriver?〞,選中"Yes〞,按"ENTER〞鍵。9.
在出現(xiàn)的"MicrosoftMASM6.11SetupMAS.E*EUtility〞屏幕上,對(duì)于"InstalltheMASM.E*EUtility?〞,選中"Yes〞,按"ENTER〞鍵。10.
在出現(xiàn)的"MicrosoftMASM6.11SetupHelpFiles〞屏幕上,對(duì)于"CopytheHelpFiles?〞,選中"Yes〞,按"ENTER〞鍵。11.
在出現(xiàn)的"MicrosoftMASM6.11SetupSamplePrograms〞屏幕上,對(duì)于"CopytheSamplePrograms?〞,選中"Yes〞,按"ENTER〞鍵。12.
在出現(xiàn)的"MicrosoftMASM6.11SetupDestinationDrive〞屏幕上,對(duì)于"PleaseSelecttheDestinationDrive∶〞中所列出的硬盤驅(qū)動(dòng)器,可任選其一,此處選中"HardDriveD〞,按"ENTER〞鍵。13.
在出現(xiàn)的"MicrosoftMASM6.11SetupE*ecutableFiles〞屏幕上,對(duì)于"D∶MASM611\BIN〞,不改變,按"ENTER〞鍵。14.
在出現(xiàn)的"MicrosoftMASM6.11SetupLibraryFiles〞屏幕上,對(duì)于"D∶\MASM611\LIB〞,不改變,按"ENTER〞鍵。15.
在出現(xiàn)的"MicrosoftMASM6.11SetupIncludeFiles〞屏幕上,對(duì)于"D∶\MASM611\INCLUDE〞,不改變,按"ENTER〞鍵。16.
在出現(xiàn)的"MicrosoftMASM6.11SetupInitializationFiles〞屏幕上,對(duì)于"D∶MASM611\INIT〞,不改變,按"ENTER〞鍵。17.
在出現(xiàn)的"MicrosoftMASM6.11SetupHelpFiles〞屏幕上,對(duì)于"D∶MASM611\HELP〞,不改變,按"ENTER〞鍵。18.
在出現(xiàn)的"MicrosoftMASM6.11SetupSampleFiles〞屏幕上,對(duì)于"D∶MASM611\SAMPLES〞,不改變,按"ENTER〞鍵。19.
此后,出現(xiàn)"MicrosoftMASM6.11SetupConfirmYourChoices〞屏幕,列出了前面各步所做出的各項(xiàng)選擇的清單,供用戶校核。如果發(fā)現(xiàn)有選擇不當(dāng)?shù)墓こ?,依然可以進(jìn)展修改。修改的方法是:先用箭頭鍵選中欲修改的工程,按"ENTER〞鍵,然后再用箭頭鍵選中"Yes〞或"No〞,最后再按"ENTER〞鍵。如果校核無誤,可以按"ENTER〞鍵,以給出確認(rèn)信息。20.
此后,出現(xiàn)"MicrosoftMASM6.11SetupInstalling〞屏幕,安裝程序進(jìn)展拷貝文件的操作,此時(shí)僅需等待一會(huì)兒。21.
拷貝文件操作完畢之后,出現(xiàn)"MicrosoftMASM6.11SetupInstallationComplete〞屏幕,按"CTRL+C〞鍵,退出安裝。MASM6.11的人機(jī)操作接口有兩類窗口:一類是PWB(Programmer’sWorkBench)窗口,支持用戶進(jìn)展匯編語(yǔ)言源程序文件的編輯、匯編和鏈接操作。另一類是CodeView窗口,支持用戶進(jìn)展各種調(diào)試操作。MASM6.11的啟動(dòng)過程是:首先啟動(dòng)PWB的主窗口,然后通過PWB的主窗口,再啟動(dòng)PWB的其他子窗口和啟動(dòng)CodeView類窗口。PWB主窗口的啟動(dòng)方法如下:1.
翻開"D∶MASM611\INIT〞,把其中的文件"Tools.pre〞改名為"Tools.ini〞。2.
翻開"D∶MASM611\BIN〞,運(yùn)行其中的文件"PWB.E*E〞,屏幕上即會(huì)出現(xiàn)PWB的主窗口。5.3
MASM6.11PWB的設(shè)置通常在使用PWB以前,需要進(jìn)展設(shè)置,請(qǐng)按以下過程對(duì)MASM6.11PWB進(jìn)展設(shè)置:三、
"EditorSettings〞工程的設(shè)置在PWB的主窗口中,單擊"Options〞。然后,在彈出的選單上,單擊"EditorSettings〞。此后,會(huì)彈出"EditorSettings〞窗口。接著,在"EditorSettings〞窗口中,應(yīng)進(jìn)展開關(guān)"autosave〞、"envcursave〞和"envprojsave〞的修改設(shè)置,即把它們由"no〞改為"yes〞,方法如下:1.
在"SwitchList〞工程以下出的開關(guān)清單上,單擊欲修改設(shè)置的開關(guān)。2.
在"Switch〞工程下,進(jìn)展開關(guān)的狀態(tài)修改,每次一個(gè)開關(guān)。3.
單擊"SetSwitch〞。4.
重復(fù)A、B、C三步,直至把欲修改設(shè)置的開關(guān)全部完成為止。5.
單擊"Save〞。6.
在彈出的"SaveEditorSettings〞窗口中,檢查"ModifiedSwitchesList〞工程下所列出的開關(guān)清單應(yīng)正確無誤,之后單擊"OK〞。7.
單擊"EditorSettings〞窗口中的"OK〞。8.
完畢。四、
"EnvironmentVariables〞工程的設(shè)置在PWB的主窗口中,單擊"Options〞。然后,在彈出的選單上,單擊"EnvironmentVariables〞。此后,會(huì)彈出"EnvironmentVariables〞窗口。接著,在EnvironmentVariables〞窗口中,在原有的"PATH=〞行上增加"D∶\mymasm〞和"D∶\MASM611\BIN〞兩項(xiàng),從而把原有的"PATH=〞行修改為:PATH=D∶\mymasm;D∶\MASM611\BIN;C∶\WINDOWS;C∶\WINDOWS\COMMAND,其中的"D∶\mymasm〞,為用戶在啟動(dòng)PWB之前自建的工作目錄。增加如下工程:LIB=D∶\MASM611\LIB,INCLUDE=D∶\MASM611\INCLUDE,INIT=D∶\MASM611\INITHELPFILES=D∶\MASM611\HELP\*.HLP,ASME*=D∶\MASM611\SAMPLES。修改和增加工程的方法如下:1.
在"Variable〞工程下輸入欲修改或增加的工程。2.
單擊"SetVariable〞。3.
重復(fù)A、B兩步,直至欲修改和增加的工程全部完成為止。4.
單擊"OK〞。5.
完畢。五、
"BuildOptions〞工程的設(shè)置在PWB的主窗口中,單擊"Options〞。然后,在彈出的選單上,單擊"BuildOptions〞。此后,會(huì)彈出"BuildOptions〞窗口。接著,在"BuildOptions〞窗口中,選中"UseDebugOptions〞。單擊"OK〞。完畢。===========================================================================================masm32v8.2的官方網(wǎng)站是movsd.===link.e*e把他們復(fù)制到系統(tǒng)路徑下即可=家伙放在C盤的一個(gè)文件里,然后把文件路徑加到系統(tǒng)環(huán)境變量path里,就可以直接在cmd里==============================匯編語(yǔ)言masmwinasmmasm32分類:匯編語(yǔ)言前言MASM(MicrosoftMacroAssembler)是微軟推出的匯編語(yǔ)言編譯器。因?yàn)樗?jiǎn)單易用,開發(fā)環(huán)境容易搭建,用它作為匯編語(yǔ)言學(xué)習(xí)和對(duì)計(jì)算機(jī)組成原理的深入理解是非常適宜的。它最新版本是MASM8.*系列。主要增加了*64〔AMD64,Intel64/EM64T〕架構(gòu)處理器的支持。本教程仍然使用MASM6.*系列,目標(biāo)架構(gòu)是IA-32系列處理器。閱讀本教程您需要一些構(gòu)造化計(jì)算機(jī)語(yǔ)言特別是C語(yǔ)言的經(jīng)歷。最好對(duì)計(jì)算機(jī)組成原理有一定的了解??偟膩碚f,匯編語(yǔ)言已經(jīng)退出了編程第一線,任何可以用更高級(jí)語(yǔ)言如C語(yǔ)言實(shí)現(xiàn)的場(chǎng)合,應(yīng)該選擇更高級(jí)的語(yǔ)言。在一些特定的場(chǎng)合,匯編語(yǔ)言仍然有一定的用處,例如:對(duì)程序中一些使用頻率非常高的模塊,用匯編語(yǔ)言來做優(yōu)化。逆向工程,分析無源代碼的軟件,包括病毒等等。編寫B(tài)IOS/PCIBIOS,在操作系統(tǒng)引導(dǎo)之前的程序等CPU的實(shí)模式(real-addressmode)程序。深入理解計(jì)算機(jī)組成原理,理解程序被操作系統(tǒng)處理,被CPU執(zhí)行的過程。本教程需要您自己搭建一個(gè)開發(fā)環(huán)境,推薦MASM32搭配WinAsm。MASM32是一個(gè)開發(fā)包,包括了MASM用到的各種工具如程序的鏈接器等和一些例子程序以及幫助文檔。他是非官方的,提供了一個(gè)完整的MASM的開發(fā)環(huán)境。WinAsm是一個(gè)IDE(集成開發(fā)環(huán)境,IntegratedDevelopmentEnvironment)。他可以和MASM32集成在一起使用。第一章大環(huán)境匯編語(yǔ)言很顯著的特點(diǎn)是編程的時(shí)候,你必須時(shí)刻考慮到CPU處理你程序的過程。也就是它和具體硬件非常相關(guān)。所以,在了解匯編語(yǔ)言之前,有必要了解一下他大的執(zhí)行環(huán)境。分為三節(jié)。第一節(jié),介紹匯編語(yǔ)言程序的執(zhí)行環(huán)境。第二節(jié),介紹處理器的內(nèi)存管理模式。第三節(jié),介紹匯編程序從編輯到運(yùn)行的過程。第一、二節(jié)對(duì)理解MASM語(yǔ)言非常有必要。不過,特別是CPU實(shí)模式下的編程。第一節(jié)匯編語(yǔ)言程序的執(zhí)行環(huán)境。通常我們看CPU組成是分層次的,主要有三層:數(shù)字邏輯層〔DigitalLogicLevel〕、微內(nèi)核層〔Microarchitecturelevel〕、ISA層〔InstructionsetArchitectruelevel〕。ISA層里的各種組成元素就是一個(gè)匯編語(yǔ)言程序的執(zhí)行環(huán)境。時(shí)下比擬知名的ISA層的名字有:IA-32,*64,IA-64,SUN的SPARC,IBM的POWER等,這層是軟件和硬件交互的標(biāo)準(zhǔn),或者說一個(gè)接口。微內(nèi)核層是CPU廠商用來實(shí)現(xiàn)特定ISA層的方法。這層比擬見CPU廠商的功力,不同的實(shí)現(xiàn)方式會(huì)帶來不同的性能。但它對(duì)軟件是透明的。所以,不管微內(nèi)核層怎么重新設(shè)計(jì),只要ISA層兼容,都能保持軟件的兼容性。比擬知名的微內(nèi)核層的名字有:IntelPentium4系列CPU的"IntelNetBurstMicroarchitecture〞和Intel最新Core系列CPU的"IntelCoreMicroarchitecture〞IA-32CPU的ISA層主要由如下組成:CPU操作模式(modeofoperation)內(nèi)存地址空間〔addressspace〕根本的程序執(zhí)行存放器協(xié)處理器存放器MM*指令存放器棧(stack)以上為根本元素,為普通程序使用,以下為系統(tǒng)級(jí)程序使用的比方操作系統(tǒng):I/O端口控制存放器,也就是決定CPU操作模式的存放器內(nèi)存管理存放器Debug存放器內(nèi)存區(qū)域類型存放器等等。IA-32是所謂的CISC〔復(fù)雜指令集計(jì)算機(jī),complicatedinstructionsetcomputer〕架構(gòu)的ISA。相對(duì)于RISC〔精簡(jiǎn)指令集計(jì)算機(jī),reducedinstructionsetcomputer,例如SUN的SPARC和IBM的POWER〕來說,他的指令系統(tǒng)復(fù)雜而多。處理器的構(gòu)造因而復(fù)雜,再加上為了兼容而提出的所謂操作模式,內(nèi)存管理模式等等的概念使得對(duì)它的編程工作非常困難。所以掌握了對(duì)它的匯編程序的開發(fā),別的系統(tǒng),你會(huì)覺得非常輕松。提到IA-32,不得不提它的工作模式的概念。這個(gè)概念,初學(xué)者容易犯暈。IA-32有四個(gè)工作模式,其中兩個(gè)要知道:保護(hù)模式(protectdmode)和實(shí)模式(real-addressmode)。計(jì)算機(jī)為每個(gè)Byte的內(nèi)存空間都定了一個(gè)地址。CPU的工作需要尋址,就是尋指令的相關(guān)參數(shù)的地址。而后到這個(gè)地址,把它們抓進(jìn)CPU,配合指令來執(zhí)行。16位CPU8088實(shí)際20位地址線,可以尋址1M,可是存放器是16位的。也就是說一個(gè)存放器缺乏以確定一個(gè)物理地址。Intel提出了段〔segment〕的概念。把一個(gè)尋址過程分兩步。或者說人為的把物理地址分成段。即:先指定一個(gè)段地址,而后指定在這個(gè)段里的偏移地址〔offset〕。此為段的第一個(gè)意義。這個(gè)意義下,段可以理解"為一個(gè)20位物理地址的前幾位〞。隨著IntelCPU真的實(shí)現(xiàn)了32位,段的這個(gè)意義或者作用。不過為了兼容以前的程序,Intel提出了模式的概念,那就是為了兼容以前的16位的CPU,32位的CPU可以模擬成一個(gè)老CPU,這是32位CPU的實(shí)模式同時(shí)32位CPU還可以工作在另外一個(gè)可以充分發(fā)揮其32位性能的模式,也就是保護(hù)模式。保護(hù)模式不但是32位的,而且此時(shí)還加進(jìn)了為操作系統(tǒng)提供些好處的功能。特別是能夠保護(hù)操作系統(tǒng)的代碼不被操作系統(tǒng)之上的應(yīng)用程序破壞的功能。這就是所謂的保護(hù)二字的涵義。還有對(duì)多任務(wù)的支持等。CPU工作在保護(hù)模式下,又分出了4個(gè)特權(quán)級(jí)別,目的是便于操作系統(tǒng)對(duì)其上的應(yīng)用程序進(jìn)展管理。所謂的ring0~ring3。windows操作系統(tǒng)只用到了兩個(gè),ring0和ring3。ring0下的代碼可以讓CPU做任何可以做的事兒,ring3有很多限制。操作系統(tǒng)引導(dǎo)后,搶先把自己置成ring0狀態(tài),同時(shí),對(duì)操作系統(tǒng)之上的程序他有選擇的設(shè)置他們的級(jí)別。例如設(shè)備驅(qū)動(dòng),一般它們被操作系統(tǒng)置成ring0,而普通的應(yīng)用程序被置成ring3.在這里要樹立一個(gè)概念。從程序員角度來看,操作系統(tǒng)可以看成對(duì)CPUISA層的一個(gè)擴(kuò)展。即:操作系統(tǒng)為ISA層增加了新的"指令〞和功能。事實(shí)上,很多操作系統(tǒng)是固定在硬件里的,例如網(wǎng)絡(luò)交換機(jī)和有些路由器等。有了這個(gè)概念,就很容易理解以后MASM為何要分對(duì)"ISA層〞編程還是對(duì)"ISA加操作系統(tǒng)〞編程。第二節(jié),介紹處理器的內(nèi)存管理模式早期的CPU無所謂內(nèi)存管理模式,程序指定絕對(duì)的內(nèi)存地址,處理器到這個(gè)地址抓指令參數(shù)?,F(xiàn)在CPU都不這樣了〔當(dāng)然,CPU工作在實(shí)模式下,仍然是這樣〕。這樣對(duì)內(nèi)存沒有任何處理,既不利于對(duì)CPU之上操作系統(tǒng)對(duì)程序的控制,同時(shí),也不利于程序的編程和移植。所以IA-32CPU增加了內(nèi)存管理模塊,即:M
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 社區(qū)防災(zāi)減災(zāi)工作總結(jié)范本總結(jié)
- 單招職測(cè)考試題及答案
- 合伙企業(yè)試題及答案
- 培訓(xùn)活動(dòng)總結(jié)
- 知識(shí)題庫(kù)-電廠燃環(huán)檢修崗位入職考試題及答案
- 保安員防詐騙知識(shí)培訓(xùn)課件
- 圍養(yǎng)殖治理措施方案(3篇)
- 金屬材料-課件(人教版九年級(jí)下冊(cè))
- 風(fēng)險(xiǎn)審批績(jī)效方案(3篇)
- 保安員基本消防知識(shí)培訓(xùn)課件
- 醫(yī)院護(hù)理培訓(xùn)課件:《母嬰同室病房醫(yī)院感染預(yù)防與控制》
- 國(guó)際尿失禁咨詢委員會(huì)尿失禁問卷表
- 面試性格測(cè)試表
- XXX加油站風(fēng)險(xiǎn)分級(jí)管控臺(tái)賬
- 特種設(shè)備安全管理-使用知識(shí)
- H35-462(5G中級(jí))認(rèn)證考試題庫(kù)(附答案)
- HY/T 122-2009海洋傾倒區(qū)選劃技術(shù)導(dǎo)則
- GB/T 19666-2019阻燃和耐火電線電纜或光纜通則
- GA/T 1241-2015法庭科學(xué)四甲基聯(lián)苯胺顯現(xiàn)血手印技術(shù)規(guī)范
- 小學(xué)和初中科學(xué)教學(xué)銜接
- 制造執(zhí)行系統(tǒng)的功能與實(shí)踐最新ppt課件(完整版)
評(píng)論
0/150
提交評(píng)論