版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
微機原理與匯編語言實驗
指導(dǎo)書(一)匯編部分
紀平、陸勤、李金厚編寫
系______________
班級______________
學(xué)號______________
姓名______________
安徽工業(yè)大學(xué)計算機學(xué)院
二。一八年九月
目錄
實驗一匯編運行環(huán)境及方法.................................1
實驗二尋址方式及指令.....................................15
實驗三用查表的方法將一位十六進制數(shù)轉(zhuǎn)換成與它相應(yīng)的ASCII碼
.......................................................................................................17
實驗四將鍵盤輸入的小寫字母用大寫字母顯示出來............18
實驗五分支程序設(shè)計.......................................20
實驗六循環(huán)程序設(shè)計......................................21
實驗七按學(xué)號順序把學(xué)生名次從終端上顯示出來..............24
實驗八統(tǒng)計不同成績段學(xué)生的人數(shù)..........................32
附錄實驗報告.............................................35
實驗一匯編運行環(huán)境及方法
一、實驗?zāi)康?/p>
1.熟悉匯編語言運行環(huán)境和方法
2.了解如何使用匯編語言編制程序
3.熟悉DEBUG有關(guān)命令的使用方法
4.利用DEBUG掌握有關(guān)指令的功能
5.利用DEBUG運行簡單的程序段
二、實驗內(nèi)容
1.學(xué)會輸入、編輯匯編語言程序
2.學(xué)會對匯編語言程序進行匯編、連接和運行
3.進入和退出DEBUG程序
4.學(xué)會DEBUG中的D命令、E命令、R命令、T命令、A命令、G命令等的使用,對
于U命令、N命令、W命令等,也應(yīng)試一下。
三、實驗準備
1.仔細閱讀有關(guān)匯編語言環(huán)境的內(nèi)容,事先準備好使用的例子。
2.準備好源程序清單、設(shè)計好調(diào)試步驟、測試方法、對運行結(jié)果的分析。
3.編寫一個程序:比較2個字符串所含的字符是否相同。若相同則顯示'Match,否則
顯示,N。match匕⑴仔細閱讀有關(guān)DEBUG命令的內(nèi)容,對有關(guān)命令,都要事先準
備好使用的例子,
四、實驗步驟
1.在DOS提示符下,進入MASM目錄。
2.在MASM目錄下啟動EDIT編輯程序,輸入源程序,并對其進行匯編、連接和運行。
1)調(diào)用edit輸入、編輯源程序并保存在指定的目錄中;例:
editabc.asm
2)用匯編程序masm對源程序匯編產(chǎn)生目標文件obj。例:
masmabc
不斷修改錯誤,直至匯編通過為止。
3)用連接程序link產(chǎn)生執(zhí)行文件exe.例:linkabc
4)執(zhí)行程序
可直接從DOS執(zhí)行程序,即在DOS環(huán)境中,輸入文件名即可。
3.詳細記錄每?步所用的命令,以及查看結(jié)果的方法和具體結(jié)果。
五、實驗方法
有關(guān)匯編語言程序的上機過程請讀者參閱清華大學(xué)出版社1991年出版的《IBMPC
匯編語言程序設(shè)計》的4.4節(jié)。在這里,我們舉例簡要說明該過程以及程序的調(diào)試方法。
例1.1比較字符串sample
試編寫一程序:比較兩個字符串sinngl和slnng2所含的字符是否相同。若相同則顯
示'Match',否則,顯示'Nomatch'。
我們可以用串比較指令來完成程序所要求的功能。上機過程如下:
1.調(diào)用字處理程序v/ordstar建立asm文件
當然也可以用其它編輯程序如peed或行編輯程序edlin來建立源文件。
c>ws
使用非文本文件方式(n命令)建立以sample.asm為文件名的源文件如圖1.1
所示。然后用CTRLKX命令將文件存入磁盤,并使系統(tǒng)返回DOS。
;PROGRAMTITLEGOESHERE—Comparestring
(*木木木***木*木*******分*木木木木**木木木*********木木**京*木木木****木****木木******木**
datarcasegmentzdcfincdatasegment
stringldb'Movethecursorbackward.'
string?db'Movethecursorbackward.,
messldb'Match.;13,10;$'
mess2db'Nomatch!,,13,10:$'
datareaends
,*******************************************************************
prognamsegment;definecodesegment
mainprocfar
assumecs:prognam,ds:datarca.es:datarca
start:;startingexecutionaddress
;setupstackforreturn
pushds;saveolddatasegment
subax,ax;putzeroinAX
pushax;saveitonstack
;setDSregistertocurrentdatasegment
movax.datarca;datarcasegmentaddr
movds.ax;intoDSregister
moves,ax;intoESregister
;MAINPARTOFPROGRAMGOESHERE
leasi,stringl
leadi,string2
cld
movex,25
repzempsb
jzmatch
leadx,mess2
jmpshortdisp
2
match:
leadx,messl
disp:
movah,09
int21h
ret;returntoDOS
mainendp;endofmainpartofprogram
prognamends:endofcodesegment
?*****************?**********************************************
9
endstart;endassembly
圖1.1例1的原文件sample.asm
2.用匯編程序masm(或asm)對源文件匯編產(chǎn)生目標文件obj
C:\>rnasmsample;
Microsoft(R)MacroAssemblerVersion5.00
Copyright(C)MicrosoftCorp1981-1985,1987.Allrightsreserved.
51520+423584Bytessymbolspacefree
0WarningErrors
0SevereErrors
3.用連接程序link產(chǎn)生執(zhí)行文件exe
C:\>linksample;
Microsoft(R)OverlayLinkerVersion3.60
Copyright(C)MicrosoftCorp1983-1987.Allrightsreserved.
LINK:warningL4021:nostacksegment
4.執(zhí)行程序
C:\>sample
Match.
終端上已顯示出程序的運行結(jié)果。為了調(diào)試程序的另一部分,可重新進編輯程序修改兩
個字符串的內(nèi)容,使它們互不相同。如修改后的數(shù)據(jù)區(qū)為:
?******************************************************************
datareasegment;definedatasegment
string!db'Movethecursorbackward.1
string?db'Movethecursorbackward.,
3
messldb'Match.,,13,10:$'
mess2db'Nomatch!,,13,10,'$'
datareaends
?水**********************************************水*****水*****水********
然后,重新匯編、連接、執(zhí)行,結(jié)果為:
C>sample
Nomateh!
至此,程序已調(diào)試完畢,運行結(jié)果正確。
另一種調(diào)試程序的方法是使用debug程序??烧{(diào)用如下:
C>debugsample.exe
此時,debug已將執(zhí)行程序裝入內(nèi)存,可直接用g命令運吁程序。
-g
Match.
Programterminatednormaly
為調(diào)試程序的另一部分,叮在debug中修改字符串內(nèi)容??上扔胾命令顯示程,以便了
解指令地址。顯示結(jié)果如羽1.2所示。
0D36:0000IEPUSHDS
0D36:00012BC0SUBAX,AX
0D36:00035()PUSHAX
0D36:0004B83I0DMOVAX,0D31
0D36:00078ED8MOVDS.AX
0D36:00098EC0MOVES,AX
0D36:000B8D360000LEASI,[0000]
0D36:000F8D3E1900LEADIJ0019]
0D36:0013FCCLD
0D36:0014B9190()MOVCX,0()19
0D36:0017F3REPZ
0D36:0018A6CMPSB
0D36:00197406JZ0021
0D36:001B8D163B00LEADXJ003B1
0D36:001FEB04JMP0025
-u
0D36:00218D163200LEADXJOO321
0D36:0025B409MOVAH,09
0D36:0027CD21INT21
0D36:0029CBRETF
0D36:002A8A4608MOVALJBP+08]
4
0D36:002D98CBW
0D36:002E50PUSHAX
0D36:002F8B4604MOVAXJBP+04]
0D36:003203C6ADDAX,SI
0D36:003450PUSHAX
OD36:OO35E858FFCALLFF90
0D36:003883C406ADDSP.+06
0D36:003B8BF8MOVDI.AX
0D36:003D83FFFFCMPDI,-01
0D36:0040750CJNZ004E
圖1.2例1.1用debug調(diào)試時,u命令的顯示情況
將端點設(shè)置在程序的主要部分以前。
-gOb
AX=0D31BX=0000CX=007ADX=0000SP=FFFCBP=OOOOSI=0000DI=0000
DS=0D31ES=0D3lSS=0D31CS=0D36IP=OOOBNVUPElPLZRNAPENC
0D36:000B8D360000LEASI,|0()00|DS:00()0=6F4D
根據(jù)其中指示的ds寄存器內(nèi)容查看數(shù)據(jù)段的情況如下:
-dO
0D31:00004D6F766520746865-20637572736F7220Movethecursor
0D3i:()0l()6261636B77617264-2E4D6F7665207468backward.Movcih
0D31:00206520637572736F72-206261636B776172ecursorhackwar
0D31:0030642E4D617463682E-0D0A244E6F206D61d.Match...$Noma
0D31:0040746368210D0A2400-0000000000000000tch!..S.........
0D31:00501E2BCO50B8310D8E-D88ECO8D3600008D**1(i???
0D31:00603E1900FCB91900F3-A674068D163B00EB>.........t...;..
0D31:0070048D163200B409CD-21CB8A460898508B...2....LF..P.
可用c命令修改數(shù)據(jù)區(qū)的字符串,操作如下:
-e29
0D31:002962.6661.6f63.726B.7777.6161.7272.64
0D31:003064.2c2E.20
再次用d命令查看修改結(jié)果。
-d0
0D31:00004D6F766520746865-20637572736F7220Movethecursor
0D3i:0010626i636B77617264-2E4D6F7665207468backward.Moveth
0D3i:00206520637572736F72-20666F72776172Wecursorforward
0D31:00302E204D6i7463682E-0D0A244E6F206D6I.Match...$Noma
0D31:0040746368210D0A2400-0000000000000000tell??■■??(?????
0D31:00501E2BCO50B8310D8E-D88ECO8D36000()8D1.+.P.1......6...
5
0D31:00603E1900FCB91900F3-A674068D163B00EB>........t
0D31:0070048D163200B409CD-21CB8A460898508B...2…J..F..P.
用g命令運行程序,結(jié)果為:
-g
Nomatch!
Programterminatednormal.y
用q命令退出debugo
至此,程序已調(diào)試完畢。為了進一步數(shù)名debug命令的使用方法,我們再次重復(fù)上述程序
的調(diào)試過程,只是使月e、a和f命令來修改數(shù)據(jù)區(qū)的內(nèi)容而已。必須注意,由于在用debug
調(diào)試程序時,只能修改當時有關(guān)的內(nèi)存單元內(nèi)容,因此重新用debug裝入程序時,仍是原
來在磁盤中的內(nèi)容。操作如下:
C:\>dcbugsamplc.cxc
-gOb
AX=0D31BX=0000CX=007ADX=()000SP=FFFCBP=0000SI=0000DI=000()
DS=0D31ES=0D31SS=0D31CS=0D36IP=000BNVUPEIPLZRNAPENC
0D36:000B8D360000LEASI,[0300]
DS:0000=6F4D
-dO
0D31:00004D6F766520746865-20637572736F7220Movethecursor
0D3l:00106261636B77617264-2E4D6F7665207468backward.Moveth
0D31:00206520637572736F72-206261636B776112ecursorbackwar
0D31:0030642E4D617463682E-0D0A244E6F206D61d.Match...$Noma
0D31:0040746368210D0A2400-0000000000000000tch!..$.......
0D31:00501E2BCO50B83I0D8E-D88ECO8D3600008D.+.P.1……6...
0D31:00603E1900FCB91900F3-A674068D163B(X)EB
0D31:0070048D163200B409CD-21CB46FA8B5EFCC1...2…
-e29'fonvard/20
-dO
0D31:00004D6F766520746865-20637572736F7220Movethecursor
0D31:00106261636B77617264-2E4D6F7665207468backward.Moveth
0D31:00206520637572736F72-20666F7277617264ecursorforward
0D31:00302E204D617463682E-0D0A244E6F206D61.Match.SNoma
0D3i:0040746368210D0A2400-0000000000000000lch!..$......
0D31:00501E2BCO50B83I0D8E-D88ECO8D3600008D.+.P.I.
0D31:00603E1900FCB91900F3-A674068D163B00EB>........t.
0D31:0070048D163200B409CD-21CB46FA8B5EFCC1...2....!F.A.
6
-g
Nomatch!
Programterminatednormal.y
可見這種e命令的方式避免使用ASCH碼進入,對用戶是比較方便的。其中最后一人20
是空格鍵的ASCH碼,以補足原來的內(nèi)容恢復(fù)原狀,具體如下:
-a0d31:29
0D31:0029db'backward.,
0D31:0032
-dO
0D3i:00004D6F766520746865-20637572736F7220Movethecursor
0D31:00106261636B77617264-2E4D6F7665207468backward.Moveth
0D31:00206520637572736F72-206261636B776112ccursorbackwar
0D31:0030642E4D617463682E-0DOA244E6F206D61d.Match...$Noma
0D31:004074636821ODOA2400-0000000000000000tch!
0D31:00501E2BCO50B8310D8E-D88ECO8D3600008D.+.P.1……6...
0D31:00603E1900FCB91900F3-A674068D163B00EB
OD3i:OO7O048D163200B409CD-21CB56FA897EEE8B…2…
-g
Match.
由于-a命令是匯編命令,因此信息是用匯編格式進入的。如果修改的是程序中的語句,方
法也是相同的,下面我們還會看到這類的操作?,F(xiàn)在再看一下用「命令修改數(shù)據(jù)區(qū)的方法。
C:\>debugsample.exe
-gOb
AX=0D31BX=0000CX=007ADX=0000SP=FFFCBP=0000SI=0000DI=0000
DS=0D3iES=0D3iSS=0D31CS=0D361P=OOOBNVUPElPLZRNAPENC
0D36:0(X)B8D360000LEASI,[03001
DS:0000=6F4D
-dO
0D31:00004D6F766520746865-20637572736F7220Movethecursor
0D31:00106261636B77617264-2E4D6F7665207468backward.Moveth
0D31:00206520637572736F72-206261636B776172ecursorhackwar
0D31:0030642E4D617463682E-0DOA244E6F206D61d.Match...$Noma
0D31:004074636821ODOA2400-00000000()0000000tell???■??(?????
0D3i:00501E2BCO50B831OD8E-D88ECO8D3600008D.+.P.I……6...
0D31:00603E1900FCB91900F3-A674068D163B00EB
0D31:0070048D163200B409CD-21CB56FA897EEE8B…2…
-f2919'forward/20
7
-g
Nomatch!
Programterminatednormal.y
-q
f命令中的29為修改區(qū)隹首地址,19表示需要修改的長度為9個字節(jié)。
為進一步說明程序的調(diào)試過程,現(xiàn)假設(shè)程序編制錯誤:在源文件中把jzmatch改為
jnz馬提出。該程序匯編、連接后,進入得不夠調(diào)試如下:
C>debugsample.exe
-g
Nomatch!
Programterminatednormally
結(jié)果是錯誤的(因源文件中的兩個字符是相同的)。為檢查程序的錯誤,將斷點設(shè)在比
較串之后。
-g19
AX=0D31BX=0000CX=0000DX=0000SP=FFFCBP=0000SI=0019DI=0032
DS=0D31ES=0D3ISS=0D31CS=0D36IP=0019NVUPEIPLZRNAPENC
0D36:00197506JNZ0021
此時零標志為ZR,即ZF=1,即表示比較結(jié)果相等,說明比較結(jié)果實正確的?,F(xiàn)在可用p
命令再執(zhí)行一?條指令以觀察指令的轉(zhuǎn)向。
-P
AX=0D31BX=0000CX=0000DX=0000SP=FFFCBP=0000SI=OOI9DI=0032
DS=0D31ES=0D31SS=0D31CS=0D36IP=001BNVUPEIPLZRNAPENC
0D36:001B8D163BOOLEADXJ003B]
DS:003B=6F4E
為查到003B單元的內(nèi)容,可查數(shù)據(jù)區(qū)如為
-d0
0D31:00004D6F766520746865-20637572736F7220Movethecursor
0D3l:00106261636B77617264-2E4D6F7665207468backward.Moveth
0D31:00206520637572736F72-206261636B776112ccursorbackwar
0D31:0030642E4D617463682E-0D0A244E6F206D61d.Ma(ch...$Noma
0D31:0040746368210D0A2400-0000000000000000tch!..$........
0D31:00501E2BCO50B83I0D8E-D88ECO8D3600008D.+.P.1……6...
0D31:00603E1900FCB91900F3-A675068D163BOOEB>........u...;..
OD3i:OO7O048D163200B409CD-21CB46FA8B5EFCC1
可見003B單元的內(nèi)容為4E,即N的ASCII碼,后面跟的是N。match!,這說明jnz指令
使用錯誤,應(yīng)該改為jz??捎胊命令修改,應(yīng)用u命令檢查修改結(jié)果。運行結(jié)果說明程序
修改正確。
8
-a19
0D36:00I9jz0021
0D36:001B
-uO
0D36:0000IEPUSHDS
OD36:OOO12BC0SUBAX,AX
0D36:000350PUSHAX
0D36:0004B83I0DMOVAX,0D31
0D36:00078ED8MOVDS,AX
0D36:00098EC0MOVES.AX
0D36:000B8D360000LEASI,[0000]
0D36:000F8D3E1900LEADIJ0019]
0D36:0013FCCLD
(236:0()14B91900MOVCX,(X)19
OD36:OOI7F3REPZ
OD36:OOI8A6CMPSB
0D36:00197406JZ0021
0D36:001B8D163B00LEADXJ003B]
0D36:001FEB04JMP0025
-rip
IP(X)1B
-q
在這里應(yīng)該注意,在使用a命令修改數(shù)據(jù)區(qū)時,必須給出數(shù)據(jù)段的地址,而在修改程序區(qū)
時由于a命令的缺省段位代碼段,所以直接給出偏移地址就可以了。
在調(diào)試過程中,也可以用t命令逐條跟蹤程序的執(zhí)行。下面列出斷點停在0b后.用
f命令修改數(shù)據(jù)區(qū)中字符串的內(nèi)容,然后逐條執(zhí)行指令的情況。
-12919'forward.?。
-dO
0D31:00004D6F766520746865-20637572736F7220Movethecursor
0D3l:00106261636B77617264-2E4D6F7665207468backward.Moveth
0D31:00206520637572736F72-20666F7277617264ecursorforward
0D31:00302E204D617463682E-0D0A244E6F206D61.Match...$Noma
0D31:0040746368210D0A2400-0000000000000000tch!..$........
0D31:00501E2BCO50B8310D8E-D88ECO8D3600008D.+.P.1......6...
0D3i:00603E1900FCB91900F3-A674068D163BOOEB>........t...;..
0D31:0070048D163200B409CD-21CB8A460898508B
9
AX=OD3IBX=OOOOCX=007ADX=0000SP=FFFCBP=OOOOSI=OOOODI=OOOO
DS=0D31ES=0D31SS=0D31CS=0D361P=OOOFNVUPEIPLZRNAPENC
OD36:OOOF8D3E19OOLEADIJO319]
DS:0019=6F4D
AX=0D3lBX=0000CX=007ADX=()000SP=FFFCBP=0000SI=()000DI=0019
DS=0D31ES=0D31SS=0D31CS=0D36IP=0013NVUPEIPLZRNAPENC
OD36:OO13FCCLD
-(
AX=0D31BX=0000CX=007ADX=0000SP=FFFCBP=0000SI=0000DI=0019
DS=0D31ES=0D31SS=0D3lCS=0D36IP=0014NVUPEIPLZRNAPENC
0D36:0014B919(X)MOVCX,0019
-t
AX=0D31BX=0000CX=00I9DX=0000SP=FFFCBP=OOOOSI=0000DI=0019
DS=0D31ES=0D31SS=0D31CS=0D36IP=0017NVUPEIPLZRNAPENC
0D36:0017F3REPZ
0D36:0018A6CMPSB
-(
AX=0D31BX=0000CX=0018DX=0000SP=FFFCBP=OOOOSI=0001DI=001A
DS=0D31ES=0D31SS=OD3ICS=0D36IP=0017NVUPEIPLZRNAPENC
0D36:0017F3REPZ
0D36:0018A6CMPSB
-t
AX=0D31BX=0000CX=OO17DX=0000SP=FFFCBP=0000SI=0002DI=001B
DS=0D31ES=0D3lSS=OD3ICS=0D36IP=0017NVUPEIPLZRNAPENC
OD36:OOI7F3REPZ
0D36:0018A6CMPSB
-t
AX=0D31BX=000()CX=0016DX=0000SP=FFFCBP=OOOOSI=0003DI=001C
DS=0D31ES=0D31SS=0D31CS=0D36IP=OO17NVUPEIPLZRNAPENC
0D36:0017F3REPZ
0D36:0018A6CMPSB
-tt
10
Error
AX=0D3lBX=0000CX=0015DX=0000SP=FFFCBP=OOOOSI=0004DI=001D
DS=0D31ES=0D31SS=0D31CS=0D36IP=0017NVUPEIPLZRNAPENC
OD36:OO17F3REPZ
0D36:0018A6CMPSB
AX=0D31BX=0000CX=0014DX=0000SP=FFFCBP=0000SI=0005DI=001E
DS=0D31ES=0D31SS=0D31CS=0D36IP=0017NVUPEIPLZRNAPENC
0D36:0017F3REPZ
0D36:0018A6CMPSB
-t
AX=0D31BX=0000CX=0013DX=0000SP=FFFCBP=0000SI=0006DI=001F
DS=0D31ES=0D31SS=0D31CS=0D36IP=0017NVUPEIPLZRNAPENC
0D36:0017F3REPZ
0D36:0018A6CMPSB
-t
AX=0D31BX=0000CX=0012DX=0000SP=FFFCBP=0000SI=0007DI=0020
DS=0D31ES=0D31SS=0D31CS=0D36IP=0017NVUPEIPLZRNAPENC
0D36:0017F3REPZ
0D36:0018A6CMPSB
-t
AX=0D31BX=0000CX=0011DX=0000SP=FFFCBP=0000SI=0008DI=002l
DS=0D31ES=0D31SS=0D31CS=0D36IP=0017NVUPEIPLZRNAPENC
0D36:0017F3REPZ
0D36:0018A6CMPSB
4
AX=0D31BX=0000CX=OOIODX=0000SP=FFFCBP=0000SI=0009DI=0022
DS=0D3IES=0D31SS=0D31CS=0D36IP=0017NVUPEIPLZRNAPENC
0D36:0017F3REPZ
0D36:0018A6CMPSB
II
AX=OD3IBX=OOOOCX=000FDX=0000SP=FFFCBP=0000SI=000ADI=OO23
DS=0D31ES=0D31SS=0D31CS=0D361P=OO17NVUPEIPLZRNAPENC
0D36:00I7F3REPZ
0D36:0018A6CMPSB
-t
AX=0D3lBX=0000CX=000EDX=0000SP=FFFCBP=0000SI=000BDI=0024
DS=0D31ES=0D31SS=0D31CS=0D36IP=0017NVUPEIPLZRNAPENC
0D36:0017F3REPZ
0D36:0018A6CMPSB
-t
AX=0D31BX=0000CX=000DDX=0000SP=FFFCBP=0000SI=000CDI=0025
DS=0D31ES=0D31SS=0D3iCS=0D36IP=(X)17NVUPEIPLZRNAPENC
0D36:0017F3REPZ
0D36:0018A6CMPSB
-(
AX=0D3lBX=0000CX=000CDX=0000SP=FFFCBP=0000SI=000DDI=0026
DS=0D31ES=0D31SS=0D3lCS=0D36IP=OO17NVUPEIPLZRNAPENC
OD36:OOI7F3REPZ
0D36:0018A6CMPSB
-t
AX=0D3lBX=0000CX=000BDX=0000SP=FFFCBP=0000SI=000EDI=0027
DS=0D31ES=0D3lSS=0D31CS=0D36IP=0017NVUPEIPLZRNAPENC
0D36:0017F3REPZ
0D36:0018A6CMPSB
-t
AX=0D31BX=0000CX=000ADX=0000SP=FFFCBP=0000SI=000FDI=OO28
DS=0D31ES=0D31SS=0D31CS=0D36IP=0017NVUPEIPLZRNAPENC
0D36:0017F3REPZ
0D36:0018A6CMPSB
-t
AX=0D3lBX=0000CX=0009DX=0000SP=FFFCBP=0000SI=00l0DI=0029
DS=0D31ES=0D31SS=0D3lCS=0D36IP=0017NVUPEIPLZRNAPENC
0D36:0017F3REPZ
12
0D36:0018A6CMPSB
AX=0D3lBX=0000CX=0008DX=0000SP=FFFCBP=OOOOSI=0011DI=002A
DS=0D31ES=0D31SS=0D31CS=0D36IP=0019NVUPEINGNZACPECY
OD36:OO197406JZ0021
-t
AX=0D31BX=0000CX=0008DX=0000SP=FFFCBP=OOOOSI=00llDI=002A
DS=0D3IES=0D31SS=0D31CS=0D36IP=00IBNVUPEINGNZACPECY
0D36:001B8D163B00LEADX,[003B]
DS:003B=6F4E
AX=0D31BX=0000CX=0008DX=003BSP=FFFCBP=0000SI=0011DI=002A
DS=0D3lES=0D31SS=0D31CS=0D36IP=001FNVUPEINGNZACPECY
0D36:001FEB04JMP0025
-t
AX=0D31BX=0000CX=0008DX=003BSP=FFFCBP=0000SI=0011DI=002A
DS=0D31ES=0D31SS=0D31CS=0D36IP=(X)25NVUPEINGNZACPECY
0D36:0025B409MOVAH,09
-t
AX=0931BX=0000CX=0008DX=003BSP=FFFCBP=0000SI=001lDI=002A
DS=0D31ES=0D3lSS=0D31CS=0D36IP=0027NVUPEINGNZACPECY
0D36:0027CD21INT21
-g
Nomatch!
Programterminatednormal'y
從這一過程可清楚地看出每次比較的結(jié)果,一旦比較不等,則立即從串指令退出,執(zhí)行
下面的指令。應(yīng)該注意,如果遇到系統(tǒng)功能調(diào)用,則不能再使用t或p命令跟蹤,而應(yīng)該
用斷點停在功能調(diào)用完成之后,然后再接著跟蹤。木例中,由于不需要再跟蹤,所以直
接用g命令運行到程序結(jié)束。
前面已經(jīng)提到,debug調(diào)試期間所修改的數(shù)據(jù)段或代碼段的內(nèi)容只是修改了內(nèi)存中的
內(nèi)容,而磁盤文件中的內(nèi)容并未修改。如果你的執(zhí)行文件是.com,則可在debug中用n、
w命令直接把經(jīng)修改后的內(nèi)存單元中的內(nèi)容存入磁盤,但是.exe文件則不允許這樣做,因
此,應(yīng)該重新進入編輯程序,根據(jù)調(diào)試結(jié)果把源文件修改正確,經(jīng)匯編、連接、執(zhí)行檢
13
查正確后再保存下來,
六、實驗報告要求
1.程序流程圖和源程序清單。
2.如何啟動和退出EDIT程序。
3.如何對源程序進行匯編及編輯。
4.如何啟動和退出DEBUG程序。
5.整理每個DEBUG命令使用的方法,實際示例及執(zhí)行結(jié)果。
6.啟動DEBUG后:要裝入某一個.EXE文件,應(yīng)通過什么方法實現(xiàn)?
14
實驗二尋址方式及指令
一、實驗?zāi)康模?/p>
1、熟練掌握DEBUG的常用命令,學(xué)會用DEBUG調(diào)試程序。
2、掌握數(shù)據(jù)在內(nèi)存中的存放方式和內(nèi)存操作數(shù)的幾種尋址方式。
3、掌握簡單指令的執(zhí)行過程。
二、實驗內(nèi)容:
1、設(shè)堆棧指針SP=2000H,AX=3000H,BX=5000H;請編一程序段將AX和
BX的內(nèi)容進行交換。請用堆棧作為兩寄存器交換內(nèi)容的中間存儲單元,用DEBUG
調(diào)試程序進行匯編與調(diào)試。
2、設(shè)DS二當前段地址,BX=0300H,SI=0002H;請用DEBUG的命令將存儲
器偏移地址300H?304H連續(xù)單元順序裝入OAH,OBH,OCH,ODH,0EH。在
DEBUG狀態(tài)下送入下面程序,并用單步執(zhí)行的方法,分析每條指令源地址的形成
過程,當數(shù)據(jù)傳送完畢時,AX中的內(nèi)容是什么。
程序清單如下:
MOVAX,BX
MOVAX,0304H
MOVAX,[0304H]
MOVAX,[BX]
MOVAX,0001[BX]
MOVAX,[BX][SI]
MOVAX,0001[BX][SI]
HLT
三、實驗要求:
1、實驗前要做好充分準備,包括匯編程序清單、調(diào)試步驟、調(diào)試方法,以及
對程序結(jié)果的分析等。
15
2、本實驗只耍求在DEBUG調(diào)試程序狀態(tài)下講行,包括匯編程序、調(diào)試程序
和執(zhí)行程序。
四、實驗報告:
1、程序說明。說明程序的功能、結(jié)構(gòu)。
2、調(diào)試說明。包括上機調(diào)試的情況、上機調(diào)試步驟、調(diào)試所遇到的問題是如
何解決的,并對調(diào)試過程中的問題進行分析,對執(zhí)行結(jié)果進行分析。
3、寫出源程序清單和執(zhí)行結(jié)果。
16
實驗三用查表的方法將一位十六進制數(shù)轉(zhuǎn)換成
與它相應(yīng)的ASCII碼
一、實驗?zāi)康模?/p>
1、熟練掌握編寫匯編語言原程序的基本方法和基本框架。
2、掌握查表法和查表指令XLAT。
3、熟練使用DEBUG調(diào)試程序。
二、實驗內(nèi)容:
用查表的方法將一位十六進制數(shù)轉(zhuǎn)換成與它相應(yīng)的ASCII碼,并將結(jié)果存放
至ljASCI單元中。
三、編程提示:
既然指定用查表的方法,那么首先要建立一個表TABLE。我們在表中按照十
六進制數(shù)從小到大的順序放入他們對應(yīng)的ASCII碼值。
DATASEGMENT
TABLEDB30H,31H,32H,33H,34H,35H,36H,37H
DB38H,39H,41H,42H,43H,44H,45H,46H
HEXDBX;X為待轉(zhuǎn)換的十六進制數(shù)
ASCIDB?;存放轉(zhuǎn)換后的ASCH碼
DATAENDS
四、實驗要求:
實驗前要做好充分準備,包括匯編程序清單、調(diào)試步驟、調(diào)試方法,以及對
程序結(jié)果的分析等
五、實驗報告:
1、程序說明。說明程序的功能、結(jié)構(gòu)。
2、調(diào)試說明。包括上機調(diào)試的情況、上機調(diào)試步驟、調(diào)試所遇到的問題是如
何解決的,并對調(diào)試過程中的問題進行分析,對執(zhí)行結(jié)果進行分析。
3、寫出源程序清單和執(zhí)行結(jié)果。
17
實驗四將鍵盤輸入的小寫字母用大寫字母顯示出來
一、實驗?zāi)康模?/p>
1、掌握接受鍵盤數(shù)據(jù)的方法,并了解將鍵盤數(shù)據(jù)顯示時.,須轉(zhuǎn)為ASCII碼的
原理。
2、掌握DOS功能調(diào)用的編程方法。
二、實驗內(nèi)容:
試編寫一個匯編語言程序,要求對鍵盤輸入的小寫字母用大寫字母顯示出來。
三、編程提示:
利用DOS功能調(diào)用1NT21H的1號功能從鍵盤輸入字符和2號功能在顯示器
上顯示一個字符。
四、實驗要求:
實驗前要做好充分準備,包括匯編程序清單、調(diào)試步驟、調(diào)試方法,以及對
程序結(jié)果的分析等。
五、實驗報告:
1、程序說明。說明程序的功能、結(jié)構(gòu)。
2、調(diào)試說明。包括上機調(diào)試的情況、上機調(diào)試步驟、調(diào)試所遇到的問題是如
何解決的,并對調(diào)試過程中的問題進行分析,對執(zhí)行結(jié)果進行分析。
3、寫出源程序清單和執(zhí)行結(jié)果。
DATASEGMENT
STRINGDB100DUP(?)
DATAENDS
CODESEGMENT
ASSUMECS:CODE,DS:DATA
START:MOVAX,DATA
MOVAH,1
INT2IH
CMPAL.,0,
JEEXIT
18
CALLSTOB
MOV[DI],AL
INCDI
JMPAGAIN
EXIT:MOVAH,4CH
INT21H
;子程序名:STOB
,功能:將小寫字母修改為大寫字母
;入口參數(shù):AL存放輸入的字符
;出口參數(shù):AL存放修改后的字符
STOBPROCNEAR
CMPAL,61H
JBNEXT
CMPAL,7AH
JANEXT
SUBAL,20H
SUBAL,20H
NEXT:RET
STOBENDP
CODEENDS
ENDSTART
19
實驗五分支程序設(shè)計
一、實驗?zāi)康模?/p>
1、掌握分支程序的結(jié)構(gòu)。
2、掌握分支程序的設(shè)計、調(diào)試方法。
二、實驗內(nèi)容:
假設(shè)有一組數(shù)據(jù):5,-4,0,3,100,-51,請編一程序,判斷:每個數(shù)大于0,
等于0,還是小于0;并輸出其判斷結(jié)果。
1當x>0
即:y=.()當x=0
-1當XV。
三、實驗要求:
實驗前要做好充分準備,包括匯編程序清單、調(diào)試步驟、調(diào)試方法,以及對
程序結(jié)果的分析等。
四、編程提示:
1、首先將原始數(shù)據(jù)裝入起始地址為XX的字節(jié)存儲單元中。
2、將判斷結(jié)果以字符串的形式存放在數(shù)據(jù)區(qū)中,以便在顯示輸出時調(diào)用。
3、其中判斷部分可采用CMP指令,得到一個分支結(jié)構(gòu),分別輸出“y=0”,“y二1”,
“尸1”。
4、程序中存在一個循環(huán)結(jié)構(gòu),循環(huán)6次,調(diào)用6次分支結(jié)構(gòu)后結(jié)束。
五、思考題:
程序中的原始數(shù)據(jù)是以怎樣的形式存放在數(shù)提區(qū)中的?請用DEBUG調(diào)試程
序觀察并分析。
六、實驗報告:
1、程序說明。說明程序的功能、結(jié)構(gòu)。
2、調(diào)試說明。包括上機調(diào)試的情況、上機調(diào)試步驟、調(diào)試所遇到的問題是如
何解決的,并對調(diào)試過程中的問題進行分析,對執(zhí)行結(jié)果進行分析。
3、畫出程序框圖。
4、寫出源程序清單.和執(zhí)行結(jié)果。
5、回答思考題。
20
DATASEGMENT
XDB7
Y1DB4Y=0,,0DH,0AH/$,
Y2DB4Y=+l\0DH,0AH;$,
Y3DB4Y=-l,,0DH,0AH,,$,
DATAENDS
CODESEGMENT
ASSUMECS:CODEDS,DATA
START:MOVAX,DATA
MOVDS,AX
MOVAL,X
CMPAL,0
JGEBIGR
MOVDX,OFFSETY3
JMPCRT
BIGR:JEEQUL
MOVDX,OFFSETY2
JMPCRT
EQUL:MOVDX,OFFSETY1
CRT:MOVAH,9H
INT21H
MOVAX,4COOH
INT21H
CODEENDS
ENDSTART
實驗六循環(huán)程序設(shè)計
一、實驗?zāi)康?/p>
21
1、加深對循環(huán)結(jié)構(gòu)的理解。
2、掌握循環(huán)程序的設(shè)計方法。
二、實驗內(nèi)容與要求
1、編制程序計算S=l+2?3+3?4+4?5+……+N(N+1)+……直到N(N+1
)大于200為止,并將結(jié)果由屏幕上顯示出來。其程序的流程圖如圖6.1所示。
2、將從3000H內(nèi)存單元開始的100個字節(jié)存儲單元全部清0。
本實驗要求在DEBUG調(diào)試狀態(tài)下進行,包括匯編程序、運行程序、檢查結(jié)
果。
三、程序框圖
圖6.1程序框圖
四、實驗步驟
實驗內(nèi)容一:
1)按程序流程圖編制實驗程序。
2)輸入源程序。
3)匯編、連接程序,執(zhí)行程序,檢查結(jié)果。
22
實驗內(nèi)容二:
1)輸入源程序并檢查無誤。
2)對內(nèi)存單元3000H開始的100個存儲單元用E命令輸入任意數(shù)。
3)程序的執(zhí)行可用DEBUG的G命令,也可用T命令單步跟蹤執(zhí)行。
4)用D命令檢查執(zhí)行結(jié)果。
五、實驗報告
1、列出源程序。
2、對程序中用到的寄存器說明其功能。
3、總結(jié)計數(shù)控制循環(huán)程序的設(shè)計方法。
4、說明怎樣使用DEBUG進行程序調(diào)試的。調(diào)試過程中所遇到的問題是如何
解決的。
23
實驗七按學(xué)號順序把學(xué)生名次從終端上顯示出來
一、實驗?zāi)康?/p>
1、掌握程序設(shè)計方法,合理劃分層次
2、掌握子程序的調(diào)用與返回的方法
3、了解子程序的嵌套與遞歸
二、實驗內(nèi)容與要求
編制一程序,要求鍵入一個班的學(xué)生成績,并存放于50字的ERADE數(shù)組中,
然后根據(jù)ERADE中的成績,把學(xué)生名次填入50字的RANK數(shù)組中,再按學(xué)號順
序把名次從終端上顯示出來。
提示:
①程序MAIN
功能:根據(jù)輸入的學(xué)生成績,計算并顯示出學(xué)生名次。
②子程序INPUT
功能:接收一個班級學(xué)生的成績,各成績之間用空格隔開。
③子程序RANKP
功能:計算一個班級學(xué)生的名次。
④子程序OUTPUT
功能:輸出(顯示)一個班級的學(xué)生名次
⑤子程序DECIBIN
功能:十進制轉(zhuǎn)換二進制,存入BX
⑥子程序BINDEC
功能:十進制轉(zhuǎn)換二進制,并在屏幕上顯示。
⑦子程序DEC_DIV
功能:BX的內(nèi)容除以CX的內(nèi)容,并在屏幕上顯示一位商。
24
三、程序框圖:
(返回)
溫馨提示
- 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)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 裝飾押金合同范本
- 意向競買協(xié)議書
- 裝修門頭協(xié)議書
- 贈送汽車協(xié)議書
- 自行返程協(xié)議書
- 贈送商鋪協(xié)議書
- 資助捐贈協(xié)議書
- 營地運營協(xié)議書
- 賬清了的協(xié)議書
- 蒸汽管路協(xié)議書
- 知道智慧樹西方文論經(jīng)典導(dǎo)讀滿分測試答案
- 醫(yī)藥行業(yè)合規(guī)培訓(xùn)課件
- 水域事故緊急救援與處置預(yù)案
- 新能源汽車工程技術(shù)專業(yè)教學(xué)標準(高等職業(yè)教育本科)2025修訂
- 四川省成都市2023級高中畢業(yè)班摸底測試英語試題(含答案和音頻)
- 以歌為翼:中文歌曲在泰國小學(xué)漢語課堂的教學(xué)效能探究
- 2025-2030中國除濕干燥機行業(yè)應(yīng)用趨勢與需求規(guī)模預(yù)測報告
- 2025廣東高考物理試題(大題部分)+評析
- 2025年中國國際貨運代理行業(yè)市場情況研究及競爭格局分析報告
- 家庭教育概論 課件 第5章 親子關(guān)系:家庭教育的起點與結(jié)果
- 500千伏輸電線路工程項目管理實施規(guī)劃
評論
0/150
提交評論