匯編語言上機(jī)指導(dǎo).ppt_第1頁
匯編語言上機(jī)指導(dǎo).ppt_第2頁
匯編語言上機(jī)指導(dǎo).ppt_第3頁
匯編語言上機(jī)指導(dǎo).ppt_第4頁
匯編語言上機(jī)指導(dǎo).ppt_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、匯編語言上機(jī)指導(dǎo)及示例、習(xí)題,匯編語言上機(jī)過程,一、上機(jī)前的軟件準(zhǔn)備:MS-DOS操作系統(tǒng)(如:MSDOS6.22 , MSDOS7.0 等)文本編輯器 (如:EDIT.COM , TURBO.EXE , TC.EXE , C.EXE 等)匯編程序 (如:MASM.EXE , ASM.EXE 等)連接程序 (如:LINK.EXE 等)調(diào)試程序 (如:DEBUG.EXE 等),二、匯編程序建立過程: 通過 a.建立匯編源程序b.編譯為目標(biāo)文件d.連接為可執(zhí)行文件 c.不通過,重新修改(語句錯(cuò)誤) f.不正確,用調(diào)試工具調(diào)試,重新修改(邏輯錯(cuò)誤) e運(yùn)行 正確 g.完成,三、現(xiàn)在對(二)的每一個(gè)標(biāo)

2、有字母的過程(PROCEDURE)進(jìn)行詳細(xì)說明PROCEDURE a:建立匯編源程序(即:建立 文件名.asm)這個(gè)過程就相當(dāng)于我們在紙上編寫源程序代碼一樣,只不過是將紙變?yōu)榱擞?jì)算機(jī),這個(gè)過程也稱源代碼錄入。將源程序代碼錄入計(jì)算機(jī)的方法很多,下面將介紹具體方法。1.通過MD-DOS自帶的EDIT.EXE文本編輯器進(jìn)行輸入,在DOS提示符下鍵入:EDIT回車,這時(shí)如果你系統(tǒng)內(nèi)可調(diào)用時(shí),EDIT的操作畫面便會出現(xiàn)在屏幕上,你就可在提示下進(jìn)行錄入了,當(dāng)錄入完畢后,選擇存盤并給你輸入的文件起一個(gè)文件名,形式:filename.asm ;(其中filename為你起的文件名,由1-8個(gè)字符組成),asm

3、 是為匯編程序識別而必須加上去的,不可更改。存盤后在DOS下可用DOS命令DIR來查看,如果看到了所存的文件存在,就可以進(jìn)行進(jìn)程b。2.如果你的系統(tǒng)中沒有EDIT,也可用你所熟悉的文本編輯器進(jìn)行錄入、編輯,如可用c語言和pascal語言的文本編輯器來編輯,最后將文件存為filename.asm的形式即可。,PROCEDURE b:編譯目標(biāo)文件(即:編譯為.obj .lst .crf文件)這個(gè)過程計(jì)算機(jī)將把你編的正確的源代碼編譯為機(jī)器語言、程序清單及交叉引用表的目標(biāo)文件。如果此時(shí)你的程序有語句錯(cuò)誤,系統(tǒng)將報(bào)錯(cuò),并指出在第幾行,什么類型的錯(cuò)誤,你可根據(jù)提示去逐一修改。現(xiàn)介紹具體過程:在DOS提示符

4、下鍵入MASM filename回車(注:你系統(tǒng)內(nèi)的匯編程序?yàn)镸ASM.EXE,如果你系統(tǒng)的匯編程序?yàn)锳SM.EXE時(shí),便將命令變?yōu)锳SM filename回車。其中filename為你剛才在PROCEDURE a 中建立的文件名)這時(shí)匯編程序的輸出文件可以有三個(gè)(分別:.obj .lst .crf),便會出現(xiàn)三次提問,在這可以一路回車即可。下面顯示的信息是源程序中的錯(cuò)誤個(gè)數(shù),如果為0則表示順利通過,就可進(jìn)行進(jìn)程c。但如果不為0就說明有錯(cuò)誤,并指出錯(cuò)誤出現(xiàn)的行,可依據(jù)這個(gè)提示去進(jìn)行修改。但如果錯(cuò)誤太多還未等看清就顯示過去了,可用如下命令形將錯(cuò)誤信息存于一個(gè)你指定的文件,再用文本編輯器去查看。

5、MASM filename filen (filen為你起的一個(gè)沒用過的文件名,用以存放出錯(cuò)信息)以后可查看filen來得到出錯(cuò)信息。,PROCEDURE c:編譯不通過,重新修改(錯(cuò)誤類型:源程序語句不合法)在執(zhí)行過PROCEDURE b后,如有出錯(cuò)信息時(shí),就要我們自己按PROCEDURE c去做,而不能跳躍到PROCEDURE d去,如果強(qiáng)行執(zhí)行PROCEDURE d將無任何有效結(jié)果?,F(xiàn)在就開現(xiàn)找錯(cuò)吧!首先要清楚,在PROCEDURE b中檢測出的錯(cuò)誤均為每一條語句的語法或用法錯(cuò)誤,它并不能檢測出程序的邏輯設(shè)計(jì)(語句按排位置)錯(cuò)誤,所以就要記好出錯(cuò)的行號。在記錄行號后,就應(yīng)再次執(zhí)行PROC

6、EDURE a,這時(shí)和操作應(yīng)是打開已編好的源程序(以EDIT為例:在DOS提示符下鍵入:EDIT filename.asm回車),依據(jù)行號進(jìn)行修改并存盤,再次進(jìn)行匯編,直至PROCEDURE b通過為止。便可繼續(xù)向下執(zhí)行PROCEDURE d。,下面給出一些常見出錯(cuò)信息,以便查對:1、Register already defined 匯編內(nèi)部出現(xiàn)邏輯錯(cuò)誤2、Unknown symbol type 在符號語句的類型中,有些不能識別的東西3、Symbol is multi-defined 重復(fù)定義一個(gè)符號4、Symbol not defined 符號沒有定義5、Syntax error 語句的語法

7、與任何可識別的語法不匹配6、Symbol is reserved word企圖非法使用一個(gè)匯編程序的保留字(例:定義add為一變量)7、Not proper align/combine type SEGMENT參數(shù)不正確8、One operand must be const 這是加法指令的非法使用9、Operands must be same or 1 abs 這是減法指令的非法使用10、Already have base register 試圖重復(fù)基地址11、Illegal size for item 引用的項(xiàng)的長度是非法的,(如:雙字移位)12、Illegal register value

8、 指定的寄存器值不能放入“reg” 字段13、Must be AX or AL 某些指令只能用AX或AL14、Improper use of segment reg 段寄存器使用不合法(如:mov ds,0)15、Division by 0 or overflow 給出一個(gè)用0作除數(shù)的表達(dá)式16、Value is out of range 數(shù)值大于需要使用的17、CS register illeal usage 試圖非法使用CS寄存器18、DUP is too large for linkerDUP嵌套太長,以至于從連接程序不能得到所要的記錄,PROCEDURE d:連接為可執(zhí)行文件(即:連接

9、為.exe 或.com文件)在這個(gè)過程中一般沒有意外,如果有也就是文件名打錯(cuò)了。形式:在DOS提示符下: LINK filename 回車PROCEDURE e:運(yùn)行編譯好的可執(zhí)行文件當(dāng)PROCEDURE d通過后,會產(chǎn)生一個(gè)可執(zhí)行文件,這時(shí)只需運(yùn)行這個(gè)程序,看它是否按你所想象那樣得出結(jié)果。在試運(yùn)行期間,要盡量試一些臨界狀態(tài),看 程序是否運(yùn)行穩(wěn)定、結(jié)果是否正確。如一切正常,便可進(jìn)入PROCEDURE g了??勺钆碌氖遣籓K,程序產(chǎn)生一些莫名其妙的結(jié)果(你可不要以為是你的計(jì)算機(jī)不聽你的指揮,其實(shí)它是在一絲不茍地按照你編的程序執(zhí)行。我以前總以為我的計(jì)算機(jī)出了毛?。绻窃诳紙錾线@時(shí)千萬不要慌,穩(wěn)

10、住自己的情緒,先不要看計(jì)算機(jī),靜幾分鐘(反正時(shí)間多得是)。這時(shí)就要用到最關(guān)鍵、最常用的一步了,進(jìn)行PROCEDURE f 。PROCEDURE f:用調(diào)試工具調(diào)試,重新修改(邏輯錯(cuò)誤)在這我將介紹用DOS中自帶的調(diào)試程序DEBUG.EXE來進(jìn)行程序調(diào)試、檢查錯(cuò)誤.,首先我們要了解DEBUG的基本用法:1、用于調(diào)試程序時(shí)的輸入格式:DEBUG FILENAME.? 回車其中FILENAME是主文件名,?是擴(kuò)展文件名,例如我們在此前已編譯好了一個(gè)文件,它的名子為:djx.exe 要對它進(jìn)行調(diào)試時(shí)就在DOS提示符下打:DEBUG djx.exe 回車,便可見到 - 提示符,如無任何提示說明正確,可進(jìn)

11、行調(diào)試。2、DEBUG調(diào)試過程中用到的DEBUG命令介紹:(注:在指令中用 括起來的內(nèi)容可缺?。?)D(Dump)顯示指定內(nèi)存單元內(nèi)容(一般用來看數(shù)據(jù)數(shù)的內(nèi)容,即DS段):格式:d地址 從地址指定的內(nèi)存單元顯示128個(gè)字節(jié)的內(nèi)容地址缺省時(shí),顯示上一個(gè)DUMP命令后面的內(nèi)容d 地址范圍 顯示指定范圍內(nèi)的內(nèi)存內(nèi)容。示例:-d100 顯示從DS段100H開始的內(nèi)容(以十六進(jìn)制顯示)2)E(Enter)修改存儲單元內(nèi)容(一般在DS段)格式:e 地址 數(shù)據(jù) 用給定的數(shù)據(jù)代替指定范圍的存儲單元內(nèi)容e 地址 修改一個(gè)指定內(nèi)存單元的內(nèi)容示例:-e ds:200 djxFF00AA 就可將DS段從200開始至2

12、05的內(nèi)容替換為64 6A 78 FF 00 AA3)G(GO)運(yùn)行命令格式:-g =地址斷點(diǎn)地址1 斷點(diǎn)地址2 .斷點(diǎn)地址10從指定地址開始執(zhí)行程序(如地址缺省從當(dāng)前CS:IP開始),運(yùn)行至斷點(diǎn)地址1停止,顯示所有寄存器及標(biāo)志位內(nèi)容與下一條指令,如后面還有斷點(diǎn),可鍵入g,繼續(xù)執(zhí)行。示例:-g001a 則執(zhí)行從當(dāng)前cs:ip至001a的指令注意:地址設(shè)置必須從指令的第一字節(jié)設(shè)起。,4)T(Trace)執(zhí)行一條語句格式: -t =地址 從指定地址起執(zhí)行一條語句后停下來,顯示所有寄存器內(nèi)容及標(biāo)志位的值與下一條指令。如地址缺省則從當(dāng)前CS:IP開始執(zhí)行-t =地址value 從指定地址起執(zhí)行valu

13、e條指令后停止。5)P(proceed)執(zhí)行一個(gè)循環(huán);一個(gè)軟中斷或call子過程格式:-p =地址n示例: mov ah,02hmov dl,41hint 21h此時(shí)用: -p 回車后系統(tǒng)將顯示一個(gè)字符A,如果在這不用P,而改用T,那么系統(tǒng)將進(jìn)入INT 21H的中斷調(diào)用中,出不來,這時(shí)你會誤以為你的程序編錯(cuò)了,一定注意!6)R(register)顯示并可修改寄存器內(nèi)容格式:-r 顯示所有寄存器內(nèi)容-r 寄存器名 修改指定寄存器內(nèi)容(可改:AX,BX,CX,DX,SP,BP,SI,DI,CS,DS,ES,SS,PC,IP,F)7)U(Unassemble)反匯編格式:-u 地址 從指定地址反匯編

14、32個(gè)字節(jié),若地址缺省則從當(dāng)前地址匯編32個(gè)字節(jié)。-u 地址范圍 對指定范圍內(nèi)的存儲單元進(jìn)行反匯編以上是在調(diào)試程序中可能用到的DEBUG命令解釋,DEBUG中還有其它命令,在檢查程序中不會用到,就不再介紹了。,1 data segment2 out1 db Hello world3 ax db My name is DJX4 data ens56 code segment7 assume cs:code;ds:data8 lea dx,out19 mov ah,210 int 21h1112 mov dl,0ah13 mov ah,214 int 21h15 mov dl,0dh16 moo

15、ah,217 int 21h1819 lea dx,ax20 mov ah,21 int 21h22 code ends,Microsoft (R) Macro Assembler Version 5.00Copyright (C) Microsoft Corp 1981-1985, 1987. All rights reserved.Object filename error.OBJ:Source listing NUL.LST:Cross-reference NUL.CRF:End of file encountered on input fileerror.ASM(23): warnin

16、g A4085: End of file, no END directiveOpen segments: DATAerror.ASM(3): warning A4016: Reserved word used as symbol: AXerror.ASM(4): error A2105: Expected: instruction or directiveerror.ASM(16): error A2105: Expected: instruction or directiveerror.ASM(19): error A2049: Illegal use of registerEnd of f

17、ile encountered on input fileerror.ASM(23): warning A4085: End of file, no END directive 51566 + 406450 Bytes symbol space free2 Warning Errors4 Severe Errors,說明這個(gè)程序有錯(cuò)誤,并在第3,4,16,19,23行有錯(cuò),我們再執(zhí)行PROCEDURE c去逐一檢查第三行:3 ax db My name is DJX它的錯(cuò)誤在于AX不能作為變量名,更正:3 out2 db My name is DJX注意剛才我們定義AX為變量時(shí)在后面的程序中用

18、過變量AX在第19行19 lea dx,ax在出錯(cuò)報(bào)告中也報(bào)第19行錯(cuò),因?yàn)椴荒軐X的有效地址賦給DX,更正:19 lea dx,out2這樣一下就解決了兩個(gè)錯(cuò)誤第四行:4 data ens這行為一個(gè)段的結(jié)束,但語句漏打了字母,更正:4 data ends第十六行:16 moo ah,2這行也是語句打錯(cuò),更正:16 mov ah,2第二十三行:出錯(cuò)信息:error.ASM(23): warning A4085: End of file, no END directive說明本程序沒有結(jié)束偽操作,更正:加入:在第七、八行加入地址標(biāo)志: start:原23 end start,執(zhí)行PROCEDU

19、RE a將源程序修改如下:data segmentout1 db Hello worldout2 db My name is DJXdata endscode segmentassume cs:code;ds:datastart:lea dx,out1mov ah,2int 21hmov dl,0ahmov ah,2int 21hmov dl,0dhmov ah,2int 21hlea dx,out2mov ah,9int 21hcode endsend start,再次進(jìn)行PROCEDURE b進(jìn)行編譯,屏幕顯示:Microsoft (R) Macro Assembler Version 5

20、.00Copyright (C) Microsoft Corp 1981-1985, 1987. All rights reserved.Object filename error.OBJ:Source listing NUL.LST:Cross-reference NUL.CRF:51524 + 406492 Bytes symbol space free0 Warning Errors0 Severe Errors本程序在語句上已無錯(cuò)誤。再執(zhí)行PROCEDURE d連接為可執(zhí)行文件(link error回車),屏幕顯示:Microsoft (R) Overlay Linker Versio

21、n 3.60Copyright (C) Microsoft Corp 1983-1987. All rights reserved.Run File ERROR.EXE:List File NUL.MAP:Libraries .LIB:LINK : warning L4021: no stack segment這時(shí)error.exe可執(zhí)行文件已存在,可以執(zhí)行PROCEDURE e來運(yùn)行看一看是否正確在dos提示符下鍵入:error回車(小心!)屏幕顯示:亂碼,并死機(jī)。reset My computer!說明程序在邏輯上有錯(cuò)誤,并且嚴(yán)重。這是就要用PROCEDURE f,用調(diào)試工具調(diào)試,查找錯(cuò)誤。在DOS提示符下鍵入:debug error.exe回車屏幕出現(xiàn) - 提示符,這時(shí)就可以用DEBUG的命令來找錯(cuò)誤了,我首先用d命令來查看數(shù)據(jù)區(qū)和內(nèi)容,發(fā)展所定義的兩個(gè)字符串并不在,數(shù)據(jù)段的段首,而在數(shù)據(jù)段內(nèi)的100h位置上,這時(shí)才想起masm有一個(gè)不成文的規(guī)定,那就是在定義完數(shù)據(jù)段后,所定義的變量均向后100h個(gè)單元,需要我們將ds段寄存器置位,在程序的star

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論