匯編語言矩陣相乘課程設(shè)計附源代碼_第1頁
匯編語言矩陣相乘課程設(shè)計附源代碼_第2頁
匯編語言矩陣相乘課程設(shè)計附源代碼_第3頁
匯編語言矩陣相乘課程設(shè)計附源代碼_第4頁
匯編語言矩陣相乘課程設(shè)計附源代碼_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、華 北 科 技 學(xué) 院課程設(shè)計說明書班級: 姓名: 學(xué)號: 課程名稱: 匯編語言課程設(shè)計 課設(shè)時間: 2006-12-05 至 2006-12-16 成績評定:1、工作量: A( ),B( ),C( ),D( ),F( )2、難易度: A( ),B( ),C( ),D( ),F( )3、答辯情況:基本操作: A( ),B( ),C( ),D( ),F( )代碼理解: A( ),B( ),C( ),D( ),F( )4、報告規(guī)范度: A( ),B( ),C( ),D( ),F( )5、學(xué)習(xí)態(tài)度: A( ),B( ),C( ),D( ),F( )總評成績: 指導(dǎo)教師: 一 課程設(shè)計的目的、任務(wù)1.

2、課程設(shè)計的目的:使學(xué)生綜合使用所學(xué)過的匯編語言程序設(shè)計知識,掌握結(jié)構(gòu)化程序設(shè)計的基本思路和方法,利用所學(xué)的基本知識和技能,發(fā)揮自學(xué)能力和查找資料的能力,解決稍微復(fù)雜的結(jié)構(gòu)化程序設(shè)計問題,加深對所學(xué)知識的理解與掌握,增強(qiáng)學(xué)生利用自己所學(xué)知識解決實(shí)際問題的能力,為以后的程序開發(fā)打下基礎(chǔ)。課程設(shè)計的目的和要求:(1)使學(xué)生鞏固和加強(qiáng)匯編語言課程的理論知識。(2)使學(xué)生掌握匯編語言的基本概念、語法、語義和數(shù)據(jù)類型的使用特點(diǎn)。(3)使學(xué)生掌握匯編語言程序設(shè)計的方法及編程技巧,能正確使用匯編語言編寫程序。(3)進(jìn)一步理解與運(yùn)用結(jié)構(gòu)化程序設(shè)計的思想和方法;學(xué)會利用流程圖或N-S圖表示算法。(4) 使學(xué)生掌握

3、調(diào)試程序的基本方法及上機(jī)操作方法。(5)掌握書寫程設(shè)計開發(fā)文檔的能力,使學(xué)生學(xué)會撰寫課程設(shè)計總結(jié)報告。課程設(shè)計的思想和方法還可以作為學(xué)生做畢業(yè)論文時的參考資料。(6)通過查閱手冊和文獻(xiàn)資料,培養(yǎng)學(xué)生獨(dú)立分析問題和解決問題的能力。為學(xué)生做畢業(yè)設(shè)計打好基礎(chǔ)。(7)初步掌握開發(fā)一個小型實(shí)用系統(tǒng)的基本方法:結(jié)合實(shí)際應(yīng)用的要求,使課程設(shè)計既覆蓋知識點(diǎn),又接近工程實(shí)際需要。通過激發(fā)學(xué)習(xí)興趣,調(diào)動學(xué)生主動學(xué)習(xí)的積極性,并引導(dǎo)他們根據(jù)實(shí)際編程要求,訓(xùn)練自己實(shí)際分析 問題的能力及編程能力,并養(yǎng)成良好的編程習(xí)慣。(8)培養(yǎng)學(xué)生的創(chuàng)新能力和創(chuàng)新思維。學(xué)生可以根據(jù)指導(dǎo)書和相關(guān)文獻(xiàn)上的參考算法,自己設(shè)計出相應(yīng)的應(yīng)用程序

4、。(9)培養(yǎng)學(xué)生良好的程序設(shè)計風(fēng)格。在實(shí)際編程中,為了提高編程質(zhì)量,對空行、空格和注釋均有要求。學(xué)生在課程設(shè)計書寫代碼時,應(yīng)該嚴(yán)格按要求處理,以便建立良 好的程序設(shè)計風(fēng)格。2.課程設(shè)計的題目矩陣相乘(1)要求:掌握多重循環(huán)程序的設(shè)計方法,并熟悉有關(guān)矩陣的編程原理。(2)內(nèi)容:將一個4 X 4 的矩陣與一個4 X 1 的矩陣相乘,將結(jié)果存入相應(yīng)的單元,分別用十進(jìn)制數(shù)、二進(jìn)制、十六進(jìn)制形式顯示結(jié)果。3.課程設(shè)計環(huán)境(1)硬件:PC機(jī)。(2)軟件:操作系統(tǒng)為64位Windows7,設(shè)計語言為MASM FOR WINDOWS 匯編語言集成實(shí)驗(yàn)環(huán)境。4.課程設(shè)計要求(1)課程設(shè)計可采取每人一題,可任選一

5、題進(jìn)行設(shè)計, 至少包含五個功能模塊。或者每組完成一個課題,每組成員分工合作完成一個課程設(shè)計,每個人的任務(wù)不同;(2)可以選擇老師提供的參考選題,也可以自選,如果自選,需要將自選題目的詳細(xì)內(nèi)容以及實(shí)現(xiàn)要求提供給老師,老師批準(zhǔn)后方可采用;(3)要求利用結(jié)構(gòu)化程序設(shè)計方法以及匯編語言的編程思想來完成系統(tǒng)的設(shè)計;(4)要求有歡迎界面、菜單、文件操作,數(shù)據(jù)使用數(shù)組、結(jié)構(gòu)體等均可,鍵盤操作或鼠標(biāo)操作均可;(5)模塊化程序設(shè)計:要求在設(shè)計的過程中,按功能定義過程或宏,多個模塊化設(shè)計可以用文件的形式來實(shí)現(xiàn);(6)學(xué)生所選課題必須上機(jī)通過,并獲得滿意的結(jié)果;(7)程序書寫風(fēng)格:鋸齒型書寫格式。二 軟件需求分析和

6、設(shè)計(1)需求分析本程序主要實(shí)現(xiàn)的功能是一個4*4矩陣與4*1矩陣相乘最后得到一個4*1矩陣,并且要求用三種方式輸出這個矩陣,分別是二進(jìn)制和十六進(jìn)制和十進(jìn)制。并且這個程序要求菜單的選擇。(2)下面就是這個程序的流程圖、 開始 菜單選擇輸出第一個矩陣(十進(jìn)制) 輸出第二個矩陣(十進(jìn)制) 矩陣相乘運(yùn)算(矩陣相乘規(guī)則)輸出結(jié)果矩陣(十進(jìn)制) 輸出流程圖開始將BX值和地址給AX輸出結(jié)果矩陣(十六進(jìn)制)以十進(jìn)制輸出AX的第一個數(shù)輸出結(jié)果矩陣(二進(jìn)制)NN地址轉(zhuǎn)移下個數(shù),中間TAB功能 結(jié)束 列數(shù)CX=0? 主流程圖 Y行數(shù)DX=0?Y 結(jié)束開始開始獲得AX中一個數(shù)獲得AX中一個數(shù) 循環(huán)左移四位除以10,

7、商放在AX,余數(shù)放在DX取出AL低四位加上30H輸出AX=0?NYAL>9?余數(shù)的出棧輸出NYNCX=0? N加上07H變成A-F Y輸出一個數(shù) 結(jié)束開始CH=0? 十進(jìn)制矩陣輸出獲得AX中一個數(shù)Y結(jié)束邏輯左移一位是否進(jìn)位?N 十六進(jìn)制矩陣輸出NY輸出0輸出1CX=0?Y開始 二進(jìn)制矩陣輸出 開始列循環(huán)數(shù)初始賦值行循環(huán)數(shù)初始賦值重新定義偏移量和CXYN邊相乘邊存儲CX=0?YY第二矩陣是否有第二列?N行循環(huán)數(shù)加一是否有下一行?N開始 三 程序?qū)崿F(xiàn)說明(介紹程序?qū)崿F(xiàn)過程,包括關(guān)鍵代碼分析(注意:應(yīng)該限制代碼的數(shù)量)1.矩陣相乘關(guān)鍵代碼MUL_AB: ;矩陣相乘 MOV DI, 0 MOV

8、HH, 0;-嵌套循環(huán)- MUL_0: MOV LL, 0;- MUL_1: MOV BX, HH;HH為空,BX清零 ADD BX, HH MOV SI, LL;LL為空,SI清零 ADD SI, LL MOV CX, LA;將4傳給CX;- MUL_2: MOV AX, MABX;矩陣一的第一個數(shù)放進(jìn)AX MOV DX, MBSI;矩陣二的第一個數(shù)放進(jìn)DX MUL DX;兩數(shù)相乘 ADD MCDI, AX;結(jié)果矩陣第一數(shù)先放上AX ADD BX, 2;地址往下移 ADD SI, 2 * LB;地址下移矩陣二列數(shù)*2 LOOP MUL_2;- ADD DI, 2;地址往下移 INC LL;列

9、數(shù)加1 CMP LL, LB;比較結(jié)果矩陣列數(shù)與矩陣二的列數(shù) JNZ MUL_1;- ADD HH, LA;結(jié)果矩陣行數(shù) CMP HH, HA * LA;比較結(jié)果矩陣行數(shù)數(shù)與矩陣一的行數(shù)與列數(shù)的乘積 JB MUL_0 RET2.十進(jìn)制轉(zhuǎn)換關(guān)鍵代碼PRINT_AX:;將存在AX中的數(shù)按照十進(jìn)制輸出 PUSH BX PUSH CX PUSH DX MOV BX, 10 MOV CX, 0 P_LOP1: MOV DX, 0 DIV BX ;直接除以10,余數(shù)在DX一次輸出一個 INC CX PUSH DX CMP AX, 0 ;商存在AX中,接著用來取余數(shù)放到DX里面 JNZ P_LOP1 MOV

10、 AH, 2 P_LOP2: POP DX ADD DL, '0' INT 21H LOOP P_LOP2 ;CX自加多少次,就自減多少次,輸出整個數(shù) POP DX POP CX POP BX RET3.十六進(jìn)制轉(zhuǎn)換關(guān)鍵代碼HSP PROC FAR;十六進(jìn)制轉(zhuǎn)換子程序 PUSH BX PUSH CX PUSH DX MOV BX,AX MOV CH,04D;CH初始定義為4 ROTATE: MOV CL,04D;CL初始定義為4 ROL BX,CL;對操作數(shù)進(jìn)行循環(huán)左移4次,每執(zhí)行一次,把最高位移到最低位,同時還把最高位移到CF MOV AL,BL AND AL,0FH;取AL

11、的低四位 ADD AL,30H;加上30H輸出 CMP AL,'9'AL與9比較 JBE PRINT2;小于等于就會跳到PRINT2 ADD AL,07H ;大于AL加上07H ,變成字母ABCDEF PRINT2: MOV DL,AL;AL給DL輸出出來 MOV AH,2 INT 21H DEC CH;ch自減,不為零繼續(xù)循環(huán)上面代碼 JNE ROTATE MOV AH,2 MOV DL,'H' INT 21H POP DX POP CX POP BX RET HSP ENDP4.二進(jìn)制轉(zhuǎn)換關(guān)鍵代碼DSP PROC FAR;二進(jìn)制轉(zhuǎn)換子程序 PUSH BX P

12、USH CX PUSH DX MOV BX,AX;把數(shù)值放到BX保護(hù)起來,BX中本身放的就是二進(jìn)制 MOV CX,16;為循環(huán)做準(zhǔn)備 T: SHL BX,1 ;把BX的值向左移一位,其高位放在CF標(biāo)志位里 JC PRINT4 ;如果高位是1就輸出1 JNC PRINT5 ;如果高位是0就輸出0 PRINT4: MOV DL,31H;把要在屏幕上輸出的字符預(yù)先放到DL寄存器里,31H表示字符1 MOV AH,2 INT 21H JMP L PRINT5: MOV DL,30H;把要在屏幕上輸出的字符預(yù)先放到DL寄存器里,31H表示字符0 MOV AH,2 INT 21H L: LOOP T MO

13、V AH,2 MOV DL,'B' INT 21H POP DX POP CX POP BX RET DSP ENDP5. 運(yùn)行結(jié)果截圖菜單截圖矩陣一矩陣二和相乘后矩陣截圖(十進(jìn)制)矩陣三十六機(jī)制和二進(jìn)制截圖四 程序總結(jié)(軟件完成情況,有哪些收獲,存在哪些不足對課程設(shè)計有哪些建議)這次課設(shè)我完成的主要是矩陣的相乘和輸出矩陣的進(jìn)制轉(zhuǎn)換,以及光標(biāo)定位,菜單輸出等等功能!這次課設(shè)的時間有兩周,其實(shí)主要完成在最后一周,通過這次試驗(yàn)最大的收獲就是看程序一定要耐心,雖然程序是我拼湊而成,但是基本上已經(jīng)讀懂整個程序,途中遇見幾個問題,非常感謝老師和同學(xué)們的幫助,最終完成了這個程序。存在的不足

14、之處就是這兩個矩陣是固定格式的,不能任意矩陣相乘,希望以后可以改進(jìn),這個課設(shè)學(xué)習(xí)了很多,新的知識主要是BOIS功能的調(diào)用,主要集中在字體顏色變化和光標(biāo)的定位,還學(xué)到了矩陣相乘中的嵌套循環(huán),這個對于循環(huán)反復(fù)操作不同的數(shù)非常的重要!另外還了解了進(jìn)制轉(zhuǎn)換的方法,也是利用了循環(huán)移位的操作,本來我覺得匯編是個令人頭疼的語言,但是你只要緊緊抓住它其中數(shù)的變化就行,能夠準(zhǔn)確定位數(shù)的位置及作用,而且還要了解數(shù)的及時清零與更新!往往其中很容易混淆的就是數(shù)的位置和作用,之前很容易的辨認(rèn)錯誤!這次的實(shí)驗(yàn)還是學(xué)到了很多東西,主要感謝老師和同學(xué)的指導(dǎo),總體上來說,完成了基本課設(shè)要求!希望在以后的學(xué)習(xí)中,也應(yīng)該有那種細(xì)心

15、鉆研的精神!源代碼:DATA SEGMENT;=菜單的定義=str1 db '*Menu:*',13,10 mess1 db ' *1:print the first array:*',13,10 mess2 db ' *2:print the second array:*',13,10 mess3 db ' *3:print the Hexadecimal system array:*',13,10 mess4 db ' *4:print the Binary system array:*',13,10 mess

16、5 db ' *5:print the Decimal system array:*',13,10 mess6 db ' *END*',13,10 length1 equ $-str1STR2 db 'please make your choose:',13,10;-array1 DB 'the first array is (4*4):','$'array2 DB 'the second array is (4*1):','$'H DB 'print array1*arra

17、y2(Hexadecimal system):','$'B DB 'print array1*array2(Binary system):','$'D DB 'print array1*array2(Decimal system):','$'-MA DW 11, 12, 13, 14 ;定義4*4矩陣MA DW 21, 22, 23, 24 DW 31, 32, 33, 34 DW 41, 42, 43, 44HA EQU 4 ;行數(shù)LA EQU 4 ;列數(shù);-MB DW 12 ;定義4*1矩陣MB DW

18、11 DW 11 DW 11HB EQU 4 LB EQU 1;-MC DW HA * LB DUP(?) ;定義結(jié)果矩陣HC EQU HALC EQU LBHH DW ?LL DW ?;=宏的定義=;-光標(biāo)的初始定義-cursor macro row,rankmov ah,2mov dh,rowmov dl,rankmov bh,0int 10hendm;回車換行hchh macro mov dl, 10mov ah,2int 21hmov dl ,13mov ah,2int 21hendm;字符串輸出PRINT macro xmov ah,9lea dx, xint 21hendmDATA

19、 ENDS;* CODE SEGMENT ASSUME CS:CODE, DS:DATA START: MOV AX, DATA MOV DS, AX;=光標(biāo)和菜單字體顏色設(shè)置= mov al,3mov ah,00hint 10hmov bp,seg str1mov es,bpmov bp,offset str1mov cx,length1mov dx,0mov bl,05h;菜單紅字定義mov al,0cursor 2,15;菜單光標(biāo)初始定義mov ah,13hint 10h;= ;-菜單跳轉(zhuǎn)選項(xiàng)-hchhcursor 12,0out1:mov ah,1int 21hcmp al,'

20、1'jz L1cmp al,'2'jz L2cmp al,'3'jz L3cmp al,'4'jz L4cmp al,'5'jz L5jmp EXIT;-主程序- L1: PRINT array1 HCHH MOV BX, OFFSET MA ;輸出第一個矩陣 MOV CX, LA MOV DX, HA CALL PRINT_M HCHH JMP OUT1 L2: PRINT array2 HCHH MOV BX, OFFSET MB ;輸出第二個矩陣 MOV CX, LB MOV DX, HB CALL PRINT_M1

21、 CALL huanhang HCHH JMP OUT1 L3: PRINT D HCHH CALL MUL_AB ;矩陣相乘 MOV BX, OFFSET MC ;結(jié)果十進(jìn)制輸出 MOV CX, LC MOV DX, HC CALL PRINT_M2 HCHH JMP OUT1 L4: PRINT H HCHH MOV BX, OFFSET MC ;結(jié)果十六進(jìn)制輸出 MOV CX, LC MOV DX, HC CALL PRINT_Z2 HCHH JMP OUT1 L5: PRINT B HCHH MOV BX, OFFSET MC ;結(jié)果二進(jìn)制輸出 MOV CX, LC MOV DX, H

22、C CALL PRINT_Z3 EXIT: MOV AH, 4CH INT 21H;* PRINT_M: ;第一個矩陣輸出 PUSH CX push ax ;提示文字,并保護(hù)寄存器 push dx pop dx pop ax PR2: MOV AX, BX;將BX數(shù)給AX CALL PRINT_AX ;直接輸出一個數(shù)(十進(jìn)制數(shù)) CALL TAB_09 ;輸出空格 ADD BX, 2 ;轉(zhuǎn)到下一個數(shù) LOOP PR2 POP CX ;根據(jù)列判斷一行輸入多少數(shù)據(jù) CALL huanhang;輸出一行的數(shù)后立即換行 DEC DX;DX自減 JNZ PRINT_M;DX不為零直接跳到上面繼續(xù)輸出余數(shù)

23、 RET;* PRINT_M1: ;第二個矩陣輸出 PUSH CX push ax push dx pop dx pop ax PR20: MOV AX, BX CALL PRINT_AX CALL TAB_09 ADD BX, 2 LOOP PR20 POP CX CALL huanhang;輸出一列后立即換行 DEC DX JNZ PRINT_M1 RET ;* PRINT_M2: ;相乘矩陣后的輸出 PUSH CX push ax push dx pop dx pop ax PR21: MOV AX, BX CALL PRINT_AX CALL TAB_09 ADD BX, 2 LOOP

24、 PR21 POP CX CALL huanhang;輸出一列后立即換行 DEC DX JNZ PRINT_M2 RET;* PRINT_AX:;將存在AX中的數(shù)按照十進(jìn)制輸出 PUSH BX PUSH CX PUSH DX MOV BX, 10 MOV CX, 0 P_LOP1: MOV DX, 0 DIV BX ;直接除以10,余數(shù)在DX一次輸出一個 INC CX PUSH DX CMP AX, 0 ;商存在AX中,接著用來取余數(shù)放到DX里面 JNZ P_LOP1 MOV AH, 2 P_LOP2: POP DX ADD DL, '0' INT 21H LOOP P_LOP

25、2 ;CX自加多少次,就自減多少次,輸出整個數(shù) POP DX POP CX POP BX RET;* huanhang:;段內(nèi)換行,去掉這個后會陷于死循環(huán)! PUSH AX PUSH DX MOV AH, 2 MOV DL, 13 INT 21H MOV DL, 10 INT 21H POP DX POP AX RET;* TAB_09:;TAB功能調(diào)用,讓矩陣的輸出更加規(guī)范! PUSH AX PUSH DX MOV AH, 2 MOV DL, 9 INT 21H POP DX POP AX RET;&&&&&&&&&&a

26、mp;&&&&&矩陣相乘&&&&&&&&&&&&&& MUL_AB: ;矩陣相乘 MOV DI, 0 MOV HH, 0;-嵌套循環(huán)- MUL_0: MOV LL, 0;- MUL_1: MOV BX, HH;HH為空,BX清零 ADD BX, HH MOV SI, LL;LL為空,SI清零 ADD SI, LL MOV CX, LA;將4傳給CX;- MUL_2: MOV AX, MABX;矩陣一的第一個數(shù)放進(jìn)AX MOV DX, MBSI;

27、矩陣二的第一個數(shù)放進(jìn)DX MUL DX;兩數(shù)相乘 ADD MCDI, AX;結(jié)果矩陣第一數(shù)先放上AX ADD BX, 2;地址往下移 ADD SI, 2 * LB;地址下移矩陣二列數(shù)*2 LOOP MUL_2;- ADD DI, 2;地址往下移 INC LL;列數(shù)加1 CMP LL, LB;比較結(jié)果矩陣列數(shù)與矩陣二的列數(shù) JNZ MUL_1;- ADD HH, LA;結(jié)果矩陣行數(shù) CMP HH, HA * LA;比較結(jié)果矩陣行數(shù)數(shù)與矩陣一的行數(shù)與列數(shù)的乘積 JB MUL_0 RET;%十六進(jìn)制輸出% PRINT_Z2: ;十六進(jìn)制矩陣輸出 PUSH CX push ax push dx pop dx pop ax print1: MOV AX, BX CALL HSP CALL TAB_09 ADD BX, 2 LOOP print1;第一行輸出 POP CX CALL huanhang;輸出一列后立即換行 DEC DX JNZ PRINT_Z2 RETHSP PROC FAR;十六進(jìn)制轉(zhuǎn)換子程序 PUSH BX PUSH CX PUSH DX MOV BX,AX MOV CH,04D;CH初始定義為4 ROTATE: MOV CL,04D;CL初始定義為4 ROL BX,CL;對操作數(shù)進(jìn)行循環(huán)左移4次,每執(zhí)行一次,把最高位移到最低位,同時還把最高位移到CF MOV AL,B

溫馨提示

  • 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

提交評論