8086、8088匯編語言程序設(shè)計實驗指導(dǎo)書_第1頁
8086、8088匯編語言程序設(shè)計實驗指導(dǎo)書_第2頁
8086、8088匯編語言程序設(shè)計實驗指導(dǎo)書_第3頁
8086、8088匯編語言程序設(shè)計實驗指導(dǎo)書_第4頁
8086、8088匯編語言程序設(shè)計實驗指導(dǎo)書_第5頁
已閱讀5頁,還剩26頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、仰恩大學(xué)電子工程系實驗教材系列8086/8088匯編語言程序設(shè)計實驗指導(dǎo)書 電子工程系 編2011年1月27安全用電須知安全用電是實驗中始終需要注意的重要問題。為了做好實驗,確保人身和設(shè)備的安全,實驗時,必須嚴(yán)格遵守下列安全用電規(guī)則: (1) 接線、改接、拆線都必須在切斷電源的情況下進(jìn)行,即“先接線后通電,先斷電再拆線“。 (2) 在電路通電情況下,人體嚴(yán)禁接觸電路不絕緣的金屬導(dǎo)線或連接點(diǎn)等帶電部位。萬一遇到觸電事故,應(yīng)立即切斷電源,進(jìn)行必要的處理。(3) 實驗中,特別是設(shè)備剛投入運(yùn)行時,要隨時注意儀器設(shè)備的運(yùn)行情況, 如發(fā)現(xiàn)有超量程、過熱、異味、異聲、冒煙、火花等,應(yīng)立即斷電,并請老師檢查。

2、 (4) 實驗時應(yīng)精神集中,同組者必須密切配合,接通電源前須通知同組同學(xué),以防止觸電事故。 (5) 電機(jī)轉(zhuǎn)動時,防止導(dǎo)線、發(fā)辮、圍巾等物品卷入。 (6) 了解有關(guān)電器設(shè)備的規(guī)格、性能及使用方法,嚴(yán)格按額定值使用。注意儀表的種類、量程和連接使用方法,例如,不得用電流表或萬用表的電阻檔,電流檔去測量電壓;電流表、功率表的電流線圈不能并聯(lián)在電路中等等。(7) 請穿絕緣膠鞋進(jìn)入實驗室。目 錄第一部分 8088/8086匯編語言上機(jī)實驗指導(dǎo) 一、上機(jī)實驗?zāi)康?1二、上機(jī)前的準(zhǔn)備 1三、用“記事本”編輯匯編的源程序 1四、masm.exe編譯程序的運(yùn)行 1五、link.exe 生成可執(zhí)行文件的運(yùn)行 2六、

3、debug.exe 調(diào)試程序的運(yùn)行 2七、masm for windows集成實驗環(huán)境 3第二篇 匯編語言程序設(shè)計上機(jī)實驗實驗一:運(yùn)行一個簡單的匯編語言源程序4實驗二:debug命令的使用 6實驗三:變量的屬性 8實驗四:dos功能的調(diào)用與延時程序 11實驗五: 綜合實驗 14實驗六:串操作實驗 19實驗七:子程序設(shè)計實驗 23第一部分 8088/8086匯編語言上機(jī)實驗指導(dǎo) 一、上機(jī)實驗?zāi)康?初步了解8086/8088匯編程序的基本結(jié)構(gòu),利用windows xp附件的記事本編輯簡單的匯編語言源程序,形成擴(kuò)展名為 .asm 的文本文件格式(即匯編源程序)。2. 學(xué)習(xí)宏匯編程序masm.exe

4、,連接程序link.exe,調(diào)試程序 debug .exe的使用。3. 在微機(jī)上、在“masm for windows集成實驗環(huán)境”下,運(yùn)行并調(diào)試8086/8088匯編源程序。二、上機(jī)前的準(zhǔn)備1. pc機(jī)的操作系統(tǒng)可以是windoes98,也可以是windows xp等操作系統(tǒng)。 2硬盤上安裝“masm for windows集成實驗環(huán)境”軟件。或者含有masm、link、debug等文件的masm5文件夾。(windows xp自帶debug文件,因此應(yīng)刪除masm5文件夾中的debug文件,否則會產(chǎn)生沖突。)3. 學(xué)習(xí)masm、link、debug三個文件的使用方法。4. 準(zhǔn)備好上機(jī)的源程

5、序,并認(rèn)真去讀懂它。(注:下面介紹的不是“masm for windows集成實驗環(huán)境”軟件的使用方法,而是直接在dos狀態(tài)下,使用masm、link、debug三個文件的方法。首先應(yīng)將masm5文件夾安裝在c盤或d盤的根目錄下)三、用“記事本”編輯匯編的源程序1. 用“記事本”編輯好源文件lh, lh假設(shè)為李華同學(xué)的源程序文件名(下同),則文件名是lh.asm ,文件的擴(kuò)展名一定要用.asm。然后保存在c:masm5的文件夾中。2編輯源程序時,注意不要有空行、光標(biāo)也不要超過最后一行。四、masm.exe編譯程序的運(yùn)行 masm.exe編譯程序主要目的是生成擴(kuò)展名為.obj的目標(biāo)文件。在dos

6、狀態(tài)下,進(jìn)入masm5文件夾中,即屏幕顯示c:masm5。此時鍵入masm,回車后屏幕顯示:source filename.asm:鍵入.asm文件的文件名,如下:source filename.asm:lh (回車)object filenamelh.obj: (回車)source listing nul.lst:lh(回車)如果lh.asm文件正確,會生成目標(biāo)文件(lh.obj)與列表文件(lh.obj)。匯編的目的是要形成目標(biāo)文件,即機(jī)器代碼文件,也就是lh.obj文件。該文件不是文本文件,因此用編輯軟件是看不到的,看到的只是一些亂碼。列表文件(lh.obj)是非常重要的一個文件,它將一

7、條匯編語句指令與一條機(jī)器碼指令對應(yīng)起來,并且給出了這條指令偏移地址的首地址。它對程序的分析非常有用,而且有助于匯編語言的學(xué)習(xí)。五、 link.exe 連接程序的運(yùn)行l(wèi)ink.exe 連接程序的主要目的是生成擴(kuò)展名為.exe可執(zhí)行程序。在c:masm5子目錄下,鍵入link,回車后屏幕顯示:object modules.obj: 鍵入obj文件名,如下:object modules.obj:lh (回車)run file lh.exe: (回車)list file nul.map:lh (回車)擴(kuò)展名為.exe程序是在dos狀態(tài)下的可執(zhí)行程序。你只要鍵入lh.exe文件的文件名lh就可以運(yùn)行程序

8、。 擴(kuò)展名為.map的lh.map程序是映像文件。六、debug.exe 調(diào)試程序的運(yùn)行debug是調(diào)試程序,它是可以對exe可執(zhí)行程序進(jìn)行調(diào)試。在dos狀態(tài)下,鍵入:c:masm5debug lh.exe回車后屏幕顯示: - 上面的-是debug狀態(tài)下的提示符,表示目前系統(tǒng)在debug的控制之下。我們主要學(xué)習(xí)debug的q,r,u,g,d,e,f,t 命令。這些命令的使用方法是在-提示符后鍵入相應(yīng)命令的字母,如:-q回車后就立即返回dos狀態(tài)。上面各命令分別解釋如下:1 -q 表示退出debug狀態(tài)。2 -r 顯示cpu中除flag寄存器外的14個寄存器的內(nèi)容,對于flag寄存器只顯示它的o

9、f,df,if,sf,zf,af,pf,cf的狀態(tài)。它是用兩個字母來表示是0還是1的。表示的字母如下: 標(biāo)志位名ofdfifsfzfafpfcf為1對應(yīng)符 ov dn ei ngzr ac pe cy、為0對應(yīng)符 nv up di pl nz na po nc 如想查看某一寄存器的內(nèi)容,可在-r后鍵入寄存器名,如: -r ax ax 2b6f : 1200 上面第二行2b6f為ax中的內(nèi)容,第三行冒號后的1200為你鍵入的要修改的內(nèi)容。3. -u 它是反匯編調(diào)試命令。(選看)因為被調(diào)試的程序lh.exe是機(jī)器碼語言,必須翻譯成匯編語言程序人們才好讀懂。注意反匯編的范圍是在本段內(nèi)。該命令有下面三

10、種格式: -u -(它是將當(dāng)前cs:ip所指的地址開始的機(jī)器碼反匯編32個字節(jié)指令。) -u地址 -(地址是反匯編開始的地址,可以是偏移地址也可以是邏輯地址。如:-u 2a 002a是反匯編開始的偏移地址 -u 11d0:0100 11d0:0100是反匯編開始的邏輯地址 ) -u 地址1 地址2 -(從地址1反匯編到地址2,如: -u 10 5f 從當(dāng)前段的偏移地址0010反匯編到005f -u 01f5:10 5f 從01f5段的0010偏移地址開始反匯編到本段的005f為止4. -g 它是設(shè)置斷點(diǎn)及啟動程序運(yùn)行命令。它有三種格式: -g -(斷點(diǎn)是程序結(jié)束,它從當(dāng)前cs:ip所指地址開始

11、直到程序結(jié)束。) -g=地址 -(從指定的地址開始直到程序結(jié)束) -g=地址1 地址2 -(從指定的地址1開始運(yùn)行到地址2結(jié)束)5. -d 它是顯示內(nèi)存單元內(nèi)容命令。它有兩種格式: -d地址 -(顯示從當(dāng)前地址開始的內(nèi)存128個字節(jié)的內(nèi)容,如: -d ds:00 顯示從ds所表示的數(shù)據(jù)段段地址,偏移地址0000開始的128個字節(jié)的內(nèi)容) -d地址1 地址2 -(顯示從地址1開始到地址2所有單元的內(nèi)容,如: -d ds:00 ff 顯示從ds所表示的數(shù)據(jù)段段地址,偏移地址0000開始到偏移地址為00ff結(jié)束的所有單元的內(nèi)容)6. -e 一次修改一個內(nèi)存單元內(nèi)容命令。格式為: -e 地址 -(命令

12、輸入后顯示該地址所指示單元的內(nèi)容,此時可鍵入要修改的內(nèi)容。修改后可按回車鍵或空格鍵,按回車鍵為結(jié)束修改,按空格鍵可繼續(xù)修改下一單元的內(nèi)容)7. -f 將內(nèi)存中若干個連續(xù)單元賦與同一數(shù)值,也就是修改。常用該命令給內(nèi)存某一區(qū)域清零。如: -f ds:00 3f 00 -(將地址為ds:0000ds:003f的64個單元內(nèi)容設(shè)為00h,也就是對這64個單元清零)8. -t 執(zhí)行一條或多條指令的命令,也可稱為單步執(zhí)行命令。格式: -t -(命令后面沒有參數(shù),表示執(zhí)行當(dāng)前cs:ip為地址所指的一條指令) -t地址 -(執(zhí)行地址所指的一條指令) -t地址|n -(執(zhí)行以當(dāng)前地址開始的n條指令)七、masm

13、 for windows集成實驗環(huán)境masm for windows 集成實驗環(huán)境是針對匯編語言初學(xué)者的特點(diǎn)開發(fā)的一個簡單易用的匯編語言學(xué)習(xí)與實驗軟件,現(xiàn)在已全面支持最新操作系統(tǒng)vista,支持dos的16/32位匯編程序和windows下的32匯編程序,它具有錯誤信息自動定位、關(guān)鍵字實時幫助并且在幫助中動畫演示匯編指令的執(zhí)行過程、語法著色、無限次撤消與恢復(fù)、word式的查找、替換、定位、支持中文、長文件名等功能。(具體操作可參看此軟件的幫助文件)第二篇 匯編語言程序設(shè)計上機(jī)實驗實驗一:運(yùn)行一個簡單的匯編語言源程序 1實驗?zāi)康模?1)通過運(yùn)行一個簡單的匯編語言源程序,了解8086/8088匯編

14、語言源程序的邏輯結(jié)構(gòu)。 2)初步掌握匯編語言源程序上機(jī)匯編、調(diào)試、運(yùn)行的過程。 2實驗程序: 下面是一個16位二進(jìn)制加法的源程序:stack segment para stackstack dw 256 dup(?) ; 設(shè)置堆棧段 top label wordstack endsdata segment dta dw 2c3bh dtb dw 0a6dfh ; 設(shè)置數(shù)據(jù)段 dtc dw ?data endscoseg segmentassume cs:coseg,ss:stack,ds:data ;規(guī)定coseg是代碼段,stack堆棧段,data是start: mov ax,stack ;

15、數(shù)據(jù)段 mov ss,ax ;設(shè)置堆棧段的段地址 mov ax,top mov sp,ax ;設(shè)置堆棧指針 mov ax,data ; mov ds,ax ;設(shè)置數(shù)據(jù)段段地址 mov bx, dta mov cx, dtb ;16位二進(jìn)制加法 add bx, cx mov dtc, bx mov ah,4ch int 21h ;返回dos操作系統(tǒng)coseg ends end start 3目標(biāo)文件與列表文件 匯編后要生成目標(biāo)文件(.obj文件),列表文件(.lst文件)。最重要的是目標(biāo)文件,它是源程序的機(jī)器碼文件,它將通過link 文件的連接生成可以運(yùn)行的執(zhí)行文件,即.exe文件。匯編后生成的

16、列表文件(也就是.lst 文件)如下,列表文件是為程序的設(shè)計者進(jìn)行觀察、分析用的。1 microsoft (r) macro assembler version 5.00 2 0000stack segment para stackstack 3 0000 0100 dw 256 dup(?) 4 0200 top label word 5 0200stack ends 6 0000data segment 7 0000 2c3b dta dw 2c3bh 8 0002 a6df dtb dw 0a6dfh 9 0004 ? dtc dw ? 10 0006data ends 11 0000c

17、oseg segment assume cs:coseg,ss:stack,ds:data 12 0000 b8 - rstart: mov ax,stack 13 0003 8e d0 mov ss,ax 14 0005 36: a1 0200 r mov ax,top 15 0009 8b e0 mov sp,ax 16 000b b8 - r mov ax,data 17 000e 8e d8 mov ds,ax 18 0010 8b 1e 0000 r mov bx, dta 19 0014 8b 0e 0002 r mov cx, dtb 20 0018 03 d9 add bx,

18、cx 21 001a 89 1e 0004 r mov dtc, bx 22 001e b4 4c mov ah,4ch 23 0020 cd 21 int 21h 24 0022 coseg ends 25end start 在上面的列表文件中的第2224行是列表程序的核心部分,這一部分對應(yīng)著用戶源程序重要執(zhí)行的代碼段。我們觀察第20行:20 0018 03 d9 add bx, cx “0018(16進(jìn)制)”是“add bx, cx”這條指令在代碼段中的偏移地址,它的段地址要通過連接后生成的.exe文件在運(yùn)行時由操作系統(tǒng)來決定。“03d9”是這條指令的機(jī)器碼,“03”是操作碼,表示進(jìn)行加法

19、運(yùn)算?!癲9”是操作碼字節(jié),它表示源操作數(shù)是“cx寄存器”,目的操作數(shù)是“bx寄存器”。再觀察第12行:12 0000 b8 - rstart: mov ax,stack 偏移地址是“0000”,表示“mov ax,stack”是代碼段的第一條指令,“b8”是操作碼,表示要將堆棧段“stack”的段地址給“ax寄存器”?!? r”表示浮動的地址,因為堆棧段的段地址要通過連接運(yùn)行時由操作系統(tǒng)來決定。 4上機(jī)操作1). 編輯: 用“記事本”編輯好上例源文件存在c:目錄下. test1.asm2). 匯編: 在masm for windows集成實驗環(huán)境中打開test1.asm 文件, 然后在點(diǎn)擊運(yùn)

20、行項, 在其下拉菜單中點(diǎn)擊編譯成目標(biāo)文件(obj), 如果你輸入的文件完全正確,將在下面的欄中顯示:編譯源程序c: test1.asm編譯成功3). 連接: 在masm for windows集成實驗環(huán)境中點(diǎn)擊運(yùn)行項, 在其下拉菜單中點(diǎn)擊生成可執(zhí)行文件(exe), 如果你輸入的文件完全正確,將在下面的欄中顯示:編譯源程序c: test2.asm生成exe文件成功 4). 調(diào)式: 在masm for windows集成實驗環(huán)境中點(diǎn)擊運(yùn)行項, 在其下拉菜單中點(diǎn)擊debug調(diào)試, 在屏幕上出現(xiàn)如下信息: - (1) 用 u 命令觀察文件,注意文件的終止地址.(2) 用 t 命令觀察命令執(zhí)行情況,單步

21、執(zhí)行.(3) 用 g 命令運(yùn)行程序 : -g 00 終止地址(4) 用 d 命令觀察內(nèi)存的情況: -d ds:00 5)在 debug狀態(tài)下,用 e 命令改變兩個加數(shù)的大小,再運(yùn)行后, 用同樣方法觀察運(yùn)算結(jié)果。 5. 思考題: 如何編寫32位的加法(或減法)程序?實驗二:debug命令的使用1實驗?zāi)康模?debug的r,u,g,d,e,f,t,q命令的使用方法。 1) -r 顯示cpu中除flag寄存器外的14個寄存器的內(nèi)容, 如想查看某一寄存器的內(nèi)容,可在-r后鍵入寄存器名,如: -r ax ax 2b6f : 1200 上面第二行2b6f為ax中的內(nèi)容,第三行冒號后的1200為你鍵入的要修

22、改的內(nèi)容。2). -u 它是反匯編調(diào)試命令。 -u -(它是將當(dāng)前cs:ip所指的地址開始的機(jī)器碼反匯編32個字節(jié)指令。) -u 地址1 地址2 -(從地址1反匯編到地址2,如: -u 00 2f 從當(dāng)前段的偏移地址0000反匯編到002f 3). -g 它是設(shè)置斷點(diǎn)及啟動程序運(yùn)行命令。 4). -d 它是顯示內(nèi)存單元內(nèi)容命令。它有兩種格式: -d地址 -(顯示從地址開始的內(nèi)存128b的內(nèi)容,如: -d ds:00 顯示從ds段地址,偏移地址0000開始的128個字節(jié)的內(nèi)容) 5). -e 一次修改一個內(nèi)存單元內(nèi)容命令。格式為:-e 地址 6). -f 將內(nèi)存中若干個連續(xù)單元賦與同一數(shù)值,也就

23、是修改。常用該命令給內(nèi)存某一區(qū)域清零。如: -f ds:00 3f 00 -(將地址為ds:0000ds:003f的64個單元內(nèi)容設(shè)為00h)7). -t 稱為單步執(zhí)行命令。格式: -t -(命令后面沒有參數(shù),表示執(zhí)行當(dāng)前cs:ip為地址所指的一條指令) -t地址 -(執(zhí)行地址所指的一條指令) 8). q 表示退出debug狀態(tài)。 2實驗程序: 將自然增減的31個數(shù)據(jù)(00h-0fh-00h)寫入內(nèi)存, 內(nèi)存的首地址為20000h, 源程序如下:stack segment stack dw 64 dup(?) ;設(shè)置堆棧段 stack endscode segmentassume cs:cod

24、e, ss:stack main proc farstart: mov ax,2000h ;數(shù)據(jù)段段地址 mov ds,ax mov si,0 ;數(shù)據(jù)段偏移地址 mov cl,0fh ; xor ax,ax ; 0axa1: mov si, al inc al inc si ;遞增000fh dec cl jnz a1 ;cl=0, 結(jié)束循環(huán) mov cx, 10ha2: mov si, al inc si dec al ;遞減0f-00h loop a2 ;cx=0, 結(jié)束循環(huán) int 20h ;程序結(jié)束main endpcode ends end start上機(jī)操作:1). 編輯: 用“記

25、事本”編輯好源文件存在c:目錄下. test2.asm2). 匯編: 在masm for windows集成實驗環(huán)境中打開test2.asm 文件, 然后在點(diǎn)擊運(yùn)行項, 在其下拉菜單中點(diǎn)擊編譯成目標(biāo)文件(obj), 如果你輸入的文件完全正確,將在下面的欄中顯示:編譯源程序c: test2.asm編譯成功3). 連接: 在masm for windows集成實驗環(huán)境中點(diǎn)擊運(yùn)行項, 在其下拉菜單中點(diǎn)擊生成可執(zhí)行文件(exe), 如果你輸入的文件完全正確,將在下面的欄中顯示:編譯源程序c: test2.asm生成exe文件成功 4). 調(diào)式: 在masm for windows集成實驗環(huán)境中點(diǎn)擊運(yùn)行

26、項, 在其下拉菜單中點(diǎn)擊debug調(diào)試, 在屏幕上出現(xiàn)如下信息: - (1) 用 u 命令觀察文件,注意文件的終止地址.(2) 用 t 命令觀察命令執(zhí)行情況,單步執(zhí)行.(3) 用 g 命令運(yùn)行程序 : -g 00 1f(4) 用 d 命令觀察內(nèi)存的情況: -d ds:003. 思考題: 在實驗程序test2.asm基礎(chǔ)上,寫出將內(nèi)存單元(0000h000fh)的內(nèi)容送到(0030h003fh)的程序, 并存在c:目錄下. test21.asm。實驗報告中寫出匯編及連接通過的源程序, 寫出用debug觀察到內(nèi)存(0000h003fh)的內(nèi)容。實驗三:變量的屬性1. 實驗?zāi)康模?) 通過本實驗初步

27、了解匯編語言源程序的結(jié)構(gòu)。認(rèn)識和理解變量的五個屬性-seg,offset,type,length,size。主要是前面三個屬性。 2) 學(xué)會在debug下調(diào)試程序,了解變量在內(nèi)存中存放的情況。2. 上機(jī)程序:下面是列表程序(去掉了一些不重要的部分),下面列表程序的右邊部分是要從鍵盤輸入的源程序。 1 name property of vairiable 2 0000 stack segment para stackstack ;堆棧段的起始偽指令 3 0000 00c8 stapn db 256 dup(?) ;設(shè)置堆棧區(qū)的長度 top=length stapn ;使堆棧指針指向棧底 8 00

28、c8 stack ends ;堆棧段中止的偽指令 9 0000 data segment ;數(shù)據(jù)段的起始偽指令 10 0000 20 data1 db 20h ;本數(shù)據(jù)段有11個變量 11 0001 a204 ff00 data2 dw 0a204h,-100h 12 0005 fd 05 data3 db (-1*3),(15/3) 13 0007 45230100 data4 dd 12345h 14 000b 30 31 32 33 data5 db 0123 15 000f 4142 0043 0044 data6 dw ab,c,d 16 0015 ? data7 db ? 17 0

29、016 ? data8 dd ? 18 001a 000d data9 db 10 dup(?) 22 0027 0003 data10 db 2 dup(0ch,0dh,2 dup(00,0eeh) 31 0039 0002 data11 dw 2 dup(?) 35 003d data ends ;數(shù)據(jù)段中止的偽指令 36 0000 coseg segment ;碼段(程序段)開始偽指令 37 assume cs:coseg,ss:stack,ds:data,es:data 38 0000 b8 - r start: mov ax,stack ;將堆棧段的段地址給ss 39 0003 8e

30、 d0 mov ss,ax 40 0005 b8 00c8 mov ax,top ;將堆棧指針給sp 41 0008 8b e0 mov sp,ax 42 000a b8 - r mov ax,data ;將數(shù)據(jù)段的段地址給ds 43 000d 8e d8 mov ds,ax 44 000f 8e c0 mov es,ax ;將數(shù)據(jù)段的段地址給es 45 0011 bb - r mov bx,seg data4 ;將data4的段地址給bx 46 0014 89 1e 001a r mov word ptr data9,bx ;bx中的內(nèi)容給data9 47 0018 bb 0007 r mo

31、v bx,offset data4 ;data4的偏移地址給bx 48 001b 89 1e 001e r mov word ptr data9+2,bx ;bx中的內(nèi)容給data92 49 001f b2 04 mov dl,type data4 ;data4的類型給dl 50 0021 88 16 0022 r mov data9+4,dl ;dl中的內(nèi)容給data94 51 0025 b2 01 mov dl,length data4 ;data4的長度給dl 52 0027 88 16 0023 r mov data9+5,dl ;dl中的內(nèi)容給data95 53 002b b2 04

32、 mov dl,size data4 ;data4的尺寸給dl 54 002d 88 16 0024 r mov data9+6,dl ;dl中的內(nèi)容給data96 55 0031 b1 03 mov cl,length data10 ;data10的長度給cl 56 0033 88 0e 0025 r mov data9+7,cl ;cl中的內(nèi)容給data97 57 0037 b1 03 mov cl,size data10 ;data10的尺寸給cl 58 0039 88 0e 0026 r mov data9+8,cl ;cl中的內(nèi)容給data98 59 003d a1 0001 r m

33、ov ax,data2 ;變量data2的內(nèi)容給ax 60 0040 03 06 0003 r add ax,data2+2 ;(ax)變量data22給ax 61 0044 a3 0039 r mov data11,ax ;ax中的內(nèi)容給變量data11 62 0047 8b 16 0001 r mov dx,data2 ;變量data2的內(nèi)容給dx 63 004b 2b 16 0003 r sub dx,data2+2 ;(dx)變量data22給dx 64 004f 89 16 003b r mov data11+2,dx ;dx中的內(nèi)容給變量data112 65 0053 b4 4c

34、mov ah,04ch ;準(zhǔn)備返回dos 66 0055 cd 21 int 21h ;返回dos 67 0057 coseg ends ;碼段到此結(jié)束的偽指令 68 end start ;程序到此結(jié)束的偽指令3. 實驗成功后認(rèn)真填寫下表:變量名稱偏移地址內(nèi)容變量名稱偏移地址內(nèi)容變量名稱偏移地址內(nèi)容 注:實驗中,先將數(shù)據(jù)填入上表,然后再抄在實驗報告上。 4. 實驗課作業(yè) 作業(yè)題:x,y分別為32位二進(jìn)制數(shù):x= 43d8 b920h ;y= 2b4e f912h 編寫程序計算:z = x + y 作業(yè)指導(dǎo):堆棧段、數(shù)據(jù)段、結(jié)束部分的格式如下,只須編寫計算z=x+y的程序,填寫在其中:name

35、z=x+ystack segment para stackstack stapn db 200 dup(?) top=length stapnstack endsdata segment x dd 43d8b920h y dd 2b4ef912h z dd ?data endscoseg segment assume cs:coseg,ss:stack,ds:data,es:datastart: mov ax,stack mov ss,ax mov ax,top mov sp,ax mov ax,data mov ds,ax mov es,ax mov ah,04ch int 21hcoseg

36、 ends end start實驗四:dos功能的調(diào)用與延時程序1.關(guān)于dos的功能的調(diào)用要想與i/o設(shè)備進(jìn)行信息交換,就需要軟件中斷int調(diào)用dos功能或bios的功能。調(diào)用dos功能的指令是int 21h。dos的功能有好幾十種,各種功能均以號碼表示,放在ah寄存器中。例如: mov ah, 01h ; (ah)=1 時,為鍵盤輸入。執(zhí)行這兩句功能是等 int 21h ; 待并從標(biāo)準(zhǔn)鍵盤讀入一個字符,將其送到寄存器al中并在顯示器上輸出鍵入的字符。 mov ah, 09h ; 功能號(ah)09h 時,為輸出字符串。它將int 21h ; 緩沖區(qū)中一串以“”結(jié)尾的字符串送標(biāo)準(zhǔn)設(shè)備輸出。在調(diào)

37、用前必須將緩沖區(qū)首地址送ds:dx 中。 mov ah, 02h ; 功能號為(ah)02h 時,為字符輸出。它將dl int 21h 中的字符送到標(biāo)準(zhǔn)的輸出設(shè)備上輸出。 mov ah, 4ch ; (ah)4ch時,調(diào)用dos功能時,將返回dos狀態(tài),int 21h 即返回dos提示符 c: 。 2. 實驗程序:下面的程序的功能是在屏幕上依次循環(huán)顯示出1,2,3,4, 9,0,1。注意在程序中多次調(diào)用dos功能。5256句是雙重循環(huán),用以延時,使字符在屏幕逐個顯示。4244句是將數(shù)字加1,并變?yōu)榉蛛x的bcd碼。47句是將分離的bcd碼轉(zhuǎn)化為ascii碼,以便顯示。 1 name output

38、_character_0_9 2 0000stack segment para stackstack 3 0000 0100 dw 256 dup(?) 7 0200 top label word 8 0200stack ends 9 0000data segment 10 0000 string db do you want output cariacter 0 9?(y/n)16 0028 db 0dh,0ah,$ ; 0dh回車控制符。 17 002bdata ends ; 0ah換行控制符。 18 0000coseg segment 19 assume cs:coseg,ss:stac

39、k,ds:data 20 0000 b8 - rstart: mov ax,stack ;將堆棧段的段地址給ss 21 0003 8e d0 mov ss,ax 22 0005 36: a1 0200 r mov ax,top ;將堆棧指針給sp 23 0009 8b e0 mov sp,ax 24 000b b8 - r mov ax,data ;將數(shù)據(jù)段的段地址給ds 25 000e 8e d8 mov ds,ax 26 0010 8d 16 0000 r lea dx,string ;取字符串string偏移地址的首地址給dx27 0014 b4 09 mov ah,09h ;調(diào)用dos

40、功能顯示字符串 28 0016 cd 21 int 21h ;string 29 0018 b4 01 mov ah,01h ;等待從鍵盤輸入一個字符 30 001a cd 21 int 21h 31 001c 3c 59 cmp al,y ;字符是否是y或y,“是”就運(yùn)行程序,否則就結(jié)束程序。 32 001e 74 04 je nex 33 0020 3c 79 cmp al,y 34 0022 75 2a jne done 35 0024 b3 00nex: mov bl,0 ;將bl放入堆棧保護(hù)起來 36 0026 53 push bx 37 0027 b2 20goon: mov dl,20h ;準(zhǔn)備顯示一個空格 38 0029 b4 02 mov ah,2 39 002b cd 21 int 21h 40 002d 5b pop bx ;從堆棧中取出bl 41 002e 8a c3 mov al,bl 42 0030 fe c0 inc al ;實質(zhì)上是將bl的內(nèi)容加1 43 0032 27 daa ;進(jìn)行十進(jìn)制調(diào)整 44 0033 24 0f and al,0fh ;取al中的低四位給bl 45 0035 8a d8 mov bl,al 46 0037 53

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論