北京理工大學(xué)微機(jī)原理實(shí)驗(yàn)報(bào)告.doc
《北京理工大學(xué)微機(jī)原理實(shí)驗(yàn)報(bào)告.doc》由會(huì)員分享,可在線閱讀,更多相關(guān)《北京理工大學(xué)微機(jī)原理實(shí)驗(yàn)報(bào)告.doc(13頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
微機(jī)原理與接口技術(shù) 實(shí)驗(yàn)報(bào)告 實(shí)驗(yàn)內(nèi)容:匯編語(yǔ)言程序設(shè)計(jì)實(shí)驗(yàn) 組別:12 姓名: 班級(jí): 學(xué)號(hào): 一、實(shí)驗(yàn)?zāi)康? 1、熟悉IDE86集成開(kāi)發(fā)環(huán)境的使用。 2、通過(guò)編程、上機(jī)調(diào)試,進(jìn)一步理解匯編語(yǔ)言的設(shè)計(jì)思路與執(zhí)行過(guò)程。 3、熟悉DOS命令調(diào)用,以達(dá)到輸入輸出、返回DOS系統(tǒng)等目的。 4、掌握利用匯編實(shí)現(xiàn)求和與求最值的方法。 5、掌握利用匯編實(shí)現(xiàn)數(shù)制轉(zhuǎn)換的方法。 6、鞏固理論知識(shí),鍛煉動(dòng)手編程,獨(dú)立思考的能力。 二、實(shí)驗(yàn)內(nèi)容(具體內(nèi)容) 1、求從TABLE開(kāi)始的10個(gè)無(wú)符號(hào)字節(jié)數(shù)的和,并將結(jié)果放在SUM字單元中。并查看前5個(gè),前8個(gè)數(shù)之和以及各寄存器和內(nèi)存的狀態(tài)。 2、在1的基礎(chǔ)上修改程序,求出10個(gè)數(shù)中的最大值和最小值,最后將最大最小值分別賦給MAX及MIN。 3、求1到 100 的累加和,并用十進(jìn)制形式將結(jié)果顯示在屏幕上。要求實(shí)現(xiàn)數(shù)據(jù)顯示,并返回DOS狀態(tài)。 三、實(shí)驗(yàn)方法 1、設(shè)計(jì)思路 (1)實(shí)驗(yàn)1的設(shè)計(jì)思路:先將10個(gè)要相加的數(shù)存在以TABLE為首的10個(gè)連續(xù)的存儲(chǔ)單元中,然后利用循環(huán)結(jié)構(gòu)依次取出數(shù)值放在AL中并累加,若有進(jìn)位則加到AH中直至循環(huán)10次累加結(jié)束,將累加的結(jié)果放在SUM中并返回DOS狀態(tài)。 (2)實(shí)驗(yàn)2的設(shè)計(jì)思路:先將10個(gè)要比較的數(shù)放在以TABLE為首的10個(gè)連續(xù)的存儲(chǔ)單元中。將第一個(gè)數(shù)首先賦給AL和AH(分別存儲(chǔ)相對(duì)最小和最大值)在利用LOOP循環(huán)結(jié)構(gòu),依次和下面的數(shù)進(jìn)行比較,每次把相對(duì)的最大值與最小值存儲(chǔ)到AH和AL中直至循環(huán)9次比較結(jié)束,將AH和AL里面的最大值與最小值賦給MAX和MIN,返回DOS狀態(tài) (3)實(shí)驗(yàn)3的設(shè)計(jì)思路:先在內(nèi)存中定義COUNT=100,表示1-100求和,若相求1-n的和并顯示只需COUNT的值為n即可,同時(shí)定義一塊以DNUM為首地址的數(shù)據(jù)區(qū)用于存儲(chǔ)累加和的十進(jìn)制數(shù)對(duì)應(yīng)的ASCII碼。先利用AX和LOOP求出1-COUNT的累加和存在AX中;在進(jìn)行數(shù)值轉(zhuǎn)化,AX依次除10取余數(shù)保存,將16進(jìn)制數(shù)轉(zhuǎn)化為10進(jìn)制ASCII碼值并存在DUNM中。最后在屏幕上顯示并返回DOS狀態(tài)。 2程序流程圖 實(shí)驗(yàn)一、二和三的流程圖分別如圖1、圖2和圖3所示 數(shù)據(jù)段地址放入 相應(yīng)的段寄存器 SI指向TABLE AX清零 設(shè)置循環(huán)次數(shù),CX=10 把AL的值賦給SUM CX =0? 將SI指向的 數(shù)加到AL中 若有進(jìn)位加到AH中 SI加1指向下一個(gè)數(shù) CX減1 返回DOS狀態(tài) 結(jié)束 定義數(shù)據(jù)段 開(kāi)始 N Y 圖1 10個(gè)數(shù)求和流程圖 圖2 求10個(gè)數(shù)最大最小值流程圖 返回DOS狀態(tài) 結(jié)束 數(shù)據(jù)段地址放入 相應(yīng)的段寄存器 SI指向TABLE 第一個(gè)數(shù)送入AL和AH 設(shè)置循環(huán)次數(shù),CX=9 把AL的值賦給MIN CX =0? SI指向的值與AL比較,較小的值存入AL中 SI=SI+1 SI指向的值與AH比較,較大的值存入AH中 CX減1 定義數(shù)據(jù)段 開(kāi)始 N Y 把AH的值賦給MAX AX的值賦給SUM 數(shù)據(jù)段地址放入 相應(yīng)的段寄存器 COUNT=100, AX=0 累加次數(shù)CX=COUNT 累加:AX=AX+CX 定義數(shù)據(jù)段 開(kāi)始 N Y CX =0? CX=CX-1 DX清零 循環(huán)次數(shù)CX=4 屏幕顯示數(shù)字和 返回DOS狀態(tài) 結(jié)束 CX =0? DX,AX構(gòu)成的數(shù)除10取余,余數(shù)保存在DX 將余數(shù)加上30H保存在DUNM中,CX減1 Y N 圖3 1-100求和并在屏幕顯示流程圖 四、實(shí)驗(yàn)源程序(必要的文字注釋?zhuān)? 實(shí)驗(yàn)一: ;求10個(gè)無(wú)符號(hào)字節(jié)數(shù)的和,結(jié)果存在SUM中 DATA SEGMENT ;定義數(shù)據(jù)段 TABLE DB 12H,23H,34H,45H,56H ;10個(gè)加數(shù) DB 67H,78H,89H,9AH,0FDH SUM DW ? DATA ENDS ; CODE SEGMENT ;定義代碼段 ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX ;初始化DS LEA SI,TABLE ;SI指向TABLE MOV CX,10 ;循環(huán)次數(shù)為10 XOR AX,AX ;AX清零 NEXT: ADD AL,[SI] ;把一個(gè)數(shù)加到AX中去 ADC AH,0 ;若有進(jìn)位AH加1 INC SI ;SI指向下一個(gè)數(shù) LOOP NEXT ;循環(huán)相加 MOV SUM,AX ;循環(huán)結(jié)束將結(jié)果保存到SUM中 MOV AH,4CH ;返回DOS狀態(tài) INT 21H CODE ENDS ;代碼段結(jié)束 END START ;匯編結(jié)束,起始地址為START 實(shí)驗(yàn)二: ;求出10個(gè)數(shù)中的最大值和最小值。 DATA SEGMENT TABLE1 DB 12H,23H,34H,45H,56H ;十個(gè)數(shù)據(jù) DB 67H,78H,89H,9AH,0FDH MIN DB ? ;最小值 MAX DB ? ;最大值 DATA ENDS ; CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA START: MOV AX,DATA MOV DS,AX ;數(shù)據(jù)段段地址送入DS MOV ES,AX ;附加數(shù)據(jù)段段地址送入ES LEA SI,TABLE1 MOV CX,9 ;比較次數(shù),一共9次 MOV AL,[SI] ;把第一個(gè)數(shù)送入AL,把最小數(shù)存在AL中 MOV AH,[SI] ;把第一個(gè)數(shù)送入AH,把最大數(shù)存在AH中 NEXT: INC SI CMP AL,[SI] ;比較AL中的數(shù)和下一個(gè)數(shù)的大小 JC GOON ;如果AL中的數(shù)小轉(zhuǎn)到GOON,繼續(xù)執(zhí)行 MOV AL,[SI] ;如果AL中的數(shù)大,將小的數(shù)存入AL GOON: CMP AH,[SI] ;比較AH中的數(shù)和下一個(gè)數(shù)的大小 JNC CONTU ;如果AH中的數(shù)大轉(zhuǎn)到CONTU,去下一次循環(huán) MOV AH,[SI] ;如果AH中的數(shù)大,將大的數(shù)存入AH CONTU: LOOP NEXT ;繼續(xù)循環(huán)直至全部比較完畢 MOV MAX,AH ;將最大的數(shù)存入MAX中 MOV MIN,AL ;將最小的數(shù)存入MIN中 MOV AH,4CH ;返回DOS狀態(tài) INT 21H CODE ENDS ;代碼段結(jié)束 END START ;匯編結(jié)束,起始地址為START 實(shí)驗(yàn)三: ;1-100求和并用十進(jìn)制在品目上顯示,程序結(jié)束返回DOS狀態(tài) DATA SEGMENT ;數(shù)據(jù)段 SUM DW 0 ;1-100的和 DNUM DB 0000,0DH,0AH,$ ;存儲(chǔ)1-100和的十進(jìn)制ASCII碼字符串 COUNT DW 100 ;求和的數(shù)目100個(gè),當(dāng)需要求1-n的數(shù)字和時(shí)只 ;需修改100為所需要的n即可 DATA ENDS ; SSEG SEGMENT ;堆棧段 DW 32 DUP(?) SSEG ENDS ; CODE SEGMENT ;代碼段 ASSUME CS:CODE,DS:DATA,ES:DATA START:MOV AX,DATA MOV DS,AX ;數(shù)據(jù)段的段地址送入DS MOV AX,SSEG MOV SS,AX ;堆棧段的段地址送入SS CALL SUMM ;求1-100的數(shù)據(jù)和,結(jié)果存入AX中 MOV SUM,AX ;和存入SUM中 CALL DISP ;將十六進(jìn)制數(shù)轉(zhuǎn)化相應(yīng)的十進(jìn)制ASCII碼值, ;存在DNUM中 LEA DX,DNUM ;使用DOS功能調(diào)用,在屏幕上顯示 MOV AH,9 INT 21H MOV AH,4CH ;返回DOS狀態(tài) INT 21H SUMM PROC ;求和子程序 XOR AX,AX ;AX清零 MOV CX,COUNT ;求和的數(shù)目,這里COUNT=100 CALCU:ADD AX,CX LOOP CALCU RET ;求和結(jié)束返回,求和值存在AX中 SUMM ENDP ; DISP PROC ;轉(zhuǎn)化為十進(jìn)制ACSII碼值子程序 MOV CX,4 ;要顯示的數(shù)為四位十進(jìn)制數(shù) MOV BX,10 GOON: LEA SI,DNUM ;顯示的ASCII碼字符串的偏移地址給SI XOR DX,DX ;DX清零,DX、AX存放1-100的和,AX為低位 DIV BX ;每次除10,余數(shù)為顯示數(shù)值, ADD SI,CX ;SI指向存入數(shù)據(jù)的下一位 ADD [SI-1],DL ;要顯示的十進(jìn)制數(shù)轉(zhuǎn)為相應(yīng)的ASCII碼 LOOP GOON ;循環(huán)4次將要顯示的十進(jìn)制數(shù)由低到高轉(zhuǎn)化 RET DISP ENDP ; CODE ENDS END START 5、 實(shí)驗(yàn)結(jié)果 1、 實(shí)驗(yàn)一:10個(gè)無(wú)符號(hào)字節(jié)數(shù)加和 (1)、TABLE中前5個(gè)數(shù)的和為0104H,結(jié)果如圖4所示,存儲(chǔ)在AX中。 圖4 TABLE中前5個(gè)數(shù)字和 (2)、TABLE中前8個(gè)數(shù)的和為026CH,結(jié)果如圖5所示,存儲(chǔ)在AX中。 圖5 TABLE中前8個(gè)數(shù)字和 (3)、程序運(yùn)行完結(jié)果結(jié)果如圖6所示,十個(gè)值的和為0403H,存儲(chǔ)在AX中。 圖6 TABLE中前10個(gè)數(shù)字和 2、實(shí)驗(yàn)二:10個(gè)數(shù)求最大最小值 為了保證程序的正確性,在這里我用三組輸入測(cè)試,分別為: 12H,23H,34H,45H,56H,67H,78H,89H,9AH,0FDH (最大右邊,最小左邊) 12H,9H,34H,45H,56H,67H,0FFH,89H,9AH,0FDH (最大最小在中間) 0FFH,9H,34H,45H,56H,67H,0FEH,89H,9AH,2H (最大左邊,最小右邊) 實(shí)驗(yàn)結(jié)果分別如圖7,圖8,圖9所示。 圖7 第一組輸入運(yùn)行結(jié)果 圖8 第二組輸入運(yùn)行結(jié)果 圖9 第三組輸入運(yùn)行結(jié)果 3、實(shí)驗(yàn)三:1-100求和并顯示 實(shí)驗(yàn)三的結(jié)果分別如圖10,圖11,圖12所示,其中圖10為1-100的累加和保存在AX中,結(jié)果為13BAH,圖11為轉(zhuǎn)化為相應(yīng)的十進(jìn)制ASCII碼保存在 DS:0002-DS:0005, 圖12為窗口顯示。 圖10 1-100的累加和 圖11 1-100和的相應(yīng)ASCII碼 圖12 1-100和的屏幕顯示 6、 實(shí)驗(yàn)中遇到的問(wèn)題及解決方法 1、在做實(shí)驗(yàn)一時(shí)由于對(duì)軟件不是很熟悉,做起來(lái)不是很順手,而且在編譯時(shí)軟件自身有一個(gè)控制參數(shù)/zi,當(dāng)時(shí)在做實(shí)驗(yàn)時(shí),由于不小心在后面多打上了一個(gè)字母,造成無(wú)法編譯的情況,經(jīng)過(guò)老師的指點(diǎn)才發(fā)現(xiàn)去除后能夠正常編譯了。 2、在做實(shí)驗(yàn)二時(shí),剛開(kāi)始我是用冒泡排序法先排序,這樣第一個(gè)和最后一個(gè)就是最大最小值,但這樣由于排序的過(guò)程中需要不斷交換數(shù)字使得效率很低,后來(lái)改成了使用AL和AH存放最大最小值,不去排序大大減少了排序的次數(shù)。 3、在做實(shí)驗(yàn)二時(shí),開(kāi)始循環(huán)次數(shù)我設(shè)成了10,導(dǎo)致出來(lái)的結(jié)果總也不對(duì),程序錯(cuò)誤。后來(lái)我使用單步調(diào)試和查看寄存器值相結(jié)合的方法發(fā)現(xiàn)多比較了一次,將CX的初值改成9結(jié)果正確。 4、在做實(shí)驗(yàn)三時(shí),由于有了前兩個(gè)實(shí)驗(yàn)的基礎(chǔ),在累加部分沒(méi)有問(wèn)題,結(jié)果為13BAH,但在16進(jìn)制轉(zhuǎn)化為10進(jìn)制時(shí),單步調(diào)試每到除10的地方總出現(xiàn)“divide by 0”的錯(cuò)誤提示。經(jīng)一步一步仔細(xì)檢查發(fā)現(xiàn)原來(lái)我設(shè)BL=10,這樣做除法時(shí)用AX除BL結(jié)果保存在AL中,而1-100相加為5050,第一次除10后變成了505,超出了AL的范圍造成錯(cuò)誤。使用DX,AX兩個(gè)寄存器保存被除數(shù),設(shè)BX為10,這樣商保存在AX里,不會(huì)超出范圍,結(jié)果正確。 七、心得體會(huì)與建議 通過(guò)這次上機(jī)實(shí)驗(yàn),我了解與熟悉了IDE86集成開(kāi)發(fā)環(huán)境,以及調(diào)試和使用的方法。與此同時(shí),我對(duì)于匯編語(yǔ)言中的編寫(xiě)習(xí)慣、語(yǔ)法要求等有了更深的認(rèn)識(shí)。此外通過(guò)此次實(shí)驗(yàn)讓我看到,知識(shí)溫故性的重要,對(duì)于排序和比較大二時(shí)就學(xué)過(guò)了,當(dāng)時(shí)也做了相應(yīng)的練習(xí)但是從這次實(shí)驗(yàn)來(lái)看,還是沒(méi)有做到盡善盡美,有很多的漏洞需要補(bǔ)。 實(shí)驗(yàn)三讓我看到在編程的過(guò)程中不僅要注意語(yǔ)法語(yǔ)句問(wèn)題,還要注意為數(shù)據(jù)分配的大小是否夠用。對(duì)于語(yǔ)法問(wèn)題可以通過(guò)編譯檢查出來(lái),而這種錯(cuò)誤編譯時(shí)檢查不出來(lái)的,很難發(fā)現(xiàn),只能一步一步的慢慢來(lái)看,很浪費(fèi)時(shí)間,所以在編寫(xiě)程序的過(guò)程中一定要盡量注意一些。- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來(lái)的問(wèn)題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁(yè)顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開(kāi)word文檔。
- 特殊限制:
部分文檔作品中含有的國(guó)旗、國(guó)徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 北京理工大學(xué) 微機(jī) 原理 實(shí)驗(yàn) 報(bào)告
鏈接地址:http://www.hcyjhs8.com/p-6508984.html