匯編語言程序設計實驗篇(emu8086)_第1頁
匯編語言程序設計實驗篇(emu8086)_第2頁
匯編語言程序設計實驗篇(emu8086)_第3頁
匯編語言程序設計實驗篇(emu8086)_第4頁
匯編語言程序設計實驗篇(emu8086)_第5頁
已閱讀5頁,還剩35頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、1 .匯編語言程序設計實驗篇1.1. 匯編系統(tǒng)軟件簡介Emu8086-Microprocessor Emulator是集源代碼編輯器、匯編 /反匯編工具以及 debug的模擬器。它能模擬一臺"虛擬”的電腦運行程序,擁有獨立的硬件",避免訪問真實硬件。該軟件兼容Intel的下一代處理器,包括 Pentiumll、Pentium4。利用該軟件提供的調(diào)試工 具,能夠單步跟蹤程序,觀察程序執(zhí)行過程中寄存器、標志位、堆棧和內(nèi)存單元的內(nèi)容。1.1.1 創(chuàng)建程序1. COM TEMPLATE 程序本章與指令相關(guān)的實驗都是用COM TEMPLATE類型的程序完成的。打開 emu8086 ,

2、在"welcome”對話框中,單擊!按鈕,創(chuàng)建文件。welcome.emu8086mi crofjTQicessQr emu 1 a tor wi th integrated assembller" I4 I-IID餐0Hmeivcode evtimplm quidtutor recent filesfiis piroducl is registered Iq Team SNDwww.em4JlliUbiuCom在"choose code template”對話框中, 選擇 "COM template-simple and tiny executable

3、 file format, pure machine code.” 后,單擊 口' 按鈕。在如所示的編輯界面中,在“;add your code here”部分輸入相應的指令,第一條指令默 認的偏移地址為100h。輸入全部指令后,單擊按鈕,保存相應的程序段。2. EXE TEMPLATE 程序本章與DOS功能調(diào)用和匯編源程序相關(guān)的實驗都是用EXE TEMPLATE程序完成的。歡迎下載21:口=叫 按鈕,創(chuàng)建文件。打開emu8086,在“welcome”對話框中,單擊在"choose code template”對話框中, 選擇 "EXE template-advan

4、ced executable file.header:relocation, checksum.”后,單擊按鈕。在如圖所示的編輯界面中, 已經(jīng)可以給出了源程序的框架,包含數(shù)據(jù)段、堆棧段和代碼段的定義以及必要的功能調(diào)用等,在" add your data here"和";add your code here”部分可 以分別輸入相應的變量定義和指令。輸入全部指令后,單擊 按鈕,保存相應的程序。1.1.2執(zhí)行程序在編輯界面中,如圖所示,單擊 emubte按鈕,自動完成源程序的編譯和鏈接。在“emulator”對話框中(),左邊部分列出了寄存器的當前值,右邊部分是已經(jīng)輸入

5、的程序段,中間部分是右邊每條指令的物理地址和對應的機器代碼,中間的文本框中列出了當前指»I""I令白CS和IP。單擊 家按鈕,可以單步執(zhí)行一條指令;單擊 " 按鈕,可0 1以一次執(zhí)行完所有程序;單擊團口期 按鈕,可以重新回到第一條指令的位置處;單擊I 德 ISad 按鈕,可以重新加載另一個程序。emulator: debug view eiflernal virtual devic« virtual drive help0reloadstep Ibicksingle stepnegiaeisH L AX 00 00 ex |oo |oo ex

6、f5a-oF DK叵-廊-csIPs$BPSI0)DS0700 0100 0700 FFFE OCOQ 0000 WO 0700 070007000100071030710407105 07106 071070710007109 0710A 0710B 0710C0710D 0710E 0710F7010-CBF08D38106C9AB8F3B8E9E0030308503163309941 112 -1gBra3453962700654?BI ?07000100*49 中step delay ms: 0VV:VTPPPPPPPP OOSOEOOOOOOOO MMDMRNNNNNNNNAX, 0

7、03FFH BX, AX 06000HP BX畫也UK修改“emulator”對話框中文本框的內(nèi)容,也可以觀察其它段的內(nèi)容,在圖所示界面中,DS=0700H,若要察看該數(shù)據(jù)段中偏移地址為6000H位置處的內(nèi)存單元內(nèi)容,可以在文本框中輸入0700:6000,顯示結(jié)果如圖所示,中間部分依次列出從該地址開始的所有字節(jié)的內(nèi)容。Loaddreload<lstep backIk single steprunII»iiliilstep delay ms; 00700 6000D70a:010Efile e 磯h debug viewextemal virtyl devices vurtual

8、 dnve helpemulator: 砰FF00oa00 loo|03 |FFF 107。IP010Ess0700SPFFFEBPOOCO510000DIOOODDS0元。ES07003000:3001:D002:)003;D005 3006 )0073008300A:D00B:D00C:300D:300E:300F:F300000000000000F000000000000000Nl Nl Nl Nl Nl Nl Nl niH Nl Nl Nl Nl Nl NlOOOOSOVVVV:vLLXX08h BL 003FFK AXC06000HUXjcraenppppppp . ooooooo

9、. MNNNNMM .stAnk在“emulator”對話框的底部,單擊一對;按鈕,可以觀察棧的內(nèi)容;單擊鈕,可以觀察標志寄存器中標志位的內(nèi)容。0700:10700:10700:10700:0700:10700:10700:10700:0700:0700:0700:10700:10700:0700:1FF8FF6FF4FE6 FE4 FE2 FE0 匚n匚0000T00000000000000000000000000000000000000000000000000000000flags |CF 6 二ZF阻 8F組 of F3PF瓦3AF fl 3IFDF在"emulator”對話框

10、中,選擇"view"菜單中的"memory”菜單項,也可以觀察內(nèi)存的情況。在"Random Access Memory”對話框中,可以修改文本框中的值可以確定所要觀 察的地址,該值由段基地址:段內(nèi)偏移地址構(gòu)成,如圖所示,當前要觀察的內(nèi)存地址為(6000:0010)。在顯示結(jié)果中,左邊是邏輯地址,中間是從該地址的開始連續(xù)16個字節(jié)的內(nèi)容,右邊是每個字節(jié)對應的字符。 在該對話框中,也可以直接修改存儲器單元的值,如圖所示,從60010H開始的連續(xù)4個字節(jié)的內(nèi)容已經(jīng)被修改為 12H, 34H, 56H和78H。1.2 基礎(chǔ)實驗1.2.1 數(shù)據(jù)傳送指令1 .實驗目

11、的1)熟悉8086指令系統(tǒng)的數(shù)據(jù)傳送指令及8086的尋址方式。2)利用emu8086調(diào)試工具調(diào)試匯編程序。2 .實驗設備微型計算機、emu80863 .實驗原理通用數(shù)據(jù)傳送指令包括:1)通用數(shù)據(jù)傳送指令,如 MOV,PUSH,POP,XCHG,CBW,C皿 目標地址傳送指令,如 LDS,LES; 3)標志傳送指令,如 LAHF,SAHF,PUSHF,POPF4)輸入輸 出指令,如IN,OUT,LEA尋址方式包括:1)立即尋址;2)直接尋址;3)寄存器尋址;4)寄存器間接尋值;5)寄存器相對尋址;6)基址-變址尋址;7)基址一變址一相對尋址; 8)隱含尋址4 .實驗內(nèi)容(1)創(chuàng)建 COM TEM

12、PLATE程序,輸入以下程序段,觀察程序的執(zhí)行情況,程序段如下:MOV BL , 08H;BX=?MOV CL, BL;CL=?MOV AX , 03FFH;AX=?MOV BX , AX;BX=?MOV DS:6000H , BX;DS:6000H=?(提示:在emulator對話框中間的文本框中輸入段基地址:段內(nèi)偏移地址,可以觀察其它邏輯段相應存儲單元的內(nèi)容)(2)創(chuàng)建COM TEMPLATE程序,用以下程序段將一組數(shù)據(jù)壓入PUSH堆棧區(qū),然后通過三種不同方式出棧。觀察棧的變化情況( 提示:在emulator對話框中,單擊 如“按鈕可1-1中。程序段如下:以察看棧中內(nèi)容)以及出棧后數(shù)據(jù)的變

13、化情況,并把結(jié)果填入表MOV AX , 0102HMOV BX , 0304HMOV CX , 0506HMOV DX , 0708H PUSH AXPUSH BXPUSH CXPUSH DX第一種出棧方式的指令序列:POP DXPOP CXPOP BXPOP AX第二種出棧方式的指令序列(注:替換掉第一種出棧方式的指令序列)POP AXPOP BXPOP CXPOP DX第三種出棧方式的指令序列(注:替換掉第二種出棧方式的指令序列)POP CXPOP DXPOP AXPOP BX表1-1數(shù)據(jù)傳送實驗結(jié)果表格寄存器的值第一種出棧方式第二種出棧方式第三種出棧方式(AX)=(BX)=(CX)=(D

14、X)=(3)創(chuàng)建COM TEMPLATE程序,分別輸入下列指令,按要求設置各寄存器及內(nèi)存單元的 值(提示:在"emulator”對話框中,可以直接修改寄存器的值;選擇"view"菜單中的"memory”菜單項可以設置內(nèi)存單元的值),其中BX = 0010H, SI = 0001H, 60010H = 12H, 60011H= 34H, 60012H =56H, 60013H =78H, 60120H =0ABH , 60121H =0CDH , 60122H = 0EFH,觀察指令執(zhí)行后 AX中的內(nèi)容。1) MOV AX , 1200H2) MOV AX

15、 , BX3) MOV AX , 0120H4) MOV AX , BX5) MOV AX , 0110HBX6) MOV AX , BXSI7) MOV AX , 0110HBXSI(4)創(chuàng)建COM TEMPLATE程序,試分別用 8086的直接尋址、寄存器間接尋址、變址尋址、寄存器相對尋址傳送指令編寫程序段,將 DS: 6000H字節(jié)存儲單元中的內(nèi)容傳送到 DS: 6020H單元中。(5)設 AX=1111H , BX=2222H , DS: 6010H=3333H。試編寫 COM TEMPLATE 程序,將 AX的內(nèi)容與BX的內(nèi)容交換,然后再將 BX的內(nèi)容與DS: 6010H單元的內(nèi)容進

16、行交換。(6)若DS:6000H=0EEFFH , ES:7000H=0CCDDH ,請編寫 COM TEMPLATE 程序,將 兩個存儲單元的內(nèi)容交換。5 .實驗習題指出下列指令的錯誤并加以改正,并在emu8086中驗證。1) MOV BX , SI2) MOV AH , BX3) MOV AX , SIDI4) MOV BYTE PTRBX , 2000H5) MOV CS, AX6) MOV DS, 2000H6 .實驗報告要求1)整理源程序段和運行結(jié)果。2)給出幾種在emu8086中察看內(nèi)存單元的方法。1.2.2算術(shù)邏輯運算指令1 .實驗目的1)熟悉算術(shù)邏輯運算指令的功能。2 ) 了解

17、標志寄存器中各標志位的意義以及指令執(zhí)行對它的影響。2 .實驗設備微型計算機、emu80863 .實驗原理算術(shù)運算指令包括:1 )加法指令,如ADD,ADC,INC ; 2 )減法指令,如SUB,SBB,DEC,NEG ,CMP ; 3)乘法指令,如 MUL,IMUL ; 4)除法指令,如 DIV,IDIV 。邏輯運算指令包括:AND,OR,NOT,XOR,TEST4 .實驗內(nèi)容(1)創(chuàng)建COM TEMPLATE程序,輸入以下程序段,單步執(zhí)行并記錄標志位的變化情況(提示:在emulator對話框中,單擊按鈕察看標志寄存器的值)。程序段及結(jié)果表格如 表 1-2。表1-2算術(shù)邏輯運算實驗結(jié)果表格&q

18、uot;j-_標志位程序J'CFZFSFOFPFAF程序段1000000MOV AX, 1018HMOV SI, 230AHADD AX, SIADD AL, 30HMOV BX, 3FFHADD AX , BXMOV 20H, 1000HADD 20H, AXPUSH AXPOP BX程序段2000000MOV AX, 0A0AHADD AX, 0FFFFHMOV CX, 0FF00HADC AX, CXSUB AX, AXINC AXOR CX, 0FFHAND CX, 0F0FHMOV 10H, CX程序段3000000MOV BL, 25HMOV BYTE PTR10H, 4M

19、OV AL, 10HMUL BL程序段4000000MOV WORD PTR10H,80HMOV BL, 4MOV AX, 10HDIV BL(2)用BX作為地址指針,從BX所指的內(nèi)存單元0010H開始連續(xù)存入三個無符號數(shù) (10H、04H、30H),計算內(nèi)存單元中這三個數(shù)的和,并將和放在0013H單元中,再求出這三個數(shù)的乘積,并將乘積存入 0014單元中,寫出完成此功能的COM TEMPLATE程序。(3)創(chuàng)建COM TEMPLATE程序,寫出完成下述功能的程序段,并指出程序運行后AX = ?1)將15H傳送到AL ;2)再將AL的內(nèi)容乘以2;3)將15H傳送到BL ;4)把AL的內(nèi)容乘以B

20、L的內(nèi)容。(4)創(chuàng)建以下兩個程序段的COM TEMPLATE程序并上機驗證。1)給數(shù)據(jù)段中從偏移地址1000H開始的12個字存儲單元的內(nèi)容賦值,請將第4條比較指令填寫完整(劃線處)。MOV SI, 1000HNEXT: MOV WORD PTRSI, 1ADD SI , 2CMP SI , JNE NEXT2)假定要按高地址到低地址的順序進行清除操作(高地址從 1016H開始),則上述程序段 應如何修改?5 .實驗習題簡要說明ADD SUB AND OR旨令對標志位的影響。6 .報告要求1)整理源程序段和運行結(jié)果,回答實驗中的問題。1.2.3移位指令1.實驗目的1)熟悉移位指令的功能。2) 了

21、解標志寄存器中各標志位的意義以及指令執(zhí)行對它的影響。2 .實驗設備微型計算機、emu80863 .實驗原理移位指令包括:1)非循環(huán)移位指令,如 SAL,SAR,SHL,SHR ; 2)循環(huán)移位指令,如 ROL,ROR,RCL,RCR4 .實驗內(nèi)容(1)創(chuàng)建COM TEMPLATE程序,輸入以下程序段,單步執(zhí)行并記錄標志位的變化情況(提示:在emulator對話框中,單擊 砧中 按鈕可以察看標志寄存器的值)。程序段及結(jié)果表 格如表1-3。表1-3移位實驗結(jié)果表格1標志位程序CFZFSFOFPFAF程序段000000MOV AX, 0DEC AXADD AX, 3FFFHADD AX, AXNOT

22、 AXSUB AX, 3OR AX, 0FBFDHAND AX, 0AFCFHSHL AX , 1RCL AX , 1(2)寫出完成下述功能的 COM TEMPLATE程序并上機驗證,程序運行后的商=?1)傳送數(shù)據(jù) 2058H至iJDS: 1000H單元中,數(shù)據(jù) 12H到DS: 1002H單元中;2)把DS: 1000H單元中的數(shù)據(jù)傳送到 AX寄存器;3)把AX寄存器的內(nèi)容算術(shù)右移二位;4)再把AX寄存器的內(nèi)容除以 DS:1002H字節(jié)單元中的數(shù);5)最后把商存入字節(jié)單元 DS:1 003H中。(3)創(chuàng)建COM TEMPLATE程序,輸入以下程序段,單步執(zhí)行并記錄每一條指令對內(nèi)存單 元的影響結(jié)

23、果(提示:在"emulator”對話框中,選擇"view"菜單中的"memory”菜單項 可以察看內(nèi)存單元的值),分析結(jié)果并說明該程序段的功能是什么。程序段及結(jié)果表格如表 1-4。表1-4移位實驗結(jié)果表格 2程序段字單元1A00H=字單元1A02H=MOV 1A00H, 0AA55HMOV 1A02H, 2AD5HSHL WORD PTR1A02H,1CMP 1A00H, 8000HCMCRCL WORD PTR1A02H,1RCL WORD PTR1A00H,15 .實驗習題簡要說明一般移位指令與循環(huán)移位指令之間的主要區(qū)別。6 .實驗報告要求整理源程序

24、段和運行結(jié)果,回答實驗中的問題。1 .2.4串操作指令2 .實驗目的1)熟悉串操作指令的功能。3 ) 了解串操作指令的使用方法。4 .實驗設備微型計算機、emu80865 .實驗原理串操作指令包括:1)串傳送指令 MOVS; 2)串比較指令CMPS; 3)串掃描指令SCAS;4)串裝入指令 LODS; 5)串存儲指令 STOS。6 .實驗內(nèi)容(1)創(chuàng)建COM TEMPLATE程序,輸入以下程序段,單步執(zhí)行并根據(jù)結(jié)果回答后面的問題。CLDMOV DI , 1000HMOV AX , 55AAHMOV CX , 10HREP STOSW上述程序段執(zhí)行后:1)從ES:1000H開始的16個字單元的內(nèi)

25、容是什么?( 提示:在"emulator”對話框中,選 擇"view"菜單中的"memory”菜單項可以察看內(nèi)存單元的值)2) DI= ? CX= ?解釋其原因。(2)在上題的基礎(chǔ)上,再輸入以下程序段并執(zhí)行,回答后面的問題。MOV SI, 1000HMOV DI , 2000HMOV CX , 20HREP MOVSB程序段執(zhí)行后:1)從ES:2000H開始的16個字單元的內(nèi)容是什么?2) SI= ? DI= ? CX= ? 并分析之。(3)在以上兩題的基礎(chǔ)上,再分別輸入以下三個程序段并運行之。程序段1 :MOVSI, 1000HMOVDI , 2000

26、HMOVCX , 10HREPZCMPSW程序段1執(zhí)行后:1)ZF=?根據(jù)ZF的狀態(tài),兩個串是否比較完了?(提示:在emulator對話框中,單擊”郵按鈕可以察看標志寄存器的內(nèi)容)2) SI= ? DI= ? CX= ? 并分析之。程序段2:MOV 2008H , 4455HMOV SI, 1000HMOV DI , 2000H MOV CX, 10H REPZ CMPSW 程序段2執(zhí)行后:1) ZF=?根據(jù)ZF的狀態(tài),兩個串是否比較完了?2) SI= ? DI= ? CX= ? 并分析之。程序段3:MOV AX , 4455HMOV DI , 2000H MOV CX , 10H REPNZ

27、 SCASW 程序段3執(zhí)行后:1) ZF=?根據(jù)ZF的狀態(tài),在串中是否找到了數(shù)據(jù)4455H ?2) SI= ? DI= ? CX= ? 并分析之。(4)從DS:6000H開始存放有一個字符串"This is a string ",把這個字符串從后往前傳送 到DS:6100H開始的內(nèi)存區(qū)域中(即傳送結(jié)束后,從DS:6100H開始的內(nèi)存單元的內(nèi)容為"gnirts a si sihT"),試編寫 COM TEMPLATE序并上機驗證。(提示:可以在數(shù)據(jù)區(qū)中直接輸入字符串)5 .實驗習題1)簡要說明執(zhí)行串操作指令之前應初始化哪些寄存器和標志位。2)總結(jié)串操作指令

28、的用途及使用方法。6 .實驗報告要求整理源程序段和運行結(jié)果,對結(jié)果進行分析。1 .2.5 DOS功能調(diào)用2 .實驗目的1)掌握簡單的DOS系統(tǒng)功能調(diào)用。3 .實驗設備微型計算機、emu80864 .實驗原理本節(jié)要用到的DOS功能命令包括: 從鍵盤輸入單個字符的語句如下:MOV AH , 1INT 21H以上兩條指令執(zhí)行后,(AL)=從鍵盤輸入的字符在屏幕上顯示單個字符的語句如下:MOV DL , 要顯示白字符MOV AH , 2INT 21H注意:源程序中所有語法符號都必須是半角符號,而且不允許漢字字符。在屏幕上顯示字符串的語句如下:LEA DX,字符串變量名,字符串必須以字符$'作為

29、結(jié)束MOV AH , 9INT 21H從鍵盤上輸入字符串的語句如下:LEA DX ,鍵盤緩沖區(qū)名MOV AH , 0AHINT 21H5 .實驗內(nèi)容(1)字符的輸入和輸出例如輸入從鍵盤讀入一個小寫字母,輸出字母表中倒數(shù)與該字母序號相同的那個字母。首字母a,則輸出最后一個字母 z,輸入第4個字母d則輸出倒數(shù)第4個字母wo 程序流程圖如圖1-1所示。圖1-1字符輸入輸出的程序流程圖程序框架如下:data segmentpkey db "press any key.$”endsstack segmentdw 128 dup(0)endscode segmentstart:;set segm

30、ent registers:mov ax, datamov ds, axmov es, ax從鍵盤輸入一個字符的指令序列根據(jù)流程圖中轉(zhuǎn)換算法編制的指令序列用于顯示結(jié)果的指令序列l(wèi)ea dx, pkeymov ah, 9int 21h; output string at ds:dx;wait for any key.mov ah, 1int 21hmov ax, 4c00h ; exit to operating 21hendsend start ; set entry point and stop the assembler.sub指令),觀察執(zhí)行編寫EXETEMPLAT

31、程序(提示:計算z' -al+ ' a'時,需要 結(jié)果。(2)字符串的輸入和輸出KBUF要顯示的字符STR變量中的內(nèi)容。從鍵盤輸入一個字符串(以下說明中,假定鍵盤緩沖區(qū)的名字為 串變量名為STR,將輸入的字符串傳送給STR變量,在屏幕上顯示程序流程圖如圖1-2所示。圖1-2字符串輸入輸出的程序流程圖程序框架如下:data segmentKBUF db 20, 0, 20 dup(20h)STR db 20 dup(20h),' $'pkey db "press any key.$”endsstack segmentdw 128 dup(0)en

32、dscode segmentstart:;set segment registers:mov ax, datamov ds, axmov es, ax從鍵盤輸入字符串的指令序列將KBUF傳送到STR的指令序列顯示STR內(nèi)容的指令序列l(wèi)ea dx, pkeymov ah, 9hint 21h; output string at ds:dx;wait for any key.mov ah, 1int 21hmov ax, 4c00h ; exit to operating 21hendsend start ; set entry point and stop the asse

33、mbler.編寫EXE TEMPLAT瞳序(提示:CX的初始值不為0),觀察執(zhí)行結(jié)果。6 .實驗習題1)對實驗內(nèi)容 1,在程序中增加顯示提示字符串 "Please input a lowercase letter"和"The inverse lette門s:",修改程序并上機驗證。2)對實驗內(nèi)容 2,在程序中增加顯示提示字符串"Please input a string"和"The string you inputis:",修改程序并上機驗證。7 .實驗報告要求1)整理源程序段和運行結(jié)果。2)說明DOS系統(tǒng)功能調(diào)用

34、的10號功能對鍵盤緩沖區(qū)格式上有何要求。3) DOS系統(tǒng)功能調(diào)用中的1、2、9、10號功能的輸入輸出參數(shù)有哪些?分別放在什么寄存 器中?4)總結(jié)匯編語言程序中如何實現(xiàn)字符和字符串的輸入輸出。1.2.6順序程序1.實驗目的1 ) 了解8086匯編程序的基本結(jié)構(gòu); 2)掌握順序程序的基本設計方法。2 .實驗設備微型計算機、emu80863 .實驗原理順序程序是控制流僅有一個走向的程序,它主要用于解決一些無需進行判斷分支,也無需循環(huán)執(zhí)行的簡單問題。本節(jié)的實驗內(nèi)容與乘法和除法運算有關(guān)。無符號數(shù)乘法運算使用MULF旨令,有符號數(shù)乘法運算使用IMUL指令。乘法運算屬于隱含操作數(shù)的運算,因此在使用乘法指令前

35、,需要先 將乘數(shù)放入AL ( 8位乘法)或AX (16位乘法)中。乘法指令執(zhí)行后,乘積在 AX (8位乘法) 或DX:AX (16位乘法)中。無符號數(shù)除法運算使用DIV指令,有符號數(shù)除法運算使用IDIV指令。除法運算屬于隱含操作數(shù)的運算,因此在使用除法指令前,需要先將被除數(shù)放入AX(8位除法)或DX:AX (16位除法)中。當除數(shù)為 8位時,被除數(shù)應為16位;除數(shù)為16位 時,被除數(shù)應為32位。對無符號數(shù)除法,當被除數(shù)字長不夠時,高位部分可直接補0;而對有符號數(shù)除法,當被除數(shù)字長不夠時,必須使用符號擴展指令進行擴展。除法運算執(zhí)行后,結(jié)果在AX (8位除法)或DX:AX (16位除法),其中AL

36、 ( 8位除法)或AX (16位除法)中是 商,AH (8位除法)或DX (16位除法)中是余數(shù)。4 .實驗內(nèi)容W=04H ,在NUM變量中定義了 5個符號數(shù)(字節(jié)類型),分別是U= 09H, V=16H ,X=17H , Y=05H ,計算(U+V -W*X ) /Y,將結(jié)果顯示在屏幕上。程序流程圖如圖1-3。圖1-3順序程序的程序流程圖程序框架如下:data segmentNUM db 09,16h,04h,17h,05h ; 定義 U, V, W X, Ypkey db "press any key.$”endscode segmentstart:;set segment re

37、gisters:mov ax, datamov ds, axmov es, axlea si,NUM;計算W*X結(jié)果彳存到al中mov bl, al;計算U+V結(jié)果彳存到al中;計算U+V-W*X結(jié)果彳存到al中cwb;計算(U+V-W*及Nmov bl,al;顯示結(jié)果的高4位;顯示結(jié)果的低4位lea dx, pkeymov ah, 9int 21h; output string at ds:dx;wait for any key.mov ah, 1int 21hmov ax, 4c00h ; exit to operating 21hendsend start ; se

38、t entry point and stop the assembler.編寫EXE TEMPLATE程序,觀察執(zhí)行結(jié)果。5 .實驗習題將數(shù)據(jù)改為 U=0ABH , V=0EFH , W=12H , X=10H , Y=05H ,上機驗證結(jié)果是否正確?問 題出在何處,應如何解決?6 .實驗報告要求1)寫出完整的程序。2)使用不同數(shù)據(jù)測試程序并解釋運行結(jié)果。1.2.7分支程序1.實驗目的1 ) 了解8086匯編程序的基本結(jié)構(gòu);2)掌握分支程序的基本設計方法。2 .實驗設備微型計算機、emu80863 .實驗原理分支程序是根據(jù)不同條件執(zhí)行不同處理過程的程序。分支程序的結(jié)構(gòu)有兩種:一種是二路分支,一

39、種是多路分支。它們的共同特點是在滿足某一條件時,將執(zhí)行多個分支中的某一分支。本節(jié)的實驗內(nèi)容與數(shù)值和 ASCII碼間的轉(zhuǎn)換有關(guān),由于字符0''9'的ASCII碼是 30H39H,因此將數(shù)值09轉(zhuǎn)換成又應的 ASCII碼時,需要在其基礎(chǔ)上加 30H;由于字符 AF'的ASCII碼是41H46H,因此將數(shù)值 AF轉(zhuǎn)換成應的 ASCII碼時,需要在其 基礎(chǔ)上加37H。另外,二進制數(shù)與十六進制數(shù)之間的關(guān)系是:每4位二進制數(shù)等于1位十六進制數(shù)。在屏幕上顯示單個字符的語句如下:MOV DL,覆顯示白字符>MOV AH,2INT 21H4 .實驗內(nèi)容從鍵盤輸入一個十進制正

40、整數(shù)N (10>NI> 99),將其轉(zhuǎn)換成十六進制數(shù),轉(zhuǎn)換的結(jié)果顯示在屏幕上。提示:鍵盤輸入的內(nèi)容都是 ASCII碼形式。程序流程圖如圖 1-4。歡迎下載22歡迎下載35圖1-4程序流程圖程序框架如下:data segmentSTR db 3,0,3 dup(0)MES db 'Input a decimal number(1099):$MES1 db 0ah,0dh, ' Show decimal number as hex:$'pkey db "press any key.$”endscode segmentstart:;set segment

41、 registers:mov ax, datamov ds, axmov es, ax;顯示字符串 Input a decimal number (1099):;從鍵盤輸入一個兩位的十進制數(shù);將表示十位數(shù)的字符轉(zhuǎn)換成數(shù)值,保存到ah中;將表示個位數(shù)的字符轉(zhuǎn)換成數(shù)值,保存到al中mov bl, alal中;將ah和al表示的兩位十進制數(shù)轉(zhuǎn)換成十六進制數(shù),保存到mov bl, al;顯示字符串 Show decimal number as hex :;顯示結(jié)果的高4位;顯示結(jié)果的低4位lea dx, pkeymov ah, 9int 21h; output string at ds:dx;wait

42、 for any key.mov ah, 1int 21hmov ax, 4c00h ; exit to operating 21hendsend start ; set entry point and stop the assembler.編寫EXE TEMPLAT瞳序,觀察執(zhí)行結(jié)果。5 .實驗習題1)如果輸入的數(shù)在 099范圍內(nèi),如何修改程序才能使結(jié)果正確。2)如果可以輸入負整數(shù),如何修改程序才能使結(jié)果正確。6.實驗報告要求1)寫出完整的程序。2)使用不同數(shù)據(jù)測試程序并解釋運行結(jié)果。1.2.8循環(huán)程序1.實驗目的1 ) 了解8086匯編程序的基本結(jié)構(gòu)2)掌握循環(huán)程序的

43、基本設計方法。2 .實驗設備微型計算機、emu80863 .實驗原理循環(huán)程序是把一個程序段重復執(zhí)行多次的程序結(jié)構(gòu)。循環(huán)程序包括三個部分:初始化部分、循環(huán)體、循環(huán)控制部分。初始化部分用于對循環(huán)程序的參數(shù)(循環(huán)次數(shù)、控制條件、指 針等)設置初值。循環(huán)體是要被重復執(zhí)行的程序段。循環(huán)控制部分用于決定是否退出循環(huán)。循環(huán)控制指令可以是轉(zhuǎn)移指令或LOOP旨令。當已知循環(huán)次數(shù)或控制條件為ZF時,用LOOP指令控制循環(huán)是最簡單的方法。本節(jié)實驗顯示的圖形可以分為上下兩部分。對于上半部分圖形,需要設置兩層循環(huán),其中外循環(huán)控制顯示幾行(初始為9,每次減1,減到0時結(jié)束);內(nèi)循環(huán)控制當前行顯示幾個 *'(初值為

44、1,每次加1)。對于下半部分圖形,也需要設置兩層循環(huán),其中外循環(huán)控制顯 示幾行(初始為9,每次減1,減到。時結(jié)束);內(nèi)循環(huán)控制當前行顯示幾個空格(初值為8,每次減1)和幾個*'(初值為1,每次加1)。在屏幕上顯示單個字符的語句如下:MOV DL,覆顯示白字符MOV AH,2INT 21H4 .實驗內(nèi)容在屏幕上顯示如下圖形。*程序的流程圖如圖 1-5所示。cl=0?程序的框架如下:data segment* Y結(jié)束圖1-5程序流程圖pkey db "press any key.$endscode segmentstart:;set segment registers:mov a

45、x, datamov ds, axmov es, ax;初始化bl和bh,顯示上半部分next:;內(nèi)循環(huán)計數(shù)器cl=bhnextl:;顯示*'cl=cl-1; 如果cl w0,則轉(zhuǎn)到nextl; 顯示0DH;顯示0AHbh=bh+1bl=bl-1; 如果bl w0,則轉(zhuǎn)到next;初始化bl、ch和bh,顯示下半部分 next2:cl=ch;設置空格數(shù);如果cl=0 ,則轉(zhuǎn)到next3next4:;顯示;cl=cl-1; 如果cl w0,則轉(zhuǎn)到next4next3:cl=bh;如果cl=0 ,則轉(zhuǎn)到next5next6:;顯示*'cl=cl-1; 如果cl w0,則轉(zhuǎn)到next

46、6next5:;顯示0DH;顯示0AHch=ch-1bh=bh+1bl=bl-1; 如果bl w0,則轉(zhuǎn)到next2lea dx, pkeymov ah, 9int 21h; output string at ds:dx;wait for any key.mov ah, 1int 21hmov ax, 4c00h ; exit to operating 21hendsend start ; set entry point and stop the assembler.5 .實驗習題若要顯示如下形式的三角形,該如何修改程序? *6 .實驗報告要求1)寫出完整的程序。2)使用

47、不同數(shù)據(jù)測試程序并解釋運行結(jié)果。1.3擴展實驗1.3.1 統(tǒng)計排序1 .實驗目的1)掌握三種基本程序結(jié)構(gòu)的設計方法。2 .實驗設備微型計算機、emu80863 .實驗原理在屏幕上顯示字符串的語句如下:LEA DX,字符串變量名,字符串必須以字符$'作為結(jié)束MOV AH , 9INT 21H從鍵盤上輸入字符串的語句如下:LEA DX,鍵盤緩沖區(qū)名MOV AH , 0AHINT 21H在顯示提示信息后和輸入數(shù)據(jù)后,都需要回車換行,在這里我們用一個宏指令CRLF來實現(xiàn)。注意,宏指令 CRLF中又調(diào)用了另外一個帶參數(shù)的宏指令CALLDOS宏指令一般定義在程序的最前面。宏定義:CALLDOS M

48、ACRO FUNCTION 定義宏指令 CALLDOSMOV AH, FUNCTIONINT 21HENDM宏定義結(jié)束CRLF MACRO FUNCTIONMOV DL, 0DH ;CALLDOS 2;2MOV DL, 0AH CALLDOS2 ENDM;CRLF宏指令用2號 回車換行。定義宏指令CRLF回車號功能調(diào)用用于顯示 DL中的字符換行宏定義結(jié)束DO砌能調(diào)用(顯示一個字符)顯示回車符與換行符的方法來實現(xiàn) 2號DO砌能在顯示回車符與換行符時實際上只是把光標移到下一行的開始,而并非把0DH和0AH顯示在屏幕上。在程序中凡是需要進行回車換行的地方只要把CRLF看成是一條無操作數(shù)指令直接使用即

49、可。在程序中若要使用 CALLDO法指令,需要在CALLDO宏指令后帶上一個實參,該實參為DO砌能調(diào)用的功能號。為了便于排序和統(tǒng)計,從鍵盤輸入的數(shù)據(jù)先轉(zhuǎn)換成二進制數(shù)存儲,在最后顯示結(jié)果前再把數(shù)據(jù)轉(zhuǎn)換成 ASCII碼。由于字符0''9'的ASCII碼是30H-39H,因此將數(shù)值09 轉(zhuǎn)換成對應的 ASCII碼時,需要在其基礎(chǔ)上加30H;由于字符A'F'的ASCII碼是41H46H,因此將數(shù)值A(chǔ)F轉(zhuǎn)換成對應的ASCII碼時,需要在其基礎(chǔ)上加 37H??梢圆捎妹芭菖判蚍▽?shù)據(jù)排序。在雙重循環(huán)中,外層循環(huán)用于確定待比較的數(shù)據(jù),內(nèi)層循環(huán)在待比較的數(shù)據(jù)中確定一個最小

50、數(shù)并將該數(shù)放到合適的位置。比較數(shù)據(jù)時,可以先從最后一個數(shù)開始,通過與前一個數(shù)的比較,將小數(shù)放在前面,大數(shù)放在后面,即如果后面的數(shù)小于前面的數(shù),需要交換兩個數(shù)的位置。4 .實驗內(nèi)容在屏幕上顯示提示信息“Please input 10 numbers:",提示用戶輸入10個數(shù)(數(shù)的范 圍在099之間),然后從鍵盤上讀入這10個數(shù)。接著對這10個數(shù)從小到大進行排序,并統(tǒng)計059、6079、8099的數(shù)各有多少。最后在屏幕上顯示排序后的數(shù)(每個數(shù)之間用 逗號分隔)并顯示統(tǒng)計的結(jié)果。顯示格式如下:Sorted numbers: xx,xx,xx,xx,xx,xx,xx,xx,xx,xx0-59: xx60-79: xx80-99: xx程序流程圖如圖1-6所示。圖1-6程序流程圖程序的框架如下:;定義宏CALLDOS;定義宏CRLFdata segment;定義提示信息 MESSAGE顯示'Please input 10 numbers:'MESSAGE db 'Please input 10 numbers:',0dh,0ah,'$'定義鍵盤緩沖區(qū) KB_BUF包括可接收最大

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論