版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
目錄
目錄1
第一部分宏匯編語言程序設(shè)計(jì)3
第一章DOS環(huán)境下的匯編語言編程環(huán)境使用(基礎(chǔ)與驗(yàn)證型)3
第二章算術(shù)運(yùn)算類操作實(shí)驗(yàn)(基礎(chǔ)與設(shè)計(jì))17
第三章字符串操作實(shí)驗(yàn)(設(shè)計(jì)性實(shí)驗(yàn))19
第四章分支和循環(huán)程序設(shè)計(jì)實(shí)驗(yàn)(設(shè)計(jì)性實(shí)驗(yàn))23
第五章子程序設(shè)計(jì)實(shí)驗(yàn)(設(shè)計(jì)性實(shí)驗(yàn))27
第六章磁盤文件存取實(shí)驗(yàn)(設(shè)計(jì)性實(shí)驗(yàn))31
第七章學(xué)生成績(jī)管理系統(tǒng)設(shè)計(jì)實(shí)驗(yàn)(綜合性實(shí)驗(yàn))35
第二部分TPC-ZK-USB接口實(shí)驗(yàn)系統(tǒng)39
第一章實(shí)驗(yàn)系統(tǒng)簡(jiǎn)介39
第二章TPC-USB實(shí)驗(yàn)系統(tǒng)硬件環(huán)境40
第三章環(huán)境安裝及使用說明47
第三部分計(jì)算機(jī)系統(tǒng)接口實(shí)驗(yàn)56
第一章I/O地址譯碼56
第二章七段數(shù)碼管59
第三章基于并行接口的鍵盤控制61
第四章利用中斷方式設(shè)計(jì)數(shù)字時(shí)鐘66
第五章串行通信70
第六章A/D和D/A轉(zhuǎn)換74
第七章雙色點(diǎn)陣發(fā)光二極管顯示實(shí)驗(yàn)80
第八章128X64字符圖形液晶顯示實(shí)驗(yàn)85
第九章電子琴86
第十章紅外熱感應(yīng)傳感器實(shí)驗(yàn)88
第十一章壓力傳感器實(shí)驗(yàn)93
第十二章光敏、聲控傳感器實(shí)驗(yàn)98
第十三章紅外實(shí)驗(yàn)103
附錄110
附錄一8086指令系統(tǒng)一覽表110
附錄二8086指令對(duì)標(biāo)志位的影響119
附錄三8086宏匯編常用偽指令表120
附錄四ASCII碼表122
附錄五DOS系統(tǒng)功能調(diào)用(INT21H)123
附錄六BIOS系統(tǒng)功能調(diào)用130
附錄七Debug命令表133
第一部分宏匯編語言程序設(shè)計(jì)
第一章DOS環(huán)境下的匯編語言編程環(huán)境使用(基礎(chǔ)與驗(yàn)證型)
一、實(shí)驗(yàn)要求和目的
1、掌握匯編語言程序設(shè)計(jì)的基本流程和學(xué)會(huì)上機(jī)開發(fā)簡(jiǎn)單程序;
2、熟練掌握宏匯編程序MASM的使用;
3、熟練掌握連接程序LINK的使用;
4、熟練掌握DEBUG的使用:
二'軟硬件環(huán)境
1、硬件環(huán)境:計(jì)算機(jī)系統(tǒng)windows;
2、軟件環(huán)境:裝有MASM、DEBUG、LINK、等應(yīng)用程序。
三、實(shí)驗(yàn)涉及的主要知識(shí)
匯編語言程序設(shè)計(jì)上機(jī)開發(fā)過程如圖1.1所示。
圖1.1匯編語言程序上機(jī)過程
1、匯編語言源程序的匯編過程
匯編語言源程序的匯編過程是是利用匯編程序(MASM)對(duì)己編輯好的源程序文件(.ASM)
進(jìn)行匯編,將源程序文件中以ASCII碼表示的助記符指令逐條翻譯成機(jī)器碼指令,并完成源
程序中的偽指令所指出的各種操作,最后可以建立3個(gè)文件:擴(kuò)展名為.OBJ的目標(biāo)文件、
擴(kuò)展名為.LST的列表文件和擴(kuò)展名為.CRF的交叉索引文件。
目標(biāo)文件是必須建立的,它包含了程序中所有的機(jī)器碼指令和偽指令指出的各種有關(guān)信
息,但該文件中的操作數(shù)地址還不是內(nèi)存的絕對(duì)地址,只是一個(gè)可浮動(dòng)的相對(duì)地址。列表文
件(.LST)中包含了源程序的全部信息(包括注釋)和匯編后的目標(biāo)程序,列表文件可以打印
輸出,可供調(diào)試檢查用。交叉索引文件(.CRF)是用來了解源程序中各符號(hào)的定義和引用情
況的。.LST和.CRF兩個(gè)文件不是必須建立的,可有有無,可以通過匯編時(shí)的命令加以選擇。
在對(duì)源程序文件(ASM文件)匯編時(shí),匯編程序?qū)?duì)ASM文件進(jìn)行兩遍掃描,若程序文
件中有語法錯(cuò)誤,則結(jié)束匯編,匯編程序?qū)⒅赋鲈闯绦蛑写嬖诘腻e(cuò)誤,這時(shí)應(yīng)返回編輯環(huán)境
修改源程序中的錯(cuò)誤,再經(jīng)過匯編,直到最后得到無錯(cuò)誤的目標(biāo)程序,即OBJ文件。因此,
匯編程序的主要功能可以概括為以下三點(diǎn):(1)檢查源程序中的語法錯(cuò)誤,并給出錯(cuò)誤信
息;(2)產(chǎn)生目標(biāo)程序文件(OBJ文件),并可給出列表文件(.LST文件);(3)展開宏指令。
匯編程序是系統(tǒng)提供的用于匯編的系統(tǒng)軟件,目前常用的匯編程序有Microsoft公司推
出的宏匯編程MASM(MACROASSEMBLER)和BORLAND公司推出的TASM(TURBOASSEMBLER)兩
種。Microsoft公司推出有宏匯編程序MASM和小匯編程序ASM兩種,二者的區(qū)別在于:MASM
有宏處理功能,而ASM沒有宏處理功能,因此,MASM比ASM的功能強(qiáng)大。
實(shí)驗(yàn)開發(fā)過程中選用MASM.
2、目標(biāo)程序的連接過程
匯編后產(chǎn)牛的目標(biāo)程序(OBJ文件)并不是可執(zhí)行程序文件(EXE文件).還不能直接運(yùn)行.
它必須通過連接程序(LINK)連接成一個(gè)可執(zhí)行程序后才能運(yùn)行。連接程序進(jìn)行連接時(shí),其輸
入有兩個(gè)部分:一是目標(biāo)文件(.OBJ),目標(biāo)文件可以是一個(gè)也可以是多個(gè),可以是匯編語言
經(jīng)匯編后產(chǎn)生的目標(biāo)文件,也可以是高級(jí)語言(例如C語言)經(jīng)編譯后產(chǎn)生的目標(biāo)文件;另一
是庫文件CLIB),庫文件是系統(tǒng)中已經(jīng)建立的,主要是為高級(jí)語言提供的。連接后輸出兩個(gè)
文件,一是擴(kuò)展名為.EXE的可執(zhí)行文件,另一個(gè)是擴(kuò)展名為.MAP的內(nèi)存分配文件,它是
連接程序的列表文件,又稱為連接映像(LinkMap),它給出每個(gè)段在存儲(chǔ)器中的分配情況,
該文件可有可無。連接程序給出的“無堆棧段的警告性錯(cuò)誤”并不影響程序的運(yùn)行。所以,
到此為止,連接過程已經(jīng)結(jié)束,可以在操作系統(tǒng)下執(zhí)行該.EXE程序了。
3、Debug調(diào)試過程
通過編輯、匯編和連接后的程序是可以執(zhí)行的程序。但是,一個(gè)程序特別是比較復(fù)雜的
程序不能保證沒有一點(diǎn)錯(cuò)誤c因此,在投入.正式運(yùn)行前必須進(jìn)行調(diào)試,以檢查程序的.正確性c
調(diào)試程序Debug就是用來調(diào)試匯編語言程序的一種工具。Debug的主要功能有顯示和修改
寄存器及內(nèi)存單元的內(nèi)容;按指定地址啟動(dòng)并運(yùn)行程序;設(shè)置斷點(diǎn)使程序分段運(yùn)行,以便檢
查程序運(yùn)行過程中的中間結(jié)果或確定程序出錯(cuò)的位置;反匯編被調(diào)試程序,它將一個(gè)可執(zhí)行
文件中的指令機(jī)器碼反匯編成助記符指令并同時(shí)給出指令所在的內(nèi)存地址;單條追蹤或多條
追蹤被調(diào)試程序,它可以逐條指令執(zhí)行或幾條指令執(zhí)行被調(diào)試程序,每執(zhí)行一條(或幾條)
指令后,Debug程序?qū)⒅袛喑绦虻倪\(yùn)行并提供有關(guān)結(jié)果信息;匯編一段程序,在Debug的
匯編命令下可以直接輸入助記符指令,并將其匯編成可運(yùn)行程序段。此外,Debug還可以將
磁盤指定區(qū)的內(nèi)容或一個(gè)文件裝入到內(nèi)存或?qū)?nèi)存的信息寫到磁盤上等等。
調(diào)試程序Debug的主要命令如圖1.2,解釋部分見附錄:
assembleA[address]
compareCrongcAddress
dumpD[range1
enterEaddress(list]
f111Franaell&c
goG(-address](addresses]
hexHvaluelualue2
inputIport
loadL[address](driveJCfii*stsectOF](nunber]
noucMrengeaddress
nameN【pathname】Cargli&tJ
output0portbyte
pi*oceedPC=addi*essJ(numbei*]
quitQ
registerRCregistei*]
searchSrangelist
traceT[=addi*ess][value1
RincG:;en)>]eU(range]
writeWtaddressJ(driue]£fIvstsectoi*](number]
AllocateexpandedmemoryXA(ltp?iges]
deallocateexpandedmenoryXD[handle]
nepexpandedncmorypagesXM(Lpage](Ppage](handle]
displayexpandednenorystatusXS
圖1.2Debug的主要命令
啟動(dòng)Debug程序:在DOS狀態(tài)下可以用下面的命令啟動(dòng)Debug程序:
DEBUG[路徑文件名.擴(kuò)展名]
Debug后面的文件名及路徑是指被調(diào)試程序的文件名及路徑,Debug后面的文件必須是
程序的可執(zhí)行文件,其擴(kuò)展名可以是.EXE或.COM。在此命令后,DQS將調(diào)試程序Debug
調(diào)入內(nèi)存,Debug接著將被調(diào)程序送入內(nèi)存。比如:DEBUGtest01.EXE
4、匯編語言和DOS操作系統(tǒng)的接口
編寫的匯編語言源程序是在DOS環(huán)境下運(yùn)行的,為了保證用戶程序執(zhí)行完后能返回到
DOS狀態(tài),可使用如下兩種方法c
(一)標(biāo)準(zhǔn)方法
首先將用戶程序的主程序定義成一個(gè)FAR過程,其最后一條指令為RET。然后在代碼
段的主程序(即FAR過程)的開始部分用如下三條指令將PSP中INT20H指令的段地址及偏
移地址壓入堆棧:
PUSHDS;保護(hù)PSP段地址
MOVAX,0;保護(hù)偏移地址0
PUSHAX
這樣,當(dāng)程序執(zhí)行到主程序的最后一條指令RET時(shí),由于該過程具有FAR屬性,故存
在堆棧內(nèi)的兩個(gè)字就分別彈出到CS和IP,從而執(zhí)行INT20H指令,使控制返回到DOS狀
態(tài)。返回DOS的標(biāo)志就是程序運(yùn)行完后出現(xiàn)一個(gè)DOS的標(biāo)識(shí)符,如D:\>。
(二)非標(biāo)準(zhǔn)方法
也可在用戶的程序中不定義過程段,只在代碼段結(jié)束之前(即CODEENDS之前)增加兩
條語句:
MOVAH,4CH
INT21H
則程序執(zhí)行完后也會(huì)自動(dòng)返回DOS狀態(tài)。
此外,由于開始執(zhí)行用戶程序時(shí),DS并不設(shè)置在用戶的數(shù)據(jù)段的起始處,ES同樣也不
設(shè)置在用戶的附加段起始處,因而在程序開始處使用以下方法裝填DS和ES的值使其指向
用戶的數(shù)據(jù)段:
MOVAX,段名
MOV段寄存器名,AX;段寄存器名可以是DS、ES、SS之一
四、實(shí)驗(yàn)內(nèi)容與步驟
1、匯編、鏈接并調(diào)試下面給出的簡(jiǎn)單程序,找出程序中的錯(cuò)誤。
(一)錄入并建立匯編語言源程序文件(ASM文件)
可以在DOS模式下用編輯程序EDIT.EXE建立匯編語言源程序文件TEST01.ASM,注
意文件名的擴(kuò)展名必須是.ASM。也可以使用Windows環(huán)境下其他的編輯軟件,比如
UltmEdit等.鼠標(biāo)單擊“開始”一“運(yùn)行”,在“運(yùn)行”中輸入“CMD”進(jìn)入DOS模式.
運(yùn)行EDIT軟件,例如:
D:\MASM>EDITTESTOI.ASM
;TESTOI.ASMwithseveralerrors
DATA1SEGMENT
wordlDW1,9078H
bytelDB21,'World'
DI)12345673H
MsgDB*Hello,everyone!$'
DATA1ENDS
STACKSEGMENT
stadw20dup(?)
topequsizesta
STACKENDS
codesegment
assumecs:code,ds:datai,ss:stack
Start:
MOVAX,datal
MOVDS,AX
MOVDX,OFFSETMsg
MOVAH,9
INT21h
Nop
MOVAX,0
MOVBX,1H
ADDITION
ADDAX,BX
INCBX
COMBX,10
JAEADDITION
MOVAH,4ch;DOSterminateprogramfunction
INT21h
codeends
ENDStart
(二)用匯編程序MASM將ASM文件匯編成目標(biāo)程序文件(OBJ文件)
當(dāng)源程序建立以后,以TEST01.ASM程序?yàn)槔覀冇脜R編程序MASM對(duì)TEST01.ASM
源程序文件進(jìn)行匯編,以便產(chǎn)生機(jī)器碼的目標(biāo)程序文件TEST01.OBJ,其操作步驟如下:
D:\MASM>MASMTEST01
Microsoft(R)MacroAssemblerVersion5.00
Copyright(C)MicrosoftCorp1981-1985,1987.Allrightsreserved.
Objectfilename[TESTOLOBJ]:
Sourcelisting[NUL.LST]:TEST01
Cross-reference[NUL.CRF]:TESTOI
50674+450574Bytessymbolspacefree
0WarningErrors
0SevereErrors
由此可■知,匯編程序調(diào)入后,首先顯示版本號(hào),然后出現(xiàn)三個(gè)提示行。
第一個(gè)提示行為:Objecifilename[TESTOI.OBJ]:
這是詢問目標(biāo)程序文件名,方括號(hào)內(nèi)為機(jī)器規(guī)定的默認(rèn)的文件名,通常直接按回車鍵,
表示采用默認(rèn)的文件名(如上所示),這是我們匯編的主要目的。
第二個(gè)提示行為:Sourcelisting[NUL.LST]:
這是詢問是否建立列表文件。若不建立,直接回車:若要建立,可以輸入文件名TEST01
再回車,表示要建立名為TEST01的列表文件。列表文件中同時(shí)列出源程序和機(jī)器語言程序
清單,并給出符號(hào)表,有利于程序調(diào)試。
第三個(gè)提示行為:Cross-reference[NUL.CRF]:
這是詢問是否要建立交叉索引文件。若不建立,則直接回車;若要建立,可以輸入文件名
TEST01,表示要建立TEST01.CRF文件。由于CRF是非文本文件,為了建立交叉索引文件,
還必須調(diào)用CREF.EXE程序.
調(diào)入?yún)R編程序,當(dāng)我們回答了上述各提示行的詢問之后,匯編程序就對(duì)源程序進(jìn)行匯編。
若匯編過程中發(fā)現(xiàn)源程序有語法錯(cuò)誤,則列出有錯(cuò)誤的語句和錯(cuò)誤的代碼。錯(cuò)誤分警告錯(cuò)誤
(WraningErrors)和嚴(yán)重錯(cuò)誤(SevereErrors)。警告錯(cuò)誤是指匯編程序認(rèn)為的一般性錯(cuò)誤;嚴(yán)重
錯(cuò)誤是指匯編程序認(rèn)為無法進(jìn)行正確匯編的錯(cuò)誤,并給出錯(cuò)誤的個(gè)數(shù)及行號(hào)、錯(cuò)誤的性質(zhì)等。
這時(shí),就要對(duì)錯(cuò)誤進(jìn)行分析,找出問題和原因,然后再調(diào)用編輯程序加以修改,修改后重新
匯編,直到匯編后無錯(cuò)誤為止。
(三)用連接程序LINK生成可執(zhí)行程序文件(EXE文件)
經(jīng)匯編后產(chǎn)生的二進(jìn)制的目標(biāo)程序文件(OBJ文件)并不是可執(zhí)行程序文件(EXE文件),
必須經(jīng)連接以后,才能成為可執(zhí)行文件。連接程序并不是專為匯編語言程序設(shè)計(jì)的。如果一
個(gè)程序是由若干個(gè)模塊組成的,也可通過連接程序LINK把它們連接在一起。這些模塊可以
是匯編程序產(chǎn)生的目標(biāo)文件,也可以是高級(jí)語言編譯程序產(chǎn)生的目標(biāo)文件c
連接過程如下:
D:\MASM>LINKTEST01
Microsoft(R)OverlayLinkerVersion3.60
Copyright(C)MicrosoftCorp1983-1987.Allrightsreserved.
RunFile[TEST0I.EXE]:
ListFile[NUL.MAP]:TEST01
Libraries[.LIB]:
在連接程序調(diào)入后,首先顯示版本號(hào),然后出現(xiàn)三個(gè)提示行。
第一個(gè)提示行為:RunFile[TEST01.EXE]:
這是詢問要產(chǎn)生的可執(zhí)行文件的文件名。?般直接回車采用方括號(hào)內(nèi)規(guī)定的隱含文件
名。
第二個(gè)提示行為:ListFile[NUL.MAPJ:
這是詢問是否要建立連接映象文件。若不建立,則直接回車;若要建立,則輸入文件名
再回車。如果要建立該文件,可以輸入文件名TESTOL
第三個(gè)提示行為:Libraries[.LIB]:
這是詢問是否用到庫文件。若無特殊需要,則直接回車即可。
上述提示行回答后,連接程序開始連接。若連接過程中有錯(cuò),則顯示錯(cuò)誤信息,錯(cuò)誤分
析清楚后,要重新調(diào)入編輯程序進(jìn)行修改,然后重新匯編,再經(jīng)過連接,直至無錯(cuò)為止。連
接以后,便產(chǎn)生了可執(zhí)行程序文件(EXE文件)。
(四)程序的調(diào)試
調(diào)試過程:
①進(jìn)入Debug并裝入可執(zhí)行文件TEST01.EXE
D:\MASM>DebugTEST01.EXE<Enter>
②觀察寄存器初始狀態(tài)
-R<Enter>
AX=OOOOBX=OOOOCX=020CDX=OOOOSP=OOOOBP=OOOOSI=OOODDI=OOOO
DS=1892ES=1892SS=18A2CS=18A2IP=0100NVUPEIPLNZNAPONC
注:(1)以上顯示的寄存器值,可能和你的電腦顯示的不一樣。
(2)Debug中默認(rèn)的進(jìn)制是十六進(jìn)制。
③以單步工作方式開始運(yùn)行程序
首先用T命令順序執(zhí)行用戶程序的前1兩條指令,將段寄存器DS預(yù)置為用戶的數(shù)據(jù)段。
④觀察用戶程序數(shù)據(jù)段初始內(nèi)容
-Dds:0<Enter>
⑤連續(xù)工作方式運(yùn)行程序至返回DOS前,查看運(yùn)行結(jié)果。為此,現(xiàn)使用U命令反匯編。
?修改源程序,重新匯編、鏈接并調(diào)試,查看運(yùn)行結(jié)果。
⑦退出
-Q<Enter>
D:\MASM>
需要說明的是此程序很簡(jiǎn)單,只需使用T命令逐條單步調(diào)試即可,這里只是為了說明程
序調(diào)試的一般方法,以便讀者調(diào)試復(fù)雜程序時(shí)借鑒。
2、完成下列程序設(shè)計(jì):
分類統(tǒng)計(jì)字?jǐn)?shù)組data中正數(shù)、負(fù)數(shù)和零的個(gè)數(shù),并分別存入內(nèi)存字變量Positive^Negative
和Zero中,數(shù)組元素個(gè)數(shù)保存在其第一個(gè)字中。使用Debug杳看Positive、Negative和
Zero三個(gè)變量的數(shù)據(jù)。
五、實(shí)驗(yàn)要求與提示
1、實(shí)驗(yàn)要求
(1)掌握匯編語言程序設(shè)計(jì)上機(jī)過程;
(2)回答思考問題;
(3)認(rèn)真分析實(shí)驗(yàn)結(jié)果;
(4)畫出程序流程圖;
(5)完成實(shí)驗(yàn)報(bào)告(實(shí)驗(yàn)材料上的內(nèi)容簡(jiǎn)寫,自己的工作要詳盡)。
附:調(diào)試程序Debug的主要命令簡(jiǎn)介
(一)顯示內(nèi)存單元內(nèi)容的命令D
格式⑴:?D地址
從指定地址開始,顯示128個(gè)字節(jié)的內(nèi)容,每一行的左邊顯示段內(nèi)偏移地址,接著顯示
16個(gè)單元的內(nèi)容,最右邊區(qū)域則顯示這一行的16個(gè)單元所對(duì)應(yīng)的可顯示的字符。若無可顯
示的字符,則用圓點(diǎn)(小數(shù)點(diǎn))填充。
D命令中的地址可為段內(nèi)偏移量,也可為段基址和段內(nèi)偏移量?jī)刹糠?,中間用冒號(hào)隔開,
如1680:0110,即指段基址為16B0H,段內(nèi)偏移量為0U0H。Debug中所顯示的數(shù)據(jù)均為
十六進(jìn)制數(shù),且省去了后面的H標(biāo)志。
格式(2):?D范圍
將顯示指定地址范圍內(nèi)的內(nèi)存單元的內(nèi)容,起始地址可由段基址及段內(nèi)偏移量?jī)蓚€(gè)部分
組成,中間用冒號(hào)“:”隔開,也可以只指出段內(nèi)偏移量,而此時(shí)的段基址在DS中。這里
所說的范圍包含起始地址和結(jié)束地址c
比如-DDS:10001020
將顯示數(shù)據(jù)段偏移地址為1000H到1020H的內(nèi)容。
(二)修改內(nèi)存單元內(nèi)容的命令E
格式(1):?E地址內(nèi)容表
它的功能是用給定的內(nèi)容表去代替所指定的內(nèi)存單元的內(nèi)容。
例如:
EDS:011041'CLOSE'41
該命令執(zhí)行后,將用列表中的7個(gè)字符填入從DS:0110到DS:0116的7個(gè)存儲(chǔ)單元
中。
格式(2):E地址
它的功能是可以連續(xù)地逐個(gè)修改內(nèi)存單元的內(nèi)容。當(dāng)屏幕上顯示指定單元的地址和內(nèi)容
之后,可采取下列辦法:
①若指定單元的內(nèi)容需要修改,則將新的內(nèi)容的十六進(jìn)制數(shù)輸入.再按空格鍵,修改便
告完成,然后顯示下一個(gè)存儲(chǔ)單元的地址及內(nèi)容,若需要修改,可進(jìn)行同樣的操作。若某一
個(gè)單元的內(nèi)容不需要修改,而操作又要進(jìn)行下去,則可直接按空格鍵。
②若需要顯示前一個(gè)單元的地址和內(nèi)容,則輸入連接號(hào)',,若要修改,則輸入新的
內(nèi)容;若顯示前一個(gè)單元的地址和內(nèi)容仍要修改,則可進(jìn)行同樣的操作;若顯示的內(nèi)容不需
要修改,則可直接按'鍵,使該操作由高地址向低地址單元連續(xù)不斷地進(jìn)行。
③按<CR>鍵,結(jié)束E命令。
(三)檢查和修改寄存器內(nèi)容的命令R
格式⑴:R
此時(shí)將顯示所有寄存器的內(nèi)容和全部標(biāo)志位的狀態(tài),以及現(xiàn)行CS:IP所指的機(jī)器指令
代碼和反匯編符號(hào)。
格式(2):R寄存器名
該格式可用于檢查和修改指定寄存器的內(nèi)容。若不修改其內(nèi)容,可按<CR>鍵,若需要
修改其內(nèi)容,可以輸入1~4個(gè)十六進(jìn)制數(shù),再按<CR>鍵。
格式(3):RF
該格式可用于顯示標(biāo)志和修改標(biāo)志位狀態(tài)。
當(dāng)系統(tǒng)給出標(biāo)志位狀態(tài)后,可采取下列辦法:
①若不需要修改任一標(biāo)志位,可按<CR>鍵。
②若需要修改一個(gè)或多個(gè)標(biāo)志位,可輸入其相反的值。各標(biāo)志位之間可以無空格且與順
序無關(guān),修改后按<CR>鍵八
由于標(biāo)志位狀態(tài)顯示時(shí),是用下列特殊符號(hào)表示的,因而修改時(shí),只要輸入規(guī)定的符號(hào)
即可。下面是標(biāo)志名和狀態(tài)符號(hào)的對(duì)照表:
標(biāo)志名置位符號(hào)復(fù)位符號(hào)
溢出標(biāo)志OF(是/否)0VNV
方向標(biāo)志DF(減/增)DNUP
中斷標(biāo)志IF(允許/禁止)EIDI
符號(hào)標(biāo)志SF(負(fù)/正)NGPL
零標(biāo)志ZF(是/否)ZRNZ
輔助進(jìn)位標(biāo)志AF(是/否)ACNA
奇偶校驗(yàn)標(biāo)志PF(偶/奇)PEPO
進(jìn)位標(biāo)志CF(是/否)CYNC
只有追蹤標(biāo)志TF,不能用指令直接修改。
例如:輸入RF命令,系統(tǒng)可能作出如下響應(yīng):
OVDNEINGZRACPECY-
若現(xiàn)在要修改奇偶、零、中斷和溢出標(biāo)志位,可在光標(biāo)處輸入:
PONZDINV<CR>
(四)運(yùn)行程序命令G
格式:G[=地址][地址[地址…]]
該命令可以在程序運(yùn)行中設(shè)置斷點(diǎn)。它是Debug程序進(jìn)行程序調(diào)試的主要命令之一。
示例:-g001a則執(zhí)行從當(dāng)前cs:ip至001a的指令,注意:地址設(shè)置必須從指令的第一字
節(jié)設(shè)起。
①第一個(gè)參數(shù)“二地班”規(guī)定了程序執(zhí)行的起始地加,以CS內(nèi)容作段地址,等號(hào)后面
的地址只需給出地址偏移量。此時(shí),命令G與地址之間的等號(hào)不能省去。
如果在G命令執(zhí)行前,已經(jīng)設(shè)置了CS值和IP值,則也可以直接用G命令,從指定地
址執(zhí)行程序。
②格式中后面給出的地址是指斷點(diǎn)地址,最多可設(shè)置10個(gè)斷點(diǎn)。當(dāng)程序執(zhí)行到一個(gè)斷
點(diǎn)時(shí),就停下來,顯示CPU各寄存器的內(nèi)容和標(biāo)志位的狀態(tài),以及下一條待執(zhí)行的指令,
被調(diào)試程序的所有斷點(diǎn)全部被取消,并返回Debug。
③地址參數(shù)所指的單元,必須包含有有效的8088指令的第一個(gè)字節(jié),否則將產(chǎn)生不可
預(yù)料的結(jié)果。
④堆棧必須至少包含有6個(gè)可用字節(jié),否則也將產(chǎn)生不可預(yù)料的結(jié)果。
⑤若斷點(diǎn)地址只包括地址偏移量,則認(rèn)為段地址在CS寄存器中.
(五)追蹤命令T
格式(1):T[=地址]
該命令可以在指令執(zhí)行中進(jìn)行追蹤,若略去地址,則從CS:IP現(xiàn)行值執(zhí)行。每一次T
命令都執(zhí)行一條指令。
格式(2):T[=地址][值]
此時(shí),它可對(duì)多條指令進(jìn)行追蹤,即在執(zhí)行了由值所指定的若干條指令之后,停止執(zhí)行
并顯示各寄存器的內(nèi)容和各標(biāo)志位,還指出下一條待執(zhí)行的指令。
(六)匯編命令A(yù)
若在調(diào)試目標(biāo)程序的過程中,要求改寫或增添?段目標(biāo)程序,則可以用A命令直接在
Debug下實(shí)現(xiàn)。
格式:A[地址]
該命令可以從指定地址開始,將輸入的匯編語言語句立即匯編成機(jī)器代碼,連續(xù)存放在
內(nèi)存單元中。在程序輸入完畢后,最后一行不輸入內(nèi)容,直接按回車健,即可返回DEBUG
程序,還可用反匯編命令U對(duì)剛輸入的內(nèi)容進(jìn)行反匯編,以驗(yàn)證輸入的程序是否正確。
使用A命令應(yīng)遵守以下規(guī)則:
①所有輸入數(shù)值,均為十六進(jìn)制數(shù)。
②前綴助記符,必須在相關(guān)指令的前面輸入,可以在同一行,也可以在不同行輸入。
③段超越助記符為CS:、DS:、ES:、SS:。
④遠(yuǎn)調(diào)用時(shí)的返回指令助記符用RETFo
⑤使用串操作指令時(shí),助記符中必須注明是字節(jié)還是字傳送。
⑥匯編語言能自動(dòng)匯編短、近和沅的轉(zhuǎn)移及近和沅的調(diào)用,也能由NEAR和FAR前
綴來超越。
例如:
0110:0600JMP602;短轉(zhuǎn)移
0110:0602JMPNEAR605;近轉(zhuǎn)移
0110:0605JMPFAR60A;遠(yuǎn)轉(zhuǎn)移
第一條JMP指令中含有一個(gè)字節(jié)偏移量。
第二條JMP指令中含有兩個(gè)字節(jié)偏移量。
第三條JMP指令中含有兩個(gè)字節(jié)的偏移量及兩個(gè)字節(jié)的段地址。
⑦當(dāng)DEBUG不能確定某些操作數(shù)涉及的是字類型存儲(chǔ)單元還是字節(jié)類型的存儲(chǔ)單元
時(shí),在這種情況下,必須用前綴“WORDPTR”或“BYTEPTR”來加以說明。
例如:
NEGBYTEPTR[128]
DECWORD[SI]
⑧當(dāng)Debug不能確定一個(gè)操作數(shù)是立即數(shù)還是存儲(chǔ)單元的地址時(shí),可以把地址放在方
括號(hào)中。
⑨兩個(gè)最常用的偽指令DB和DW可以在A命令中使用,用來直接把字節(jié)或字的值送
入相應(yīng)的存儲(chǔ)單元。
例如:
DB2,5,3,4,'THISISANEXAMPLEz
DW6000,2000,7000,'BA'
⑩Debug支持所有形式的寄存器間接尋址命令。
例如:ADDBX,74[BP+3][SI-5]
POPFBX+DII
(七)反匯編命令u
格式(1):u地址
該命令從指定的地址開始,反匯編32個(gè)字節(jié)。若略去指定地址,則以上一個(gè)U命令反
匯編的最后一條指令地址的下一條指令地址作為起始地址;若沒有用過U命令,則以由
Debug初始化的段寄存器的值作段地址,以100作為地址偏移量。
格式(2):U范圍這種格式的命令,可以對(duì)指定范圍的內(nèi)存單元進(jìn)行反匯編,范圍可以
由起始地址、結(jié)束地址(只能包含地址偏移量)或起始地址及長(zhǎng)度來指定。其命令格式如:
U04BA:1000108或U04BA:0100L7
兩者是等效的。
(A)輸入命令I(lǐng)
格式:I端口地址
該命令從指定端口輸入一個(gè)字節(jié)并顯示。
例如:I2E8CC
它表示所顯示的是從02E8端口輸入的一個(gè)字節(jié)為CC。
(九)輸出命令O
格式:0端口地址字節(jié)值
其功能是向指定的端口輸出一個(gè)字節(jié)。
例如:O2E812
它表示將一個(gè)字節(jié)12H送到輸出端口2F8
(十)命名命令N
格式:N文件標(biāo)識(shí)符[文件標(biāo)識(shí)符]
該命令用給定的兩個(gè)文件標(biāo)識(shí)符格式化在CS:5C和CS:6C的兩個(gè)文件控制塊中(若在調(diào)
用Debug時(shí)具有一個(gè)文件標(biāo)識(shí)符,則它己格式化在CS:5c的文件控制塊中),文件控制塊是
將要介紹的裝入命令L和寫命令W所需要的。
N命令能把文件標(biāo)識(shí)符和別的參數(shù)放至CS:81開始的參數(shù)保存區(qū)中。在CS:80中保存輸
入的字符個(gè)數(shù),寄存器AX保存前兩個(gè)文件標(biāo)識(shí)符中的驅(qū)動(dòng)器標(biāo)志。
例如:
A>DEBUG<CR>
NTEST<CR>
L<CR>
N命令后,用L命令可將TEST調(diào)入自己的CS:100開始的存儲(chǔ)區(qū)中。若對(duì)正在調(diào)試的
程序TEST進(jìn)行調(diào)試時(shí),需要用到其它的文件標(biāo)識(shí)符及其它參數(shù),也可用N命令加以實(shí)現(xiàn)。;
例如:
A>DEBUGTEST<CR>
N文件1文件2<CR>
(+-)裝入命令L
格式1:L〈地址》〈驅(qū)動(dòng)器號(hào)》〈起始邏輯扇區(qū)》〈所讀扇區(qū)個(gè)數(shù)n>
其中<地址》的缺省值為CS:100。邏輯扇區(qū)可由物理扇區(qū)號(hào)換算得到。
其中《驅(qū)動(dòng)器號(hào))為0、1或2.。表示A驅(qū),1表示B驅(qū).2表示硬點(diǎn)。
功能:將<驅(qū)動(dòng)器號(hào))指定的盤上,從<起始邏輯扇區(qū)》起,共n個(gè)邏輯扇區(qū)上的所有字節(jié)
順序讀入指定內(nèi)存地址開始的一片連續(xù)單元。當(dāng)L后的參數(shù)缺省時(shí),必須在L之前由N命令
指定(或進(jìn)入DEBUG時(shí)一并指出)所讀驅(qū)動(dòng)器文件名。此時(shí)L執(zhí)行后將該文件裝入內(nèi)存。
例如:-NEXAMPLE<Enter>
-L<Enter>
將當(dāng)前驅(qū)動(dòng)器上的EXAMPLE文件裝入CS:100起始的一片內(nèi)存單元。
格式2:L地址或L
該命令把己在CS:5c中格式化的文件控制塊所指定的文件裝入到指定區(qū)域中。
若省略地址,則裝入到CS:100開始的內(nèi)存區(qū)域中。
若是帶有擴(kuò)展名.COM或.EXE文件,無論命令中是否指定了地址,一律裝入到CS:1OO
開始的內(nèi)存區(qū)域中夫c
通常在BX和CX中包含了所讀入文件的字節(jié)數(shù),但對(duì)具有擴(kuò)展名.EXE文件,則BX
和CX中還包含實(shí)際程序長(zhǎng)度。
(十二)寫命令W
功能:為L(zhǎng)/W命令指定待裝入/寫盤文件
格式1:Wv地址〉〈盤號(hào)>v遠(yuǎn)始邏輯扇區(qū)>v所寫邏輯扇區(qū)數(shù)n>
功能:與L命令不同的地方是將內(nèi)存從<地址》起始的一片單元內(nèi)容寫入指定扇區(qū)。只
有W而沒有參數(shù)時(shí),與N命令配合使用將文件寫盤。該命令把由地址所指定的內(nèi)存區(qū)域中
的數(shù)據(jù)寫入指定的驅(qū)動(dòng)器。若地址中只包含偏移量,則段地址在CS中。
其中,扇區(qū)號(hào)決定了寫入起始扇區(qū);區(qū)段數(shù)決定了寫入的區(qū)段個(gè)數(shù):扇區(qū)號(hào)和區(qū)段數(shù)均
用十六進(jìn)制數(shù)表示。
格式2:W地址或W
該命令把指定內(nèi)存區(qū)域中的數(shù)據(jù),寫入到由CS:5C處的文件控制塊所規(guī)定的文件中去。
若省略地址,則內(nèi)存區(qū)域從CS:100開始。
對(duì)于擴(kuò)展名為.EXE或.HEX文件不能寫入。因?yàn)檫@些文件的寫入要用一種特殊格式,而
此格式Debug程序不支持。
(十三)退出Debug命令Q
格式:Q
該命令退出Debug程序并返回DOSo
Q命令并不把內(nèi)存中的文件存盤,若需要存盤的話,應(yīng)在退出前用W命令寫入磁盤。
第二章算術(shù)運(yùn)算類操作實(shí)驗(yàn)(基礎(chǔ)與設(shè)計(jì))
一、實(shí)驗(yàn)要求和目的
1、了解匯編語言中的二進(jìn)制、十六進(jìn)制、十進(jìn)制、BCD碼的表示形式;
2、掌握各類運(yùn)算類指令對(duì)各狀態(tài)標(biāo)志位的影響及測(cè)試方法;
3、熟悉匯編語言二進(jìn)制多字節(jié)加減法基本指令的使用方法;
4、熟悉無符號(hào)數(shù)和有符號(hào)數(shù)乘法和除法指令的使用;
5、掌握符號(hào)位擴(kuò)展指令的使用。
6、掌握BCD碼調(diào)整指令的使用方法
二、軟硬件環(huán)境
1、硬件環(huán)境:計(jì)算機(jī)系統(tǒng)windows;
2、軟件環(huán)境:裝有MASM、DEBUG>LINK、等應(yīng)用程序。
三、實(shí)驗(yàn)涉及的士要知識(shí)
本實(shí)驗(yàn)主要進(jìn)行算術(shù)運(yùn)算程序設(shè)計(jì)和調(diào)試,涉及到的知識(shí)點(diǎn)包括:
1.加減法處理指令
主要有加法指令A(yù)DD,帶進(jìn)位加法ADC,減法指令SUB,帶進(jìn)位減法指令SBB。
2.乘除法指令和符號(hào)位擴(kuò)展指令
主要有無符號(hào)數(shù)乘法指令MUL,帶符號(hào)數(shù)乘法指令I(lǐng)MUL,無符號(hào)數(shù)除法指令DIV,帶符號(hào)
數(shù)除法指令I(lǐng)DIV,以及符號(hào)位從字節(jié)擴(kuò)展到字的指令CBW和從字?jǐn)U展到雙字的指令CWDo
3.BCD碼的調(diào)整指令
主要有非壓縮的BCD碼加法調(diào)整指令DAA,壓縮的BCD碼減法調(diào)整指令DAS,非壓
縮的BCD碼加法調(diào)整指令A(yù)AA,非壓縮的BCD碼減法調(diào)整指令A(yù)AS,乘法的非壓縮BCD
碼調(diào)整指令A(yù)AM,除法的非壓縮BCD碼調(diào)整指令A(yù)AD。
8088/8086指令系統(tǒng)提供了實(shí)現(xiàn)加、減、乘、除運(yùn)算的上述基本指令,可對(duì)表1所示的
數(shù)據(jù)類型進(jìn)行數(shù)據(jù)運(yùn)算。
表1-2-1數(shù)據(jù)類型數(shù)據(jù)運(yùn)算表
二進(jìn)制BCD碼
數(shù)制
帶符號(hào)無符號(hào)組合非組合
運(yùn)算符+、一、X、-i-+、-+、一、X、-T
操作數(shù)字節(jié)、字、多精度字節(jié)(二位數(shù)字)字節(jié)(一位數(shù)字)
各指令的格式、功能及其對(duì)標(biāo)志位的影響等細(xì)節(jié)知識(shí),請(qǐng)同學(xué)們查閱相關(guān)書籍,這里不
再贅述。
四、實(shí)驗(yàn)內(nèi)容與步驟
1、對(duì)于兩組無符號(hào)數(shù),087H和034H,OC2H和5FH,試編程求這兩組數(shù)的和差積商,并考
慮計(jì)算結(jié)果對(duì)標(biāo)志寄存器中狀態(tài)標(biāo)志位的影響:
計(jì)算狀態(tài)標(biāo)志
表達(dá)式結(jié)果CFAFZFOFSFPF
087H+034H
087H-034H
087H*034H
087H/034H
0C2H+5FH
0C2H-5FH
0C2H*5FH
0C2H/5FH
總結(jié)各運(yùn)算對(duì)狀態(tài)標(biāo)志位的影響,及其意義。
2、在數(shù)據(jù)段定義了兩個(gè)多精度的有符號(hào)16進(jìn)制數(shù),F(xiàn)IRST和SECOND,1)求兩數(shù)的和
與差,并將結(jié)果存放在THIRD為首地址的緩沖區(qū)中;2)如果把兩組數(shù)據(jù)當(dāng)作十進(jìn)制數(shù)據(jù)來
處理,再次求兩數(shù)的和與差,并將結(jié)果存放在FORTH為首地址的緩沖區(qū)中。試編程實(shí)現(xiàn)上
述運(yùn)算。
FIRSTDB45H,82H,96H,57H
SECONDDB12H,46H,83H,45H
16進(jìn)制結(jié)果10進(jìn)制結(jié)果
FIRST+SECOND
FIRST-SECOND
3、編程計(jì)算((Z+X*Y-328)-V)/Y,其中X、Y、Z、V均為16位帶符號(hào)數(shù),假設(shè)初始數(shù)
據(jù)分別裝入X、Y、Z、V單元,要求上式計(jì)算結(jié)果的商存入AX,余數(shù)存入DX寄存器。同
學(xué)自行給出初始值加以驗(yàn)證程序。
五、實(shí)驗(yàn)要求
(1)畫出各程序流程圖;
(2)列出程序清單,加上適量注釋;
(3)回答思考問題;
(4)記錄實(shí)驗(yàn)結(jié)果。
(5)完成實(shí)驗(yàn)報(bào)告(實(shí)驗(yàn)材料上的內(nèi)容簡(jiǎn)寫,自己的工作要詳盡)。
第三章字符串操作實(shí)驗(yàn)(設(shè)計(jì)性實(shí)驗(yàn))
一、實(shí)驗(yàn)要求和目的
1.了解匯編語言字符串處理基本流程;
2.熟悉匯編語言字符串處理基本指令的使用方法;
3.掌握利用匯編語言實(shí)現(xiàn)字符串處理的程序設(shè)計(jì)方法。
二、軟硬件環(huán)境
1、硬件環(huán)境:計(jì)算機(jī)系統(tǒng)windows;
2、軟件環(huán)境:裝有MASM、DEBUG、LINK、等應(yīng)用程序。
三、實(shí)驗(yàn)涉及的主要知識(shí)
1、字符串處理基本操作流程
(1)利用SI寄存器保存源串首地址;
(2)利用DI寄存器保存目的串首地址;
(3)利用CX寄存器保存字符串長(zhǎng)度;
(4)利用CLD或STD指令設(shè)置字符串處理方向;
(5)利用字符串處理指令實(shí)現(xiàn)相關(guān)處理。
其中,CLD指令使DF=0,在執(zhí)行串處理指令時(shí)可使地址自動(dòng)增昂:;STD使DF=I,在
執(zhí)行串處理指令時(shí)可使地址自動(dòng)減量。
提示:字符串處理一般都涉及到源串和目的串,匯編語言規(guī)定源串在數(shù)據(jù)段中定義,目
的串在附加段中定義。
2、重復(fù)前綴指令,重復(fù)次數(shù)由計(jì)數(shù)寄存器CX中存放的值決定,指令每重復(fù)執(zhí)行一次,
計(jì)數(shù)器CX中值減1,當(dāng)CX中值減至0時(shí),停止重宣執(zhí)行,繼續(xù)執(zhí)行下一條指令
REP無條件重復(fù)前綴,重復(fù)串操作直到計(jì)數(shù)寄存器的內(nèi)容CX為0為止。經(jīng)常與REP
配合工作的字符串處理指令有MOVS、STOS和LODS。
REPE/REPZ判斷計(jì)數(shù)寄存器的內(nèi)容CX是否為0或ZF=0(即比較的兩個(gè)操作數(shù)不等),
只要滿足一個(gè)則重復(fù)執(zhí)行結(jié)束,否則繼續(xù)執(zhí)行??梢耘cREPE/REPZ配合工作的事指令有
CMPS和SCASo
REPNE/REPNZ判斷計(jì)數(shù)寄存器的內(nèi)容是否為?;騔F=1(即比較的兩個(gè)操作數(shù)相等),
只要滿足一個(gè)則重復(fù)執(zhí)行結(jié)束,否則繼續(xù)執(zhí)行。可以與REPE/REPZ配合工作的串指令有
CMPS和SCASo
3、字符串處理基本指令
(1)MOVS傳送指令
格式:MOVSDST,SRC或MOVSB(傳送字節(jié))或MOVSW(傳送字)。后面兩種
形式需要與REP指令結(jié)合使用。
該指令把由源變址寄存器(SRC)指向的數(shù)據(jù)段中的一個(gè)字(或字節(jié))數(shù)據(jù)傳送到由
目的變址寄存器(DST)指向的附加段中的一個(gè)字(或字節(jié))中去,同時(shí),根據(jù)方向標(biāo)志及
數(shù)據(jù)格式(字或字節(jié))對(duì)源變址寄存器和目的變址寄存器進(jìn)行修改。
(2)STOS存入串指令
格式:STOSDST或STOSB(存入字節(jié))或STOSW(存入字)。
該指令把AL或AX的內(nèi)容存入由目的變址寄存器指向的附加段H勺某單元中,并根據(jù)方
向標(biāo)志(DF)和數(shù)據(jù)類型修改目的變址寄存器的內(nèi)容。
(3)LODS從串取指令
格式:LODSSRC或LODSB(取字節(jié))或LODSW(取字)。
該指令把由源變址寄存器指向的數(shù)據(jù)段中某單元的內(nèi)容傳送到AL或AX中,并根據(jù)方
向標(biāo)志和數(shù)據(jù)類型修改源變址寄存器的內(nèi)容。
(4)CMPS串比較指令
格式:CMPSSRC,DST或CMPSB或CMPSW。
該指令把由源變址寄存器指向的數(shù)據(jù)段中的一個(gè)字節(jié)或字與由目的變址寄存器所指向
的附加段中的一個(gè)字節(jié)或字相減,但不保存結(jié)果,只根據(jù)結(jié)果設(shè)置條件標(biāo)志。
該指令與REPE/REPZ或REPNE/REPNZ結(jié)合,可以比較兩個(gè)數(shù)據(jù)串。
(5)SCAS串掃描指令
格式:SCASDST或SCASB或SCASW。
該指令把AL或AX的內(nèi)容與由目的變址寄存器所指向的附加段口的一個(gè)字節(jié)或字進(jìn)行
比較,并不保存結(jié)果,只根據(jù)結(jié)果設(shè)置條件碼。
該指令與REPE/REPZ或REPNE/REPNZ結(jié)合,可以從一個(gè)字符呂中查找一個(gè)指定的字
符。
總的來說,字符串處理可以耨緩沖區(qū)中一個(gè)數(shù)據(jù)塊搬至存儲(chǔ)器的另一處,比較兩個(gè)字符
串是否相等,從緩沖區(qū)中一個(gè)數(shù)據(jù)塊尋找某一個(gè)特定的關(guān)鍵字,順次從一個(gè)緩沖區(qū)取字符或
順次向一個(gè)緩沖區(qū)存字符等。
四、實(shí)驗(yàn)內(nèi)容與步驟
1、比較緩沖區(qū)中兩字符串是否相同,相同則AL返回0,不同AL返回1。為了使程序的
通用性比較好,字符串長(zhǎng)度要求自動(dòng)獲取。(要求用字符串處理方法)
2、編寫程序,將內(nèi)存中某一區(qū)域的數(shù)據(jù)傳送到另一區(qū)域。(要求用字符串處理方法)
3、編寫程序,在已知字符串中搜索特定字符T,若找到則AL返回0,找不到AL返回1。
(要求用字符串處理方法)
4、編寫程序,統(tǒng)計(jì)一串字符串中字符〃.〃出現(xiàn)的次數(shù)。(要求用字符串處理方法);
注意:同學(xué)自行給出字符串初始值加以驗(yàn)證以上各題程序。
五、實(shí)驗(yàn)要求與提示
1、實(shí)驗(yàn)要求
(1)畫出各程序流程圖;
(2)列出程序清單,加上適取注釋;
(3)回答思考問題:
(4)記錄實(shí)驗(yàn)結(jié)果;
(5)完成實(shí)驗(yàn)報(bào)告(實(shí)驗(yàn)材料上的內(nèi)容簡(jiǎn)寫,自己的工作要詳盡)。
2、實(shí)驗(yàn)提示:
A)自動(dòng)獲取字符串長(zhǎng)度,可以利用地址計(jì)數(shù)器$表達(dá)式獲得。
B)字符/字符串輸入輸出
主要利用DOS的INT21H系統(tǒng)功能調(diào)用來實(shí)現(xiàn)字符或字符串的輸入/輸出操作,其中1
號(hào)功能表示輸入字符;2號(hào)功能表示輸出字符;0A號(hào)功能表示輸入字符串;09號(hào)功能表示
輸出字符串。如果大家想現(xiàn)在使用可以詳細(xì)查閱相關(guān)資料,在后面的課程內(nèi)容和實(shí)驗(yàn)上會(huì)詳
細(xì)學(xué)習(xí),這里簡(jiǎn)單示例提示一下:
(1)顯示單個(gè)字符可以用DOS的INT21H的2號(hào)功能,將字符放在DL寄存器中,2
號(hào)放在AH寄存器中。
MOVAL,'*'
MOVAH,2
INT21H
(2)數(shù)據(jù)區(qū)中的字符串應(yīng)以$結(jié)尾,DS:DX二串地址;如果提前已經(jīng)定義需要顯示的字
符串,顯示字符串可以用如下功能調(diào)用:
LEADX,STR
MOVAH,9
INT21H
六、思考與練習(xí)
I、如果不用字符串處理方法,而用其他方法如何實(shí)現(xiàn)題目2的程序設(shè)計(jì),比較兩種方
法效果?
第四章分支和循環(huán)程序設(shè)計(jì)實(shí)驗(yàn)(設(shè)計(jì)性實(shí)驗(yàn))
一、實(shí)驗(yàn)要求和目的
1.熟悉匯編語言程序設(shè)計(jì)結(jié)構(gòu);
2.熟悉匯編語言分支程序基本指令的使用方法;
3.掌握利用匯編語言實(shí)現(xiàn)單分支、雙分支、多分支的程序設(shè)計(jì)方法;
4.了解匯編語言循環(huán)程序設(shè)計(jì)的基本流程;
5.熟悉匯編語言循環(huán)基本指令的使用方法;
6.掌握利用匯編語言的循環(huán)指令完成循環(huán)程序設(shè)計(jì)方法。
二、軟硬件環(huán)境
I、硬件環(huán)境:計(jì)算機(jī)系統(tǒng)windows:
2、軟件環(huán)境:裝有MASM、DEBUG、LINK、等應(yīng)用程序。
三、實(shí)驗(yàn)涉及的主要知識(shí)
在實(shí)際應(yīng)用中,經(jīng)常根據(jù)一些條件來選擇一條分支執(zhí)行。匯編語言的條件判斷主要是通
過狀態(tài)寄存器中的狀態(tài)位、無符號(hào)數(shù)相減或有符號(hào)相減產(chǎn)生的結(jié)果來進(jìn)行。
1.無條件轉(zhuǎn)移指令JMP
無條件轉(zhuǎn)移指令JMP是使程序無條件轉(zhuǎn)移至目標(biāo)處,又分為段內(nèi)轉(zhuǎn)移、段間轉(zhuǎn)移。
2.條件轉(zhuǎn)移指令JXX
條件轉(zhuǎn)移指令可分為三大類:
1).簡(jiǎn)單條件轉(zhuǎn)移指令。根據(jù)單個(gè)標(biāo)志位的狀態(tài)判斷轉(zhuǎn)移條件。
表1-4-1條件轉(zhuǎn)移指令標(biāo)志位的狀態(tài)
標(biāo)志位指令轉(zhuǎn)移條件意義
JCCF=1有進(jìn)位/借位
CF
JNCCF=0無進(jìn)位/借位
JE/JZZF=1相等/等于0
ZF
JNE/JNZZF=O不相等/不等于0
JSSF=1是負(fù)數(shù)
SF
JNSSF=0是正數(shù)
JOOF=1有溢出
OF
JNO0F=0無溢出
JP/JPEPF=1有偶數(shù)個(gè)1
PF
JNP/JPOPF=0有奇數(shù)個(gè)1
2).無符號(hào)數(shù)條件轉(zhuǎn)移指令。
假設(shè)在條件轉(zhuǎn)移指令前使用匕較指令,比較兩個(gè)無符號(hào)數(shù)A,B,指令進(jìn)行的的操作是
A-B,其轉(zhuǎn)移指令如下:
表1-4?2無符號(hào)數(shù)條件轉(zhuǎn)移指令條件
指令轉(zhuǎn)移條件意義
JA/JNBECF=OANDZF=OA>B
JAE/JNBCF=OORZF=1A>=B
JB/JNAECF=1ANDZF=OA<B
JBE/JNACF=1ORZF=1A<=B
3)帶符號(hào)數(shù)條件轉(zhuǎn)移指令。
表1-4-3帶符號(hào)數(shù)條件轉(zhuǎn)移指令條件
指令轉(zhuǎn)移條件意義
JG/JNLESF=OFANDZF=OA>B
JGE/JNLSF=OFORZF=1A>=B
JL/JNGESFOFANDZF=OA<B
JLE/JNGSFOFORZF=1A<=B
在匯編程序設(shè)計(jì)中,要熟練使用循環(huán)指令和跳轉(zhuǎn)指令等來實(shí)現(xiàn)循環(huán),理解循環(huán)體結(jié)構(gòu)中
的初始化部分、循環(huán)體、結(jié)束部分,并且要結(jié)合前面分支結(jié)構(gòu)相關(guān)的知識(shí)點(diǎn),加深對(duì)循環(huán)結(jié)
構(gòu)的理解和掌握。循環(huán)結(jié)構(gòu)的組成及其設(shè)計(jì)方法的知識(shí)要點(diǎn)有:
1、循
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度xx蘇州租賃房屋租賃合同續(xù)租意向書3篇
- 四年級(jí)數(shù)學(xué)(三位數(shù)乘兩位數(shù))計(jì)算題專項(xiàng)練習(xí)及答案
- 一年級(jí)數(shù)學(xué)計(jì)算題專項(xiàng)練習(xí)1000題匯編
- 2025年度搬家保潔一體化服務(wù)合同3篇
- 2024照明工程智能化升級(jí)分包施工協(xié)議3篇
- 2024年食堂運(yùn)營(yíng)承包權(quán)協(xié)議3篇
- 2025版智慧城市綜合監(jiān)控平臺(tái)建設(shè)合同3篇
- 2024年競(jìng)業(yè)禁止合同標(biāo)準(zhǔn)版
- 2024年規(guī)范版房屋出租協(xié)議樣本版
- 2024養(yǎng)老院活動(dòng)指導(dǎo)員聘用合同-老年智力開發(fā)與認(rèn)知訓(xùn)練3篇
- “技能興威”第一屆威海市職業(yè)技能大賽農(nóng)產(chǎn)品食品檢驗(yàn)員(海洋食品產(chǎn)業(yè)鏈)賽項(xiàng)規(guī)程
- 幼兒園故事繪本《賣火柴的小女孩兒》課件
- 中央2024年國家藥品監(jiān)督管理局中國食品藥品檢定研究院招聘筆試歷年典型考題及考點(diǎn)附答案解析
- 小學(xué)語文四年級(jí)上冊(cè)單元作業(yè)整體設(shè)計(jì)案例
- DB32-T 4752-2024 一體化污水處理設(shè)備通.用技術(shù)要求
- 2024年新高考Ⅰ卷作文審題立意及寫作指導(dǎo)+課件
- 2024年山東臨沂市恒源熱力集團(tuán)限公司高校畢業(yè)生招聘9人重點(diǎn)基礎(chǔ)提升難、易點(diǎn)模擬試題(共500題)附帶答案詳解
- 2024年房屋頂賬協(xié)議模板(二篇)
- 美國史智慧樹知到期末考試答案章節(jié)答案2024年東北師范大學(xué)
- 售后服務(wù)方案及運(yùn)維方案
- 機(jī)加工工作計(jì)劃安排
評(píng)論
0/150
提交評(píng)論