版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
〈篇一部分
DIYIBUFEN
匯編語言程序設(shè)計實驗
?微型計算機原理及應(yīng)用實驗指導(dǎo)?
第1章
程序調(diào)試工具DEBUG的使用
i.i實驗?zāi)康?/p>
(1)熟悉DEBUG的常用命令。
(2)掌握DEBUG下運行簡單匯編語言源程序的過程及方法。
(3)掌握DEBUG調(diào)試匯編語言源程序的過程及方法。
1.2預(yù)備知識
在MS-DOS,Windows98、Windows2000、WindowsXP、Vista和Windows7中都提供有程
序調(diào)試工具DEBUG,其文件名是DEBUG.EXE,可以在命令提示符“>”下運行之。在進
入DEBUG的提示符之后,用戶可以通過DEBUG的匯編命令輸入?yún)R編語言源程序,并
將其匯編成機器語言程序加載存儲到指定的地址空間,然后便可運行、調(diào)試輸入的程序。
使用DEBUG運行匯編語言程序簡單方便,但只能編寫僅含一個代碼段的小型程序,這
對學(xué)習(xí)匯編語言的指令,了解、熟悉指令的功能帶來極大的方便。
1.3DEBUG命令
調(diào)試程序DEBUG有如下的功能特點:
(1)在受控環(huán)境中測試程序;(2)裝
入、顯示、修改任何文件;(3)執(zhí)行
DOS程序;(4)完成對磁盤的讀、寫
操作;
(5)建立或匯編匯編語言程序。
1.啟動DEBUG的命令格式
在命令提示符下啟動DEBUG的完整格式如下:
[drive:][path]DEBUG[d:][p][filename][.exe][param...]
其中:
drive:指定DEBUG文件存放的磁盤驅(qū)動器標識符,DEBUG是操作系統(tǒng)的外部命令,
所以必須把它從磁盤讀入內(nèi)存。若未指定,操作系統(tǒng)將使用當(dāng)前默認磁盤驅(qū)動器。
Path:是操作系統(tǒng)查找DEBUG文件的一個子目錄串表示的路徑。若未指定,DOS將使
用當(dāng)前工作目錄。
注意:在Windows98,Windows2000、WindowsXP和Windows7下,操作系統(tǒng)已經(jīng)把
DEBUG.EXE存放的位置作為命令提示符下查找文件的搜索路徑之一,所以直接輸入
“DEBUG”并按回車鍵就可以啟動DEBUG,勿需指出DEBUG.EXE在機器中存儲的位置。
d:是DEBUG將要調(diào)試的文件所在的磁盤驅(qū)動器。
P:是查找DEBUG將要調(diào)試的文件所需的子目錄路徑。若未指定,DOS使用當(dāng)前目
錄。
filename[.exe]:是DEBUG將要調(diào)試的文件名。param:是將被調(diào)試的程序(或文件)
的命令行參數(shù)。
說明:
①啟動DEBUG后,DEBUG完成初始化操作,若沒有指定調(diào)試的文件,則在啟動DEBUG
后:
?段寄存器CS、DS、ES和SS置為DEBUG程序后的第一個段。?指
令指針寄存器IP置為100H(程序段前綴PSP后的第一個語句)。
?堆棧指針SP置為段末或COMMAND.COM(DOS的命令解釋器)暫駐部分的結(jié)束
地址(其中較小的那個地址)。
?其余通用寄存器均置為0,標志寄存器置為下述狀態(tài):
NVUPEIPLNENAPONC
即:程序狀態(tài)字的OF=0、DF=0>IF=kSF=O、ZF=0、AF=0、PF=O、
CF=Oo
②如果DEBUG命令行含有文件名,段寄存器DS和ES指向PSP。寄存器BX|CX
為程序長度,即讀入文件的字節(jié)數(shù)。
2.DEBUG的單字母命令
表1.】DEBUG使用單字符命令表
命令格式命令格式
匯編A[地址]命名N[設(shè)備:][路徑]文件名[.擴展名]
比較C[范圍]輸出0口地址
轉(zhuǎn)出D[范圍]或[地址]繼續(xù)執(zhí)行P『地址][值]
鍵入E地址[表]退出Q
填入F范圍表寄存器R[寄存器]
執(zhí)行G[=地址][地址[地址…]]搜索S范圍表
十六進制H值值跟蹤T[=地址]或[范圍]
輸入I口地址反匯編U[地址]或[范圍]
裝入L[地址[設(shè)備扇區(qū),扇區(qū)]]寫W[地址[設(shè)備扇區(qū),扇區(qū)]]
移動M范圍地址
DEBUG命令是在DEBUG提示符下,由鍵盤鍵入的。每條命令以單個字母的命令
符開頭,然后是命令的操作參數(shù)。DEBUG命令操作的共同特點有:
(1)DEBUG接受和顯示的數(shù)都用十六進制數(shù)表示,都不用尾標“H”。
(2)命令和參數(shù)都不區(qū)分大、小寫,可以用大寫、小寫或混合方式輸入。
(3)命令和參數(shù)間,可以用定界符分隔(空格、制表符、逗號等)。但是,定界符只是
在兩個相鄰接的16進制數(shù)之間是必需的。因此下面的命令是等效的:
-DCS:100110
-DCS:100,110
-D,CS:100,110
(4)若DEBUG檢查出一個命令的語法錯誤,則DEBUG將用"Error”指出。例如:
-des:100cs:l10
AError
(5)在輸入DEBUG的命令行時,可以用常用的編輯鍵。
(6)可以用Ctrl+Break組合鍵或Ctrl+C組合鍵來中斷一個命令的執(zhí)行,返回到
DEBUG的提示符。
(7)若一個命令產(chǎn)生相當(dāng)多的輸出行時,為了能看清屏幕上的顯示內(nèi)容,可以按Ctrl+S
組合鍵,暫停顯示輸出。
(8)表示地址的參數(shù)通常表示一個內(nèi)存區(qū)域的開始地址和結(jié)束地址,由段地址和偏移地
址兩部分組成。段地址可以用一個段寄存器或4位十六進制數(shù)表示,偏移地址只能用4位
16進制數(shù)表示。段地址和偏移地址之間用冒號作為分隔符。
(9)端口地址只用于輸入輸出命令,是一個兩位的十六進制數(shù)。
(10)參數(shù)中的驅(qū)動器號是指磁盤讀寫操作的驅(qū)動器,0代表驅(qū)動器A,1代表驅(qū)動器
B,2代表驅(qū)動器C,3代表驅(qū)動器D……
3.匯編命令A(yù)(Assemble)
-A[address]
功能:該命令允許鍵入?yún)R編語言語句,并能把它們匯編成機器代碼,相繼地存放在從指
定地址開始的存儲區(qū)中。
說明:
①輸入程序時,以回車結(jié)束一行語句的輸入,同時提示下一行語句的起始地址。如:
^3F:O100
當(dāng)程序輸入結(jié)束時,在提示的地址后面鍵入回車結(jié)束匯編操作,返回DEBUG提示符。②在
DEBUG下鍵入的數(shù)字均看成十六進制數(shù),所以如要鍵入十進制數(shù),則要轉(zhuǎn)換為十六
進制數(shù)后,在鍵入。如100D轉(zhuǎn)換為64H后輸入(仍不能輸入尾
標)。③命令中提供地址的形式有三種:
?段地址:偏移地址^
段寄存器:偏移地址^
偏地址
如果不給出段地址,是用CS的值作為段地址;如果不提供存儲地址,是以CS:0100
作為地址。
4.比較命令C(Compare)
實現(xiàn)內(nèi)存數(shù)據(jù)間的比較,其格式為:
-Crangeaddress
range:是源地址范圍,由〈起始地址》〈終止地址〉指出的一片連續(xù)的內(nèi)存單元,或由(起
始地址>L〈長度)指定的存儲區(qū)域。
addres:目標起始地址。
功能:從range的起始地址單元起,逐個與address以后的單元順序比較,直到源地址
終止為止。遇到有不一致的字節(jié),以〈源區(qū)地址〉〈源區(qū)內(nèi)容》〈目標區(qū)內(nèi)容》〈目標區(qū)地址>
的形式顯示失配單元的內(nèi)容。
例:下面兩條命令是等效的,都將對內(nèi)存中從CS:0100開始的10個字節(jié),與從
CS:1000開始的10個字節(jié)進行比較:
-C01000108,0000
073F:010000CD073F:0000
073F:O10100Z0073F:O001
073F:010Z003E073F:00QZ
O73F:010300A?073F:O003
973F:O10500EA073F:00G5
0?3F:O10600FDO73F:0006
073F:0107GOFF073F:OOO7
0?3F:O1G800AD073F:0OG8
5.顯示存儲單元的命令D(Dump)
-DJaddress]或
-Dfrange]
功能:以兩種形式顯示指定內(nèi)存范圍的內(nèi)容。一種為十六進制形式的內(nèi)容,一種形式為
相應(yīng)字節(jié)的ACII碼,對非字符字節(jié)以代替。
例如,按指定范圍顯示存儲單元內(nèi)容的方法為:
PdlOQlZO
O73F:01000000000000000000-0000000000000000
G?3F:0110000000GOGO000000-000000003400ZE074...
P73F:01Z00O.
其中0100至0120是DEBUG顯示的單元內(nèi)容。左邊用十六進制表示每個字節(jié),右邊用ASCII
字符表示每個字節(jié),表示非字符字節(jié)。這里沒有指定段地址,D命令自動顯示DS段的內(nèi)
容。如果只指定首地址,則顯示從首地址開始的80個字節(jié)的內(nèi)容。如果完全沒有指定地址,
則顯示上一個D命令的最后一個單元的內(nèi)容。
6.修改存儲單元內(nèi)容的命令E(Enter)
輸入命令E,有兩種格式如下:
第一種格式可以用給定的內(nèi)容表來替代指定范圍的存儲單元內(nèi)容。命令格式為:
-Eaddress[list]
其中l(wèi)ist為用空格作為分隔符的字節(jié)數(shù)據(jù)表。
功能:將[list]的內(nèi)容寫入address為起始地址的一片存儲單元。例如:
-EDS:100
0?3F:01O000.
其中F3,X,Y,Z和8D各占一個字節(jié),該命令可以用這五個字節(jié)來替代存儲單元
DS:0100-0104的原先的內(nèi)容。
第二種格式則是采用逐個單元相繼修改的方法。命令格式為:
-Eaddress
功能:顯示address指定的存儲單元內(nèi)容,等待用戶輸入更新值,輸入修改值后按空格
后,又顯示下一單元的內(nèi)容,并等待用戶輸入新值……這樣可以連續(xù)修改多個連續(xù)存儲單元的
值,回車結(jié)束該命令的執(zhí)行。例如:
-ECS:10O
073F:010OGO.
如果需要把該單元的內(nèi)容修改為78,則可以直接鍵入78,再按空格鍵可接著顯示下一
個單元的內(nèi)容,這樣可以不斷修改相繼單元的內(nèi)容,直到Enter鍵結(jié)束該命令為止。
7.填寫內(nèi)存單元命令F(Fill)
-Frangelist
功能:將list中的內(nèi)容逐字節(jié)填入指定的地址范圍,list中的內(nèi)容使用完后會自動重復(fù)使
用。
例如,-F4BA:0100L5F3'XYZ'8D
使04BA:0100-0104單元包含指定的五個字節(jié)的內(nèi)容。如果list中的字節(jié)數(shù)超過指定的
范圍,則忽略超過的項;如果list的字節(jié)數(shù)小于指定范圍,則重復(fù)使用list填入,直到填滿
指定的所有單元為止。
8.執(zhí)行程序命令G(Go)
-G[=address1][address2[address3...]]
例如:
-G01000108
AX=0000BX=00O0CX=0000DX=0000SP=0OFDBP=0O0OSI=0OO0DI=OO00
?S=073FES=073FSS=073FCS=073FIP=@100NUUPEIPLNZNAP0NC
O73F:O10O00O0ADD[BX+SI],ALDS:0OOO=CD
功能:從指定地址開始運行程序。其中,addressl指定了運行的起始地址,如不指定則
從當(dāng)前的CS:IP開始運行,后面的地址均為斷點地址。當(dāng)指令執(zhí)行到斷點時,就停止執(zhí)行并
顯示當(dāng)前所有寄存器及標志位的內(nèi)容和下一條將要執(zhí)行的指令。若不指定斷點,則運行到程
序正常結(jié)束為止。
注意:若程序不能正常結(jié)束則可導(dǎo)致退出DEBUG狀態(tài),返回命令提示符,甚至死機。
9.十六進制算術(shù)運算指令H(Hex)
完成兩個十六進制數(shù)的加、減運算,格式為:
-Hvaluelvalue2
第1章程序調(diào)試工具DEBUG的使用?
功能:求十六進制數(shù)valuel和value2的和與差,并顯示結(jié)
果。例:
-haf
-haf
9019FFFB
顯示的第一個數(shù)為和,第二個數(shù)為差。
10.端口輸入命令I(lǐng)(Input)
顯示指定輸入接口中輸入的數(shù)據(jù)。其格式為:
-Iport
功能:將指定端口port輸入的數(shù)據(jù)顯示在屏幕上。
11.裝入命令L(Load)
裝入命令把磁盤上指定扇區(qū)范圍的內(nèi)容裝入存儲器從指定地址開始的區(qū)域中?其格式為:
-L[address][drive][firstsector][number]
功能:把drive上,從firstsector起,共number個邏輯扇區(qū)上的所有字節(jié),順序讀入指定
的內(nèi)存address的一片連續(xù)單元。當(dāng)L后的參數(shù)缺省時,必須在L之前由N命令指定(或進
入DEBUG時一并指定)所讀盤的文件名,L執(zhí)行后將文件裝入內(nèi)存CS:0100開始的存儲區(qū)中。
說明:
①address為內(nèi)存地址,缺省值為CS:0100o
②drive為驅(qū)動器號,0表示驅(qū)動器A,1表示驅(qū)動器B,2表示驅(qū)動器C,3表示驅(qū)
器D……③firstsector為讀取磁盤邏輯扇區(qū)的起始號,其取值為從0開始的正整數(shù)。
?number是讀取磁盤的邏輯扇區(qū)數(shù)。
12.內(nèi)存數(shù)據(jù)移動命令M(Move)
格式:
-Mrangeaddress
其中源地址和目標地址都只輸入偏移量,段寄存器為DS。
功能:把range中的數(shù)據(jù)移動到目標地址address開始的一片連續(xù)的存儲區(qū)。
13.命名命令N(Name)
-Nfilespecs[fllespecs]
功能:把兩個文件標識符格式化在CS:5CH和CS:6CH的兩個文件控制塊中,以便在
其后用L或W命令把文件裝入內(nèi)存或存入磁盤。filespecs的格式可以是:
[d:][path]filename[.ext]
例如:
-Nmyprog.dat
-L
可把文件myprog.dat裝入存儲器。
14.端口輸出命令0(Output)
向指定的輸出接口輸出數(shù)據(jù)。其格式為:
-Oportbyte
功能:把字節(jié)數(shù)據(jù)byte從指定端口port輸出。
15.逐行跟蹤程序命令P(Proceed)
-P[=address][number]
功能:功能同下面介紹的命令To不同的是,當(dāng)P命令執(zhí)行的是CALL或INTn指令
時,將一次執(zhí)行完整個子程序或中斷處理程序,通過寄存器返回執(zhí)行的結(jié)果。
16.退出DEBUG命令Q(Quit)
-Q
例如:
功能:退出DEBUG,返回命令提示符。本命令無存盤功能,如需存盤應(yīng)先使用W命
令。檢查和和修改寄存器內(nèi)容的命令R(Register)
該命令有三種不同的格式:
(1)顯示CPU內(nèi)所有寄存器內(nèi)容和標志位狀態(tài),其格式為:
-R
其中標志位狀態(tài)的含義可見表1.2o
表1.2標志位含義
標志名標志為1標志為0
OF溢出(是/否)OVNV
DF方向(減量/增量)DNUP
IF中斷(允許/關(guān)閉)E1DI
SF符號(負/正)NGPL
ZF零(是/否)ZRNZ
AF輔助進位(是/否)ACNA
PF奇偶(偶/奇)PEPO
CF進位(是/否)CYNC
hX=0O0OBX=0OGOCX=0GO0DX=OOG0SP=00FDBP=O0O0SI=0000DI=OG00
B)S=073FES=073FSS=073FCS=073FIP=01OOMUUPEIPLNZNAP0NC
P?3F:010O0000ADD[BX+SU,ALDS:GO0O=CD
(2)顯示和修改某個寄存器內(nèi)容,其格式為:
-Rregistername
例如,鍵入
-rax
系統(tǒng)將響應(yīng)如下:
IX0000
即AX寄存器的當(dāng)前內(nèi)容為0000,如不修改則按Enter鍵,否則鍵入欲修改的內(nèi)容如:
-rbx
則把BX寄存器的當(dāng)前內(nèi)容修改為059F。
Frbx
ffiX0000
(3)顯示和修改標志位狀態(tài),命令格式為:
-RF
系統(tǒng)將響應(yīng),如:
卜RF
MUUPEIPLMZNAP0MC-A
此時如不修改其內(nèi)容可按Enter鍵,否則建入欲修改的內(nèi)容,如:
OVDNEINGZRACPECY-PONZDINV
即可,鍵入的順序是任意的。
17.搜尋指定數(shù)據(jù)命令S(Search)
格式:
-Srangelist
功能:在內(nèi)存指定范圍內(nèi)搜索list中的數(shù)據(jù),找到后顯示元素所在地址。
例:
-scs:0100LA37
0B25:0106
表示在[0B25:0106]處找到了一個“7”。
18.逐指令跟蹤程序命令T(Trace)
跟蹤命令T有兩種格式:
(1)逐條指令跟蹤
-T[=address]
例如:-T()100部分顯示如下
AX=0000BX二0000CX=OO00DX=OGOOSP=OOFFBP二0GO0SI=O000DI=0000
DS=073FES=0000SS=073FCS=073FIP=030ONUUPEINGNZNAP0NC
0?3F:03O00000ADD[BX*SU,ALDS:0OO0=CD
功能:從指定地址起執(zhí)行一條指令后停下來,顯示所有寄存器內(nèi)空及標志位的值。如未指
定則從當(dāng)前的CS:IP開始執(zhí)行。
(2)多條指令跟蹤
-T[=address][value]
功能:從指定地址address起執(zhí)行value條指令后停下來。若不給出地址address,則執(zhí)
行CS:IP指定的指令;若沒有提供要執(zhí)行的指令條數(shù),則只執(zhí)行一條指令。
注意:
①若T命令執(zhí)行的是CALL或INTn指令時,將跟蹤到子程序或中斷服務(wù)程序內(nèi)部,
逐條執(zhí)行指令。
②在開始跟蹤執(zhí)行程序的第一條指令時,必須給出程序第一條指令的地址,若繼續(xù)執(zhí)行后
繼指令只需要簡單的輸入命令To
19.反匯編命令U(Unassemble)
反匯編是指對內(nèi)存指定區(qū)域的內(nèi)容,以匯編語句形式顯示,同時顯示地址用相應(yīng)的機器
碼。反匯編命令U有兩種格式。
(1)從指定地址開始,反匯編32個字節(jié),其格式為:
-U[address]
例如:
00QaDDCxsL
00WaDDCxsL
00ADDCxsL
00aDDCxsL
00cDDCxsL
00修aDDExsL
CL
00士aDDxs
DCxL
00正aDs
00aDDCxsL
0NaDDCxsL
-1工
DDCxL
01das
06aDDCxsL
0工eaDDCxsL
0LDDCxsL
1cg
0CknHA
0Lcs,
1E;
0FE
-u100J.
?微型計算機原理及應(yīng)用實驗指導(dǎo)?
如果地址被省略則從上一個U命令的最后一條指令的下一個單元開始顯示32個字節(jié)。
(2)對指定范圍內(nèi)的存儲單元進行反匯編,格式為:
-U[range]
例如:
-U10O10CI
O73F:01000000ADD[BX+SI],AL
073F:O10Z0000ADD[BX+SH,AL
073F:01O40000ADD[BX+SU,AL
073F:O1060000ADD[BX+SH,AL
073F:01G80000ADD[BX+SH,AL
073F:01QA0000ADD[BX+SD,AL
073F:O10C0000ADD[BX+SU,AL
說明:在進行反匯編操作時,一定要確認指令的起始地址后在操作,否則將得不到正確
的結(jié)果。連續(xù)進行反匯編操作時.,可以省略地址,DEBUG自動以上-U命令操作結(jié)束后的
下一地址為反匯編的起始地址。
20.寫命令W(Write)
寫命令W有兩種功能:
(1)把數(shù)據(jù)寫入磁盤的指定扇區(qū)。其格式為:
-W[address][drive][firstsector][number]
功能:把內(nèi)存中,從地址address開始的連續(xù)區(qū)域的數(shù),寫入驅(qū)動器drive指定的磁盤
中,寫入磁盤的第一個扇區(qū)為firstsector,扇區(qū)數(shù)為numbero
(2)把數(shù)據(jù)寫入指定的文件中。其格式為:
-W[address]
功能:此命令把指定的存儲區(qū)中的數(shù)據(jù)寫入由CS:5CH處的文件控制塊所指定的文件
中。如未指定地址則數(shù)據(jù)從CS10100開始。要寫入文件的字節(jié)數(shù)應(yīng)先放入BX和CX中。
1.4示例
【例1.1]DEBUG下運行如下程序。
MOVDL,IH;字符3的ASCII碼送DL
MOVAH,;使用DOS的2號功能調(diào)用
INT21H;進入功能調(diào)用,輸出‘3'
?io?
第1章程序調(diào)試工具DEBUG的使用?
INT20H;BIOS中斷服務(wù)程序,正常結(jié)束。
該程序運行結(jié)果是在顯示器上輸出一個字符“3”。如果要輸出其他字符,請改變程序中
'33H'為相應(yīng)字符的ASCII碼。
運行步驟:
(1)進入DEBUG
在命令提示符下,鍵入DEBUG<Enter>,即
C:\>DEBUG<Enter>
屏幕顯示:-是進入DEBUG的提示符,在該提示符下可鍵入任意DEBUG命
令?,F(xiàn)在用A命令輸
入程序如下:
(2)輸入程序并匯編
-alOO<Enter>
0B25:0100movdl,33<Enter>
0B25:0102movah,2<Enter>
0B25:0104int21<Enter>
0B25:0106int20<Enter>
0B25:0108<Enter>
至此程序己輸入完,匯編成機器指令,順序存放于CS段100H起始的8個存儲單元。如
果在匯編后想看一下機器指令是什么樣子的話,方法之一是可以用反匯編命令U作如
下操作:
(3)反匯編
-ulOO108<Enter>
0B25:0100B233MOVDL,33
0B25:0102B402MOVAH,02
0B25:0104CD21INT21
0B25:0106CD20INT20
右邊是匯編指令,中間是該匯編指令的機器碼,左邊是存放該條指令的內(nèi)存單元地
址。(4)運行程序
-G<Enter>
3
Programterminatednormally
(5)寫COM文件
-RBX<Enter>
BX0000
:<Enter>
?RCX<Enter>
?11?
?微型計算機原理及應(yīng)用實驗指導(dǎo)?
CX0000:A
<Enter>
-NC:\TEMP\EXCOM.COM<Enter>
-W<Enter>
Writing0000Abytes
其中(BX)*10000H+(CX)用于指定所寫的字節(jié)數(shù),(BX)為該數(shù)的高16位,(CX)
為該數(shù)的低16位。因此,上面的過程實際上是要將0AH個字節(jié)寫入文件
EXCOM.COM,該文件保存在C盤的TEMP子目錄下。
(6)輸入機器指令程序
-E200B233B402CD21CD20<Enter>
(7)顯示內(nèi)存
-D200208<Enter>
169C:0200B233B402CD21CD20-61.3...!..a
(8)執(zhí)行機器指令程序
-G=200<Enter>
3
Programterminatednormally
(9)退出DEBUG返回DOS,執(zhí)行EXCOM.COM文件
-Q
(10)在命令提示符下執(zhí)行程序
C:\TEMP>EXCOM<Enter>
3
C:\TEMP>
【例1.2]進入DEBUG,用A命令輸入字節(jié)數(shù)據(jù)加法程序,用R命令顯示狀態(tài),并
用T命令單條執(zhí)行。
(1)進入并用A命令寫入?yún)R編源程序
C:\DOS>DEBUG
<Enter>-A<Enter>
1392:0100MOVAH,3<Enter>
1392:0102MOVAL,2<Enter>
1392:0104ADDAL,AH<Enter>
1392:0106INT20<Enter>
1392:0108<Enter>
(2)用R命令顯示寄存器狀態(tài)
?12?
第1章程序調(diào)試工具DEBUG的使用?
-R<Enter>
AX=0000BX=0000CX=0000DX=0000SP=OOOOBP=OOOOSI=OOOODI=OOOO
DS=1392ES=1392SS=1392CS=1392IP=0100NVUPEIPLNZNAPO
NC
1392:0100B403MOVAH,03
(3)用G命令執(zhí)行,但看不到計算結(jié)果
-G<Enter>
Programterminatednormally
(4)用T命令單條執(zhí)行,可以看到中間結(jié)果
-T
AX=0300BX=0000CX=0000DX=0000SP=0000BP=0000SI=0000DI=0000
DS=1392ES=1392SS=1392CS=1392IP=0102NVUPEIPLNZNAPONC
1392:0102B002MOVAL,02
-T
AX=0302BX=0000CX=0000DX=0000SP=0000BP=0000SI=0000DI=0000
DS=1392ES=1392SS=1392CS=1392IP=0104NVUPEIPLNZNAPONC
1392:010400E0ADDAL,AH
(5)再執(zhí)行T命令,可以看到最終結(jié)果
(AL)=5
-T
AX=0305BX=0000CX=0000DX=0000SP=0000BP=0000SI=0000DI=0000
DS=1392ES=1392SS=1392CS=1392IP=0106NVUPEIPLNZNAPONC
1392:0106CD02INT20
-T
AX=0305BX=0000CX=0000DX=0000SP=0000BP=0000SI=0000DI=0000
DS=1392ES=1392SS=1392CS=011CIP=1094NVUPDIPLNZNAPONC
011C:109490NOP
(6)退出
-Q<Enter>
C:\>
1.5實驗題
【實驗1.1]在DEBUG下運行下述程序,查看執(zhí)行結(jié)果,并將其作為可執(zhí)行文件存入
C盤。
MOVAX,OFEH;被乘數(shù)OFEH送AX
?13?
?微型計算機原理及應(yīng)用實驗指導(dǎo)?
MOVCL,2
SHLAX,CL;被乘數(shù)乘以4,結(jié)果送AXMOVBX,
AX;被乘數(shù)乘以4的結(jié)果送BX保留
MOVCL,2
SHLAX,CL;被乘數(shù)乘以16,結(jié)果送AXADDAX,
BX;被乘數(shù)乘以20,結(jié)果在AX中
MOV[300H],AX;將積存入DS段第300H-301H號內(nèi)存單元
MOVAH,4CH;將功能號4cH送AH
INT21H;執(zhí)行DOS的4CH號功能調(diào)用,結(jié)束程序返回DOS。
該程序運行結(jié)果是將0FEH乘以14H,結(jié)果放在DS段第300H-301H號內(nèi)存單元
中。(1)進入DEBUG,顯示300H至301H號內(nèi)存單元內(nèi)容
C:\>DEBUG<Enter>
-D300301<Enter>
1392:03000000
(2)用A命令裝入程序段并匯編
-A<Enter>
1392:0100MOVAX,OFE<Enter>
1392:0102MOVCL,2<Enter>
1392:0104SHLAX,CL<Enter>
1392:0106MOVBX,AX<Enter>
1392:0108MOVCL,2<Enter>
1392:010ASHLAX,CL<Enter>
I392:0l0CADDAX,BX<Enter>
1392:010EMOV[300],AX<Enter>
1392:0111MOVAH,4C<Enter>
1392:01BINT21<Enter>1392:0116
<Enter>
(3)用T命令執(zhí)行到斷點處(程序正常結(jié)束前)停止
-T=100,8<Enter>
AX=13D8BX=3F80CX=0000DX=0000SP=OOOOBP=0000SI=0000DI=0000
DS=1392ES=1392SS=1392CS=1392IP=0111NVUPDIPLNZNAPONC
1392:0111B44CMOVAH,4C
(4)用D命令顯示300H至301H的內(nèi)容(最終結(jié)果)
-D300301<Enter>
1392:0300D813..
(5)用R命令指定寫盤文件長度
第1章程序調(diào)試工具DEBUG的使用?
-RBX<Enter>
BX3F80
:0<Enter>
-RCX<Enter>
CX0000
:16<Enter>
(6)用N命令命名寫盤文件
-NC:\TEMP\YWZCHF.COM<Enter>
(7)用W命令寫盤
-W<Enter>Writing
00016bytes
(8)用Q命令退出DEBUG環(huán)境,返回命令提示符
-Q<Enter>
C:\>
(9)在DOS環(huán)境運行
YWZCHF.COMC:\TEMP>YWZCHF
<Enter>C:\TEMP>(10)將
YWZCHF.COM裝入內(nèi)存運行
C:\TEMP>DEBUG<Enter>
-NC:\TEMP\YWZCHF.COM
<Enter>-L<Enter>
-T=100,8<Enter>
AX=13D8BX=3F80CX=0000DX=0000SP=0000BP=0000SI=0000DI=0000
DS=1392ES=1392SS=1392CS=1392IP=0111NVUPDIPLNZNAPONC
1392:0111B44CMOVAH,4C
-D300301<Enter>
1392:0300D813
(11)用Q命令退出DEBUG環(huán)境,返回DOS
-Q<Enter>
C:\>
【實驗1.2]在DEBUG環(huán)境下,送入一個加法源程序并匯編成可執(zhí)行代碼;將其作為可執(zhí)行
文件JIAFA.COM存儲到C盤;在DOS命令行執(zhí)行可執(zhí)行文件JIAFA.COM;進入DEBUG,
將可執(zhí)行文件JIAFA.COM裝入內(nèi)存CS:100H處運行,并用T命令查看運算結(jié)果。
C:\TEMP>debug
<Enter>-A<Enter>
169C:0100MOVAX,8A6D<Enter>
169C:0103ADDAX,0382<Enter>
?15?
?微型計算機原理及應(yīng)用實驗指導(dǎo)?
169C:0106MOV[0200],AX<Enter>
169C:O1O9MOVAH,4C<Enter>
169C:010BINT21<Enter>
169C:O1OD<Enter>
-RBX<Enter>
BX0000
:<Enter>
-RCX<Enter>
CX0000
:D<Enter>
-NC:\TEMP\JIAFA.COM<Enter>
-W<Enter>
-Q<Enter>
C:\TEMP>
C:\TEMP>DEBUG<Enter>
-NAJIAFA.COM
<Enter>-L<Enter>
-G<Enter>
Programterminated
normally-T=100,3<Enter>
AX=8DEFBX=0000CX=0000DX=0000SP=OOOOBP=OOOOSI=0000DI=0000
DS=1392ES=1392SS=1392CS=1392IP=0109NVUPDIPLNZNAPONC
1392:0111B44CMOVAH,4C
-D200201<Enter>
169C:0200EF8D
-Q<Enter>
C:\TEMP>
,16?
第2章匯編語言源程序的上機過程?
第2章
匯編語言源程序的上機過程
2.1實驗?zāi)康?/p>
(1)熟悉匯編語言源程序上機的一般過程和方法。
(2)掌握宏匯編程序MASM5.1和鏈接程序L1NK3.6的使用方
法。(3)了解DEBUG調(diào)試匯編語言源程序的過程及方法。
預(yù)備知識
匯編語言源程序上機實驗的操作一般分為以下四個步驟進行。
1.編輯源程序
利用文本編輯工具(如命令提示符下的EDIT、WINDOWS下的記事本等),生成一個
匯編語言源程序的純文本文件.ASM。在匯編語言源程序中,一行只能寫一條語句,以回車結(jié)
束。例如:
;源程序名:HELLO.ASM;
功能:顯示一個字符串
datasegment
mesagedb"Howdoyoudo.",Odh,Oah,24h
dataends
codesegment
assumecs:code,ds:data
start:movax,data
movds,axlea
dx,mesage
movah,09h
int21h
movah,4ch
int21h
codeends
?17?
?微型計算機原理及應(yīng)用實驗指導(dǎo)?
endstart
在命令提示符下,起動EDIT編輯上述匯編語言源程序的格式為:
C:\temp>edithello.asm
編輯存盤后,便可以在當(dāng)前目錄下生成一個源程序文件hello.asmo
2.匯編源程序
利用匯編器(如MASM5.1、MASM6.il或TASM)對源程序進行匯編,生成目標代碼
文件.OBJ。匯編器按匯編語言的語法檢查源程序,如果源程序中有語法錯誤的行,就不能生
成目標代碼文件。在此種情況下,就要回到第一步,重新編輯源程序,修改語法錯誤的行。
當(dāng)發(fā)現(xiàn)源程序中的某些行含可疑成分或不確定因素時,匯編器會給出警告信息,但仍按缺省
處理辦法生成目標代碼文件。這種情況下,可以重新編輯源程序,消除可疑成分或不確定因
素。
總之,只有匯編器沒有報任何出錯信息和警告信息,生成目標代碼文件,才能結(jié)束編輯
源程序和匯編源程序這兩步的工作。
如果匯編程序MASM.EXE,與源程序文件都存放在當(dāng)前目錄下,上述源程序進行匯編
的格式為:
C:\temp\masmhello.asm
Microsoft(R)MacroAssemblerVersion5.10
Copyright(C)MicrosoftCorp1981,1988.Allrightsreserved.
Objectfilename[hello.OBJ]:<Enter>
Sourcelisting[NUL.LST]:<Enter>
Cross-reference[NUL.CRF]:<Enter>
48910+446461Bytessymbolspacefree
0WarningErrors
0SevereErrors
查看當(dāng)前目錄,就可以見到生成的目標代碼文件hello.objo
3.鏈接目標程序
利用鏈接器(如LINK和TLINK)鏈接目標代碼程序和庫函數(shù)代碼生成可執(zhí)行程序文
件.EXE。鏈接器對一個單模塊的連接不會發(fā)生鏈接錯誤,總可以順利地生成可執(zhí)行程序文
件。當(dāng)多個模塊鏈接,或者與庫中的函數(shù)連接時,如果在目標代碼文件或者庫中找不到所需
要的連接信息,鏈接器就會發(fā)出錯誤提示信息,而不生成可執(zhí)行程序文件。這就需要修改源
程序,使得匯編器生成的目標代碼文件含有連接器需要的信息。這樣的修改主要是對偽指令
和匯編語言操作符的修改,或者是對名字符號的修改。這時,又要回到第一步編輯源程序,
重新操作第二步匯編源程序。
如果鏈接程序LINK.EXE,與目標代碼文件hello.obj都存放在當(dāng)前目錄下,上述程序
進行鏈接的格式為:
C:\temp>linkhello.obj<Enter>
Microsoft(R)OverlayLinkerVersion3.60
第2章匯編語言源程序的上機過程?
Copyright(C)MicrosoftCorp1983-1987.Allrightsreserved.
RunFile[HELLO.EXE]:<Enter>
ListFile[NUL.MAP]:<Enter>
Libraries[.LIB]:<Enter>
LINK:warningL4021:nostacksegment
查看當(dāng)前目錄,就可以見到鏈接生成的可執(zhí)行程序文件hello.exe?最后一行的信息是
LINK給出的警告信息,表示沒有堆棧段。該警告信息不影響可執(zhí)行程序文件的生成,生成
的可執(zhí)行程序使用缺省的堆棧(操作系統(tǒng)提供的程序堆棧)。利用動態(tài)調(diào)試工具可以看到缺
省堆棧的位置。
4.調(diào)試可執(zhí)行程序
查執(zhí)行程序文件生成后,就可以在提示符下執(zhí)行該程序。上述程序執(zhí)行的格式是:
C:\temp>hello<Enter>
Howdoyoudo.
如果程序執(zhí)行情況與預(yù)期不同,或執(zhí)行時操作系統(tǒng)報告出錯信息,就要通過調(diào)試工具
(如DEBUG、TDEBUG等)進行動態(tài)調(diào)試,查找程序的問題。查到問題后,又重新回到第
一步,重新開始,修改源程序中的問題。
關(guān)于匯編器和調(diào)試工具的使用,我們在下面將作較詳細的介紹。
2.3示例
【例】設(shè)X和Y均為16位無符號數(shù),寫一個求表達式16X+Y值的程序。
由于表達式中的X和Y是16位數(shù),表達式的結(jié)果可能要超出16位,所以定義兩個
字變量用于保存X和Y,另外用一個32位的雙字變量來保存計算結(jié)果。
(1)利用文本編輯器完成以下程序的編輯。
;源程序名test2.asm
dsegsegment
xxxdw1234h;設(shè)X為1234H
yyydw5678h;設(shè)Y為5678H
zzzdd?;雙字變量,用于保存結(jié)果
dsegends
csegsegment'CODE,;指定代碼段的類別名,以便用MASM6.11匯編
assumecs:cseg,ds:dseg
start:movax,dseg;DS-數(shù)據(jù)段段地址
movds,ax
movax,xxx;AX-X
xordx,dx
movex,16
mulex;DX|AX-X*16
addax,yyy;DX|AX-DX|AX+Y
adcdx,0
movwordptrzzz,ax;zzz—DX|AX
movwordptrzzz+2,dx
movah,4ch;結(jié)束程序,返回操作系統(tǒng)
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 未來五年雜豆企業(yè)ESG實踐與創(chuàng)新戰(zhàn)略分析研究報告
- 未來五年機構(gòu)駐異地辦事處服務(wù)企業(yè)ESG實踐與創(chuàng)新戰(zhàn)略分析研究報告
- 未來五年元胡企業(yè)縣域市場拓展與下沉戰(zhàn)略分析研究報告
- 未來五年文化產(chǎn)品展覽企業(yè)ESG實踐與創(chuàng)新戰(zhàn)略分析研究報告
- 未來五年水產(chǎn)學(xué)研究服務(wù)企業(yè)縣域市場拓展與下沉戰(zhàn)略分析研究報告
- 物料交接及責(zé)任追溯管理方案
- 燃氣鍋爐安全檢查方案
- 施工現(xiàn)場安全圖紙審核管理方案
- 施工現(xiàn)場物料分配協(xié)調(diào)方案
- 施工材料搬運安全技術(shù)方案
- 學(xué)前教育論文格式模板
- 架空輸電線路建設(shè)關(guān)鍵環(huán)節(jié)的質(zhì)量控制與驗收標準
- 重生之我在古代當(dāng)皇帝-高二上學(xué)期自律主題班會課件
- 膀胱切開取石術(shù)護理查房
- GB/T 45355-2025無壓埋地排污、排水用聚乙烯(PE)管道系統(tǒng)
- 2024-2025學(xué)年人教版初中地理七年級下冊課件 第7章 第1節(jié) 自然環(huán)境
- 物業(yè)移交表格樣本模板
- 《新生兒機械通氣》課件
- 《水處理用活性焦吸附再生工藝》
- DB 23T 1501-2013 水利堤(岸)坡防護工程格賓與雷諾護墊施工技術(shù)規(guī)范
- 《保險公司主持技巧》課件
評論
0/150
提交評論