微機(jī)原理試驗(yàn)指導(dǎo)書AAA資料_第1頁(yè)
微機(jī)原理試驗(yàn)指導(dǎo)書AAA資料_第2頁(yè)
微機(jī)原理試驗(yàn)指導(dǎo)書AAA資料_第3頁(yè)
微機(jī)原理試驗(yàn)指導(dǎo)書AAA資料_第4頁(yè)
微機(jī)原理試驗(yàn)指導(dǎo)書AAA資料_第5頁(yè)
已閱讀5頁(yè),還剩38頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、匯編語(yǔ)言程序的建立和執(zhí)行要建立和運(yùn)行匯編語(yǔ)言程序、系統(tǒng)盤上應(yīng)該首先有如下文件:宏匯編程序普通匯編程序鏈接程序調(diào)試程序.EDIT.COM ( 或其它全屏幕編輯軟件如 WS.COM ,EDLIN.COM等 )編輯程序.MASM. EXE(或 ASM. EXE) .LINK. EXE.DEBUG. COM其中 MASM. EXE是宏匯編程序,如果使用的是普通匯編程序ASM.EXE,則不支持宏匯編.下面,以建立和執(zhí)行用戶程序 ABC. EXE為例來(lái)說(shuō)明上機(jī)過(guò)程。1. 用 EDIT命令建立匯編語(yǔ)言源程序( . ASM文件)源程序就是用戶用匯編語(yǔ)言的語(yǔ)句編寫的程序,它不能被機(jī)器識(shí)別。源程序必須以ASM 為

2、附加文件名。例如打入命令:AEDIT ABC. ASM (每個(gè)命令后面應(yīng)輸入回車,以下均如此) 此時(shí)用戶可以通過(guò)編輯程序的插入命令編寫用戶的源程序ABC. ASM。至于 EDIT 的使用方法可以查閱手冊(cè)。2用 MASM(或者 ASM)命令產(chǎn)生目標(biāo)文件 .OBJ 文件源程序建立以后,就可以用宏匯編程序MASM.EX(E 或者普通匯編程序 ASM.EXE)進(jìn)行匯編。所謂匯編,實(shí)際上就是把以ASM為附加名的源文件轉(zhuǎn)換成用二進(jìn)制代碼表示表示的目標(biāo)文件,目標(biāo)文件以O(shè)BJ為附加名。匯編過(guò)程中,匯編程序?qū)υ次募M(jìn)行兩次掃描,如果源程序中有語(yǔ)法錯(cuò)誤, 則匯編過(guò)程結(jié)束后,匯編程序會(huì)指出源程序中的錯(cuò)誤,這時(shí),用戶

3、可以再用編輯程序來(lái)修改源程序中的錯(cuò)誤,最后,得到?jīng)]有 語(yǔ)法錯(cuò)誤的 OBJ文件。例如,對(duì) ABC. ASM的匯編過(guò)程如下:AMASM ABC.ASM此時(shí),匯編程序給出如下回答:Microsoft( R) Macro Assembler Version 5 00CopYright( C)Microsoft Corp l981一 1985 , 1987 All rights reserved 。Object filename abc. OBJ:Source listing NUL. LST:Cross-reference NUL. CRF:51526十 402346 Bytes symbol spa

4、ce free0 Warning Errors0 Severe ErrOrs 從上面的操作過(guò)程中可以看到,匯編程序的輸入文件就是用戶編寫的匯編語(yǔ)言 源程序,它必須以 ASM為文件擴(kuò)展名。匯編程序的輸出文件有三個(gè),第一個(gè)是目標(biāo) 文件,它以 OBJ為擴(kuò)展名,產(chǎn)生 OBJ文件是我們進(jìn)行匯編操作的主要目的,所以這 個(gè)文件是一定要產(chǎn)生,也一定會(huì)產(chǎn)生的,操作時(shí),這一步只要打人回車就行了;第 二個(gè)是列表文件,它以 LST 為擴(kuò)展名,列表文件同時(shí)給出源程序和機(jī)器語(yǔ)言程序, 從而,可以使調(diào)試變得方便,列表文件是可有可無(wú)的,如果不需要,則在屏幕上出 現(xiàn)提示信息 NUL. LST :時(shí)打入回車即可,如果需要,則打入

5、文件名后回車;第三個(gè)是交叉符號(hào)表,此表給出了用戶定義的所有符號(hào),對(duì)每個(gè)符號(hào)都列出了將其定義 的所在行號(hào)和引用的行號(hào),并在定義行號(hào)上加上“”號(hào),同列表文件一樣,交叉 符號(hào)表也是為了便于調(diào)試而設(shè)置的,對(duì)于一些規(guī)模較大的程序,交叉符號(hào)表為調(diào)試 工作帶來(lái)很大方便。當(dāng)然,交叉符號(hào)表也是可有可無(wú)的,如果不需要,那么,在屏 幕上出現(xiàn)提示信息 NUL. CRF :時(shí),打入回車即可。匯編過(guò)程結(jié)束時(shí),會(huì)給出源程序中的警告性錯(cuò)誤 Warning Errors 和嚴(yán)重錯(cuò) 誤 Servers Errors ,前者指一般性錯(cuò)誤,后者指語(yǔ)法性錯(cuò)誤,當(dāng)存在這兩類錯(cuò) 誤時(shí),屏幕上除指出錯(cuò)誤個(gè)數(shù)外,還給出錯(cuò)誤信息代號(hào),程序員可以

6、通過(guò)查找手冊(cè) 弄清錯(cuò)誤的性質(zhì)。如果匯編過(guò)程中,發(fā)現(xiàn)有錯(cuò)誤,則程序員應(yīng)該重新用編輯命令修改錯(cuò)誤,再進(jìn) 行匯編,最終直到匯編正確通過(guò)。要指出的是在匯編過(guò)程中只能指出源程序中的語(yǔ) 法錯(cuò)誤,并不能指出算法錯(cuò)誤和其他錯(cuò)誤。3用 LINK 命令產(chǎn)生可執(zhí)行文件( EXE文件)匯編過(guò)程根據(jù)源程序產(chǎn)生出二進(jìn)制的目標(biāo)文件(OBJ文件),但 OBJ文件用的是浮動(dòng)地址,它不能直接上機(jī)執(zhí)行。所以還必須使用鏈接程序(LINK)將 OBJ文件轉(zhuǎn)轉(zhuǎn)換成可執(zhí)行的 EXE文件。 LINK 命令還可以將某一個(gè)目標(biāo)文件和其它多個(gè)模塊(這 些模塊可以是由用戶編寫的,也可以是某個(gè)程序庫(kù)中存在的)鏈接起來(lái)。具體操作如下(以對(duì) ABC. O

7、BJ進(jìn)行鏈接為例) :A LINK ABC 此時(shí),在屏幕上見到如下回答信息:IBM Personal Computer linkVersion 200(C)Copyright IBM Corp l981, 1982,1983Run File ABC.EXE :List File NUL.MAP:Libraries .LIB:Warnhg : NO STACK SegmentL1NK 命令有一個(gè)輸入文件,即由匯編程序產(chǎn)生的OBJ文件,有時(shí),用戶程序用到庫(kù)函數(shù),此時(shí),對(duì)于提示信息Libraries LIB ,要輸入庫(kù)名。EXE的執(zhí)行文件,產(chǎn)生此文件 MAP的列表分配文件,有人也稱 比如某一個(gè)列表分

8、配文件為如 下L1NK 過(guò)程產(chǎn)生兩個(gè)輸出文件,一個(gè)是擴(kuò)展名為件當(dāng)然是 L1NK 過(guò)程的主要目的,另一個(gè)是擴(kuò)展名為 它為映象文件。 它給出每個(gè)段在內(nèi)存中的分配情況。內(nèi)容:Warning: No Stack SegStartStop LengthNameClass0000H0015H0016HCODE0020H0045H0026HDATA0050H0061H0012HEXTRAoriginGroupProgram entry Point at 0000:0000MAP 文件也是可有可無(wú)的。從 L1NK 過(guò)程的提示信息中,可看到最后給出了一個(gè)“無(wú)堆棧段”的警告性錯(cuò)誤 ,這并不影響程序的執(zhí)行。當(dāng)然,如

9、果源程序中設(shè)置了堆棧段,則無(wú)此提示信息。4程序的執(zhí)行有了.EXE 文件后,就可以執(zhí)行程序了,此時(shí),只要打入文件名即可。仍以ABC為例:A ABC( 回車 )A 實(shí)際上,大部分程序必須經(jīng)過(guò)調(diào)試階段才能糾正程序設(shè)計(jì)中的錯(cuò)誤,從而得到正 確的結(jié)果。所謂調(diào)試階段,就是用調(diào)試程序(DEBUG程序)發(fā)現(xiàn)錯(cuò)誤,再經(jīng)過(guò)編輯、匯編、鏈接糾正錯(cuò)誤。關(guān)于 DEBUG程序中的各種命令,可參閱 DOS手冊(cè),本實(shí)驗(yàn)指 導(dǎo)書后面附有一些常用命令,下面給出最常用的幾個(gè)命令。先進(jìn)入 DEBUG程序并裝入要調(diào)試的程序 ABC.EXE,操作命令如下:A DEBUG ABC.EXE;進(jìn)入 DEBUG,并裝配 ABC.EXE此時(shí),屏幕

10、上出現(xiàn)一個(gè)短劃線,表明以進(jìn)入DEBUG狀態(tài)。為了察看程序運(yùn)行情況,便于調(diào)試,常常要分段運(yùn)行程序,為此,要設(shè)立“斷點(diǎn)” ,即讓程序運(yùn)行到某處 自動(dòng)停下,并把所有寄存器的內(nèi)容顯示出來(lái)。為了確定我們所要設(shè)定的斷點(diǎn)地址常 常用到反匯編命令,反匯編命令格式如下:一 U;從當(dāng)前地址開始反匯編 也可以從某個(gè)地址處開始反匯編,如下所示。一 U200;從 CS: 200 處開始反匯編程序員心中確定了斷點(diǎn)地址后,就可以用G命令來(lái)設(shè)置斷點(diǎn)。比如,想把斷點(diǎn)設(shè)置在 0120H 處,則如下打入命令:一 G120 此時(shí),程序在 0120H 處停下,并顯示出所有寄存器以及各標(biāo)志位的當(dāng)前值,在 最后一行還給出將要執(zhí)行的指令的地

11、址、機(jī)器語(yǔ)言和匯編語(yǔ)言,程序員可以從顯示 的寄存器的內(nèi)容來(lái)了解程序運(yùn)行是否正確。對(duì)于某些程序段,單從寄存器的內(nèi)容看不到程序運(yùn)行的結(jié)果,而需要觀察數(shù)據(jù) 段的內(nèi)容,此時(shí)可用 D 命令,使用格式如下:一 d DS: 0000 從數(shù)據(jù)段的 0 單元開始顯示 128 個(gè)字節(jié)在有些情況下,為了確定錯(cuò)誤到底由哪條指令的執(zhí)行所引起,要用到跟蹤命令。跟 蹤命令也叫單步執(zhí)行命令,此命令使程序每執(zhí)行一條指令,便給出所有寄存器的內(nèi) 容,并處于等待狀態(tài)。比如:一 T3從當(dāng)前地址往下執(zhí)行三條指令 此命令使得從當(dāng)前地址往下執(zhí)行三條指令,每執(zhí)行一條,便給出各寄存器內(nèi)容。最后,給出下一條要執(zhí)行的指令的地址、機(jī)器語(yǔ)言和匯編語(yǔ)言從

12、 DEBUG退出時(shí),使用如下命令:一 Q; 每一個(gè)有經(jīng)驗(yàn)的程序員都必定熟練掌握調(diào)試程序的各主要命令。為此,初學(xué)者 可通過(guò)軟件實(shí)驗(yàn)部分的實(shí)驗(yàn)一來(lái)掌握DEBUG的一些基本操作并花一些功夫查閱、掌握 DOS手冊(cè)中有關(guān) DEBUG程序的說(shuō)明。建立和運(yùn)行匯編源程序的基本步驟見下圖:編程過(guò)程匯編過(guò)程調(diào)試運(yùn)行過(guò)程運(yùn)行軟件實(shí)驗(yàn)部分實(shí) 驗(yàn) 一 DEBUG 軟 件 的 使 用DEBUG.COM 是專為 8086/8088 匯編語(yǔ)言設(shè)計(jì)的一種調(diào)試工具 ,是匯編語(yǔ)言程序設(shè)計(jì)者必 須掌握的工具。具有顯示、修改、動(dòng)態(tài)跟蹤等功能。使用它可以對(duì)* COM 、*EXE 文件進(jìn)行動(dòng)態(tài)跟蹤。DEBUG 可以顯示和修改內(nèi)存與寄存器內(nèi)

13、容,以便在調(diào)試中檢查程序,查找與改錯(cuò);亦支 持小匯編,直接對(duì)小段程序進(jìn)行匯編;也可對(duì)磁盤進(jìn)行讀寫。 DEBUG 部分指令請(qǐng)見本書附 錄。一、實(shí)驗(yàn)?zāi)康? 通過(guò)實(shí)驗(yàn)掌握 DEBUG軟件的基本使用方法。2 進(jìn)一步熟悉、理解 8088 8086 的尋址方式。 3掌握數(shù)據(jù)傳送、算術(shù)運(yùn)算、邏輯運(yùn)算等類指令的基本操作。、實(shí)驗(yàn)內(nèi)容與步驟本實(shí)驗(yàn)進(jìn)行前必須保證系統(tǒng)盤上有DEBUG.EXE文件。進(jìn)入 DEBUG只需在 DOS環(huán)境下執(zhí)行 DEBUG命令,即鍵入 DEBUG回車后 ,屏幕上顯示 DEBUG 提示符:“ _”(短劃線) 。操作如下 :A:DEBUG注: 字符下有下劃線的為鍵入的內(nèi)容,代表回車, 后面內(nèi)容均

14、如此1程序輸入?yún)R編命令( A 命令)在輸入程序應(yīng)注意以下幾點(diǎn):( 1)輸入的數(shù)字必須是十六進(jìn)制數(shù),并且不輸入H。( 2)分號(hào)后面的內(nèi)容(注釋)不要輸入。( 3)不輸入標(biāo)號(hào),條件轉(zhuǎn)移指令中的標(biāo)號(hào)用偏移地址代替。 方法:先用一個(gè)離本轉(zhuǎn)移指令的 IP 不遠(yuǎn)的但不一定準(zhǔn)確的偏移地址代替標(biāo)號(hào),待程序輸入且完成反匯編后獲得標(biāo)號(hào)所在處的準(zhǔn)確的偏移地址時(shí)再 修改。在 DEBUG提示符下鍵入 A 即進(jìn)入?yún)R編輸入狀態(tài)-A 鍵入下面的匯編程序13F2:0100 MOV AX,200013F2:0103MOVDS,AX13F2:0105MOVSS,AX13F2:0107MOVBX,205013F2:010AMOVSI

15、,BX13F2:010CMOVDI,305013F2:010FMOVSI,DI13F2:0111MOVSP,5FFF13F2:0114MOVCL,1913F2:0116MOVBL,CL13F2:0118MOVAH,F013F2:011AMOVCH,AH13F2:011CMOVBYTE PTR DI,4013F2:011FMOVWORD PTR SI,010013F2:0123MOVDL,SI+0113F2:0126MOVDH,SI+0113F2:0129MOVAL,SI+0113F2:012CMOVWORD PTR BX+SI,002213F2:0130MOVBX+SI+02,BX13F2:0

16、133MOVBX+SI+02,BX13F2:0136MOVBP,BX+DI+0213F2:0139MOVBX+DI,BX13F2:013BMOVAX,BP+DI13F2:013DMOVBL,AL13F2:013FMOVES,BX13F2:0141PUSHBX13F2:0142PUSHDI13F2:0143PUSHDI13F2:0144POPCX13F2:0145POPDX13F2:0146XCHGBP,AX13F2:0147XCHGDH,BL13F2:0149SCHF13F2:014ACMC13F2:014B LAHF13F2:014CSTD13F2:014DCLI13F2:014EPUSHF

17、13F2:014FCLD13F2:0150POPF13F2:0151INT2113F2:0153C重新回到 DEBUG提示符“ - ”狀態(tài),表示匯編命令已結(jié)束。2 反匯編命令( U 命令)U0100 0153則屏幕顯示如下信息:13F2:0100 B8020013F2:0103 8ED813F2:0105 8ED013F2:0107 BB505213F2:010A 89DE13F2:010C BF505313F2:010F B119MOV AX,2000MOV DS,AXMOV SS,AXMOV BX,2050MOV SI,BXMOV DI,3050 MOV SI,DI13F2:014E 9C

18、PUSHF13F2:014F FCCLD13F2:0150 9D POPF13F2:0151 CD21 INT 213寫文件于磁盤中在程序鍵入后,應(yīng)及時(shí)存盤,以免發(fā)生錯(cuò)誤操作時(shí),丟失程序。寫文件前先用 N 命令給文件命名。若文件名定為L(zhǎng)XA.COM,則具體操作如下:-NLXA.COM定義好名稱后 , 再在 CX中存放文件長(zhǎng)度即字節(jié)數(shù): 文件長(zhǎng)度 =終止地址一起始地址 1 具體操作如下 :CX 0000: 0153 -WWriting 0153 bytes;利用 R 命令顯示 CX寄存器當(dāng)前內(nèi)容 ;屏幕顯示 CX的現(xiàn)存內(nèi)容;輸入文件長(zhǎng)度;利用 W命令將文件寫入;寫入完成 若文件長(zhǎng)度 65536

19、則用 BX、CX存放長(zhǎng)度。返回 DO5后用 DIR 命令可以見到LXA COM文件已經(jīng)存在,文件長(zhǎng)度 339 字節(jié)。4程序跟蹤調(diào)試 在狀態(tài)下主要是可以對(duì)程序進(jìn)行調(diào)試 , 調(diào)試前可先裝入已存好的程序。 注意:在 DEBUG環(huán)境下不要執(zhí)行 INT 20H 。對(duì)已存在的 COM文件(或 EXE文件)可以這樣裝人文件:鍵人A: DEBUGE LXA COM又出現(xiàn)提示符“ - ”。此時(shí)可以用 R命令查看 DEBUG對(duì) .COM 文件(或 .EXE 文件)的 段寄存器、 IP 及 F 寄存器的初始化值。-RAX=0000 BX=0000 CX=0000 DX=0000 SP=FFFE BP=0000 SI

20、=0000 DI=0000DS=13F2 ES=13F2 SS=13F2 CS=13F2 IP=0100 NV UP DI PL NZ NA PO NC13F2:0100 B80020MOV AX, 2000可以用 T 命令來(lái)進(jìn)行單步和多步指令的運(yùn)行, 運(yùn)行指令后將顯示各寄存器內(nèi)容和下一條將 要執(zhí)行的指令:T100;從 CS:0100H 開始單步執(zhí)行,顯示寄存器值A(chǔ)X=2000 BX=0000 CX=0153 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000DS=13F2 ES=13F2 SS=13F2 CS=13F2 IP=0103 NV UP DI PL NZ

21、 NA PO NC 13F2:0103 8ED8 MOV DS, AX-T ;從當(dāng)前 IP 開始執(zhí)行一條指令A(yù)X=2000 BX=0000 CX=0153 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000 DS=2000 ES=13F2 SS=13F2 CS=13F2 IP=0105 NV UP DI PL NZ NA PO NC 13F2:0105 8ED0 MOV SS, AX-T4 ;用 Tn命令來(lái)跟蹤幾條指令, n 為需跟蹤的指令條數(shù)。 Ax=2000 BX=2050 CX=0153 DX=0000 SP=FFFE BP=0000 SI=3050 DI=3

22、050 DS=2000 ES=13F2 SS=2000 CS=13F2 IP=0111 NV UP DI PL NZ NA PO NC 13F2:0111 BCFF5F MOV SP, 5FFFAx=2000 BX=2050 CX=0153 DX=0000 SP=5FFE BP=0000 SI=3050 DI=3050 DS=2000 ES=13F2 SS=2000 CS=13F2 IP=0114 NV UP DI PL NZ NA PO NC 13F2:0114 B119 MOV CL, 19Ax=2000 BX=2050 CX=0119 DX=0000 SP=5FFE BP=0000 SI

23、=3050 DI=3050 DS=2000 ES=13F2 SS=2000 CS=13F2 IP=0116 NV UP DI PL NZ NA PO NC 13F2:0116 88CB MOV BL, CLAx=2000 BX=2019 CX=0119 DX=0000 SP=5FFE BP=0000 SI=3050 DI=3050 DS=2000 ES=13F2 SS=2000 CS=13F2 IP=0118 NV UP DI PL NZ NA PO NC 13F2:0118 B4F0 MOV AH, F0用 G 命令執(zhí)行指定區(qū)域中的指令-g=0100 013f ;從 IP=0100H 開始執(zhí)

24、行到 113FH,并顯示寄存器的內(nèi)容 AX=2019 BX=2019 CX=0119 DX=0101 SP=SFFF BP=2019 SI=3050 DI=3050 DS=2000 ES=13FZ SS=2000 CS=13FZ IP=013F NV UP DI PL NZ NA PO NC 13F2 : 013F 8EC3 MOV ES ,BX用 D 命令可查看指定存儲(chǔ)單元后的 128 個(gè)存儲(chǔ)單元的內(nèi)容。如若需查看數(shù)據(jù)段 3050 存儲(chǔ)單元的內(nèi)容,可用下面的命令。叢中可看出3050H 單元的內(nèi)容為 00H。-dds : 30502000:3050 00 01 00 00 96 00 00 0

25、0-B4 00 00 00 D3 00 00 00 4.S.2000:3060 FZ 00 00 00 10 01 00 00-2F 01 00 00 4D 01 00 00 r/.M.2000:3070 6C 01 00 00 20 09 ZD OD-SD 00 00 00 SD 00 00 00 1. .-. -. 2000:3080 20 00 09 00 ZD 00 OD 00-5D 00 00 00 SD 00 00 00 . .-. . . . .2000:3090 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 .-.-.-.-.

26、2000:30A0 ZE 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 .-2000:30B0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 -.-.2000:30C0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 -.-.-5程序調(diào)試練習(xí)修改并調(diào)試以下程序, 使之完成向以 30000H開始的內(nèi)存單元中存入 31 個(gè)先自然遞增然 后又自然遞減的數(shù)據(jù)( 00H0FH 00H)的功能。程序從 CS:0100H開始存放。調(diào)試完成后程 序命名為 LXBCOM并

27、存盤。程序如下:;LXBMOV AX , 3000MOV DS , AXMOV SI , 0MOV CL , OFHXOR AX , AXL1: MOV SI , ALINC SIDEC CLJNZ L1MOV CX , 10HL2: MOV SI , ALINC SIDEC ALLOOP L2INT 20步驟如下:用匯編 A 命令輸入程序。用反匯編 U命令顯示程序及目標(biāo)碼。-U010013F2: 0100 B80030MOV AX, 300013F2: 0103 SED8MOV DS, AX13F2: 0105 BE0000MOV SI, 000013F2: 0108 B10FMOV CL,

28、 OF13F2: 010A 31C0XOR AX, AX13F2: 010C 8804MOV SI, AL13F2: 010E FECOINC AL13F2: 0110 FEC9DEC CL13F2: 0112 75F8JNZ 010C13F2: 0114 B91000MOV CX, 001013F2: 0117 8804MOV SI, AL13F2: 0119 46INC SI13F2: 0llA FEC8DEC AL13F2: 0llC E2F9LOOP 011713F2: 0llE CD20INT 20-g=0100 0lleAX=00FF BX=0000 CX= 0000 DX=000

29、0 SP =FFFE BP=0000 SI=0010 DI=0000DS=3000 ES=13F2 SS=13F2 CS=13F2 IP=0llE NV UP DI NG NZ AC PE NC 13F2 : 0llE CD20 INT 203. 用 W命令將文件存入磁盤 , 文件名定為 LXB.COM4. 用 G命令運(yùn)行程序到 INT 20H(注意:不執(zhí)行 INT 20H 命令)5. 用 D查看數(shù)據(jù)段中 0000H 處數(shù)據(jù) , 檢查是否將數(shù)據(jù)按要求存入該區(qū)域-dds : 00003000:0000 OF OE OD OC OB OA 09 08-07 06 05 04 03 02 01 00

30、 -3000:0010 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 .-.3000:0020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 -3000:0030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 -.-3000:0040 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 .-.-3000:0050 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00

31、00 .-3000:0060 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 -3000:0070 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 -.-.-.-.檢查內(nèi)存可發(fā)現(xiàn)數(shù)據(jù)只有從 0FH到 00H, 說(shuō)明程序存在一定的問(wèn)題6. 用 T命令單步執(zhí)行程序 (執(zhí)行到 INT 20H) 并檢查問(wèn)題所在 可看出在程序中少了一條 INC SI 指令, 在適當(dāng)?shù)奈恢眉尤朐撝噶?. 修改程序用塊移動(dòng)指令 M將 010EH以后的程序下移兩個(gè)字節(jié)后插入INC SI 指令- a010e13F2:010E13F2

32、:010F NOPA命令進(jìn)13F2:0110 C用反匯編命令檢查程序 ,特別注意轉(zhuǎn)移指令中偏移地址是否有變化, 若有可用反匯編行修改后再反匯編。反匯編后程序如下:13F2: 0100 B8003013F2: 0103 8ED813F2: 0105 BE000013F2: 0108 B10F13F2: 010A 31C0MOV AX, 3000MOV DS, AXMOV SI, 0000MOV CL, OFXOR AX, AX13F2: 010C 8804MOV SI, AL13F2: 010E 46INC SI13F2: 010F 90NOP13F2: 0110 FECOINC AL13F2:

33、 0112 FEC9DEC CL13F2: 0114 75F6JNZ 010C13F2: 0116 B91000MOV CX, 001013F2: 0119 8804MOV SI , AL13F2: 0llB 46INC SI13F2: 0llC FEC8DEC AL13F2: 0llE E2F9LOOP 0119檢查程序正確后,可用 G命令執(zhí)行并再次在數(shù)據(jù)區(qū)檢查運(yùn)行結(jié)果。-g=0100 0120AX=00FF BX=0000 CX=0000 DX=0000 SP=FFFE BP=0000 SI=00IF DI=0000DS=3000 ES=13F2 SS=13F2 CS=13F2 IP=01

34、20 NV UP DI NG NZ AC PE NC 13F2 : 0120 CD20 INT 20-dds : 03000:0000 00 OE OD OC OB OA 09 08-07 06 05 04 03 02 01 OF -.-.-.3000:0010 OE OD OC OB OA 09 08 07-06 05 04 03 02 01 00 00 .-.-.-3000:0020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 -3000:0030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00

35、00 3000:0040 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 -.3000:0050 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 -.-.3000:0060 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 .3000:0070 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 .-.LXB.00H 0FH 00H這 31 個(gè)數(shù)已填人以 30000H 開始的內(nèi)存區(qū)域。將修改好的程序命名為 CO

36、M,寫入磁盤。三、思考題在 DEBUG環(huán)境下顯示的程序和數(shù)字是什么形式?標(biāo)號(hào)又是什么形式? 通過(guò)本次實(shí)驗(yàn)?zāi)銓W(xué)會(huì)了那些 DEBUG命令。實(shí)驗(yàn)二:匯編語(yǔ)言程序的建立和執(zhí)行實(shí)驗(yàn)?zāi)康模? 熟悉部分偽指令及匯編運(yùn)算符,掌握匯編源程序的編寫方法。 2進(jìn)一步掌握匯編源程序的編輯、連接、調(diào)試及運(yùn)行的全過(guò)程。 實(shí)驗(yàn)內(nèi)容及步驟:建立和運(yùn)行匯編語(yǔ)言程序,系統(tǒng)盤上應(yīng)具有如下文件:EDIT.COMMASM.EXELINK.EXEDEBUG .COM具體步驟及說(shuō)明請(qǐng)見前面。(一) .熟悉偽指令及匯編運(yùn)算符的檢查性編輯練習(xí)將結(jié)果添入后 ,上機(jī)檢驗(yàn)結(jié)果是否正確。DATA SEGMENT PARA DATAQA EQU 255

37、;QA=QA1=QA GT 3000;QA1=QA2=0FFFH;QA2=QA3=EQU QA2-255;QA3=QA4=88 MOD 5;QA4=QA5=88H SHR 2;QA5=QA6=QA3/16+15;QA6=ORG 1060HG1 DB 32,QA,98/2,NOT 25;DS:1060HG2 DW OFF6H,OFFSET G2;DS:1064HG3 Dw 3 DUP(5);DS:1068HG4 DW SEG G1;DS:106EHSA EQU LENGTH G3;SA=SB EQU SIZE G3;SB=SC=TYPE G3;SC=ORG 1200HF1=THIS WORD;O

38、FFSET F1=, TYPE F1=F2 DB 11H,22H,33H,44H;1200H:F3 DD 12345H;1204H:DATA ENDSSTACK SEGNENT STACK STACK ;DB 100 DUP(?)STACK ENDS;SP=CODE SEGMENT WORD CODEAASSUME CS:CO,DE DS:DATA STAR PROC FAR PUSH DSXOR AX ,AXPUSH AXMOV AX , DATAMOV DS ,AX;DS=MOV AL,BYTE PTR G2;AL=MOV BL,TYPE FF;BL=MOV AX,WORD PTR FF;

39、 AX=AND AX , OFFH;AX=MOV BX,WORD PTR G1;BX=MOV BX,255 AND OFH;BX=MOV CL,LOW QA4;CL=MOV AL,LOW QA1;AL=MOV BL,HIGH QA5;BL=MOV DL,TYPE STAR;DL=ADD AX,OFFSET F2;AX=MOV BX,F1;BX=RETSTAR ENDPCODE ENDSEND STAR上機(jī)運(yùn)行該程序 , 運(yùn)行步驟如下 :( 詳細(xì)說(shuō)明見 匯編源程序的建立和執(zhí)行 )1 編輯上面的匯編程序 A: masm lx2a.asmMicrosoft (R) Macro Assembler V

40、ersion 5.00Copyright (C) Microsoft Corp 1981-1985, 1987. All rights reserved.Object filename lx2a.OBJ :Source listing NUL.LST : Cross-reference NUL . CRF :51518 + 402370 Bytes symbol space free0 Warning Errors0 Severe ErrorsA: link lx2aIBM Personal Computer LinkerVersion 2.00 (C)Copyright IBM Corp 1

41、981, 1982, 1983 Run File LX2A.EXE :LiSt File NuL.MAP : IX2aLibraries .LIB :A: type lx2a.mapStart Stop Length Name Class00000H 01207H 1208H DATA DATA01210H 01273H 0064H STACK STACK01274H 0129EH 002BH CODE CORDOrigin GroupProgram entry point at 0127:0004A: debug lx2a.exe-rAX=0000 BX=0000 CX=1300 DX=00

42、00 SP=0064 BP=0000 SI=0000 DI=0000 DS=13FI ES=13FI SS=1522 CS=1528 IP=0004 NV UP DI PL NZ NA PO NC1528: 0004 1EPUSH DS-u4 2e1528: 0004 1EPUSH DS1528: 0005 33C0XOR AX,AX1528: 0007 50PUSH AX1528: 0008 B80114MOV AX , 14011528: 000B 8ED8MOV DS , AX1528: 000D A06410MOV AL , 10641528: 0010 B304MOV BL , 04

43、1528: 0012 A10412MOV AX , 12041528: 0015 25FF00AND AX , 00FF1528: 0018 8BIE6010MOV BX , 1060 1528: 001C BBOF00MOV BX , 000F1528: 001F B103MOV CL , 031528: 0021 B000MOV AL , 001528: 0023 B300MOV BL , 001528: 0025 B2FEMOV DL , FE1528: 0027 050012ADD AX , 12001528: 002A 8BIE0012MOV BX , 1200 1528: 002E

44、 CBRETF-gOdAX=1401 BX=0000 CX=1300 DX=0000 SP=0060 BP=0000 SI=0000 DI=0000DS=1401 ES=13FI SS=1522 CS=1528 IP=000D NV UP DI PL ZR NA PE NC1528 : 000D A06410MOV AL , 1064DS : 1064=F6-Dds : 10601401:1060 20 FF 31 E6 F6 OF 64 10-05 00 05 00 05 00 01 14 .lfv.d1401:1070 00 00 00 00 00 00 00 00-00 00 00 00

45、 00 00 00 00 -.-1401:1080 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 .-.-.-1401:1090 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 .-.-.-1401:10A0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 .-.-.-1401:10B0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 .-.-.-1401:10C0 00 00 00 00 00 00

46、00 00-00 00 00 00 00 00 00 00 .-.-.-1401:10D0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 .-.-.-Dds : 12001401:1200 11 22 33 44 45 23 01 00-00 00 00 00 00 00 00 00 .3DE#1401:1210 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 .-.-.-1401:1220 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 .-.-.

47、-1401:1230 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 .-.-.-1401:1240 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 .-.-.-1401:1250 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 .-.-.-1401:1260 00 00 00 00 00 00 00 00-00 00 OD 00 28 15 EO 10 (.1401:1270 00 00 F113 1E 33 CO 50-B8 0114 8E D8

48、AO 64 10 .q.38PS.X d.-tAX=14F6 BX=0000 CX=1300 DX=0000 SP=0060 BP=0000 SI=0000 DI=0000DS=1401 ES=13FI SS=1522 CS=1528 IP=0010 NV UP DI PL ZR NA PE NC1528 : 0010 B304MOV BL , 04-tAX=14F6 BX=0004 CX=1300 DX=0000 SP=0060 BP=0000 SI=0O00 DI=0000 DS=1401 ES=13FI SS=1522 CS=1528 IP=0012 NV UP DI PL ZR NA

49、PE NC 1528 : 0012 A10412MOV AX , 1204 DS : 1204=2345-tAX=2345 BX=0004 CX=1300 DX=0000 SP=0060 BP=0000 SI=0000 DI=0000 DS=1401 ES=13FI SS=1522 CS=1528 IP=0015 NV UP DI PI ZR NA PE NC 1528 : 0015 25FF00AND AX , 00FF-t( 二 ) 正負(fù)數(shù)分流程序設(shè)計(jì)設(shè)首址為 BUFFER的內(nèi)存緩沖區(qū)中存有 32 個(gè)數(shù),試將數(shù)據(jù)塊中的正數(shù)(包括0)存至起始地址為 PLUS的緩沖區(qū),負(fù)數(shù)存至起始地址為 MI

50、NUS的緩沖區(qū)中。初步編寫的程序如下 , 先 進(jìn)行調(diào)試。首先編輯 ASM文件。LX2C.ASMDATA SEGMENTBUFFER DB F5H,46H,78H,4F,0BCH,0DAH,0ABH,02HDB 12H,56H,0D5H,0ACH,34H,89H,45H,0C3HDB 00,14H,45H,58H,64H,0D3H,0C3H,OA5HDB 0B3H,0FFH,0D9H,64H,0D3H,90H,80H,7FHCOUNT EQU $-BUFFERPLUS DB COUNT DUP(?) MINUS DB COUNT DUP(?)DATA ENDSSTACK SEGMENT STAC

51、K STACKDB 100 DUP(?)CODE SEGMENT PARA CODE ASSUME CS : CODE, SS : STACK , DS : DATA , ES : DATA START PROC FARPUSH DSXOR AX ,AXPUSH AXMOV AX , DATAMOV DS,AXMOV ES ,AXMOV XI ,OFFSET BUFFER LEA DI ,PLUD LEA BX,MINUD MOV CX , COUNTCLDL1 : LODSB TEST AL, 80HJNZ L2STOSBL2 : XCHG BX, DISTOSB XCHG BX,DIAGA

52、IN: LOOP L1RETSTART ENDPCODE ENDSEMD STARTA: MASM LX2C.ASMMicrosoft (R) Macro Assembler Version 5.00Copyright (C) Microsoft Corp 1981-1985, 1987. All rights reserved.Object filename LX2C .OBJ :Source listing NUL.LST: LXZCCross-reference NUL.CRF:End of file encountered on input fileLX2C.ASM(38) : war

53、ning A4085: End of file, no END directive Open segments: STACKLX2C.ASM(2) : error A2009: Synbol not defined: F5H LX2C.ASM(21) : error A2009: Symbol not defined: XI LX2C.ASM(22) : error A2009: Symbol not defined: PLUD LX2C.ASM(23) : error A2009: Synbol not defined: MINUD LX2C.ASM(37) : error A2105: E

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論