匯編語言實(shí)驗(yàn)講義_第1頁
匯編語言實(shí)驗(yàn)講義_第2頁
匯編語言實(shí)驗(yàn)講義_第3頁
匯編語言實(shí)驗(yàn)講義_第4頁
匯編語言實(shí)驗(yàn)講義_第5頁
已閱讀5頁,還剩129頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論