匯編實(shí)現(xiàn)九九乘法表輸出_第1頁(yè)
匯編實(shí)現(xiàn)九九乘法表輸出_第2頁(yè)
匯編實(shí)現(xiàn)九九乘法表輸出_第3頁(yè)
匯編實(shí)現(xiàn)九九乘法表輸出_第4頁(yè)
已閱讀5頁(yè),還剩3頁(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、目錄33334558899九九乘法表輸出摘要:九九乘法表輸出是應(yīng)用masm.exe 、link.exe、debug.exe 等匯編語(yǔ)言軟件進(jìn)行編譯鏈接及執(zhí)行目的程序的方法來(lái)實(shí)現(xiàn)。并且認(rèn)識(shí)和利用DOS系統(tǒng)下的21h 函數(shù)的 02 功能號(hào)來(lái)進(jìn)行單個(gè)字符的輸出,程序設(shè)計(jì)的過(guò)程中用到循環(huán)和子函數(shù)的思想。模塊化的程序設(shè)計(jì)思想,有利于源代碼代碼的編寫,錯(cuò)誤的查找和修改,同時(shí)可以分步來(lái)調(diào)試程序,減少工作量,乘法表的輸出沒(méi)有乘數(shù)和被乘數(shù),只有乘積的結(jié)果輸出。關(guān)鍵詞:匯編語(yǔ)言程序設(shè)計(jì)、微機(jī)原理、 九九乘法表、 dos中斷系統(tǒng)導(dǎo)入語(yǔ)一、 設(shè)計(jì)要求( 一 ) 創(chuàng)建文本文件,編寫源代碼,把文件保存在有masm.exe

2、 link.exe等匯編軟件的文件夾下,文件的后綴名改為.asm,比如(九九乘法表輸出.asm)。( 二 ) 開啟電腦,在“開始”“運(yùn)行”輸入“cmd”命令進(jìn)入DOS的字符操作界面, 編譯鏈接程序代碼,查看源程序是否有錯(cuò)誤,有錯(cuò)誤則加以修改。(三)程序編譯鏈接沒(méi)有錯(cuò)誤的情況下,執(zhí)行目標(biāo)程序,查看結(jié)果的輸出情況,并用debug命令查看內(nèi)存的變化。( 四 ) 按要求撰寫設(shè)計(jì)報(bào)告。二、設(shè)計(jì)思想九九乘法表輸出程序主要用到一個(gè)嵌套循環(huán),和兩個(gè)過(guò)程,外層循環(huán)用bl保存并記錄,外循環(huán)每執(zhí)行一次,bl 的值加一。內(nèi)循環(huán)用bh 保存并記錄,如果bh 的值小于bl 的值則執(zhí)行內(nèi)循環(huán),內(nèi)循環(huán)中每盒bl 比較一次,成

3、立則值加一不成立則轉(zhuǎn)到換行子函數(shù)執(zhí)行,同時(shí)也比較外循環(huán)是否繼續(xù)滿足條件執(zhí)行,即比較bl 的值是否小于10,小于就執(zhí)行外循環(huán),否則就結(jié)束程序。設(shè)計(jì) dis十進(jìn)制轉(zhuǎn)化成子函數(shù),把內(nèi)存中的 16 進(jìn)制數(shù)轉(zhuǎn)換成 10 進(jìn)制,設(shè)計(jì)的 disp ASCLL碼,并輸出乘積, 這樣得到的顯示的結(jié)果就是我們看到的子函數(shù)是把10 進(jìn)制數(shù)。子函數(shù)output_ctl的功能是換行, 當(dāng)內(nèi)循環(huán)變量bh 的值大于外循環(huán)值bl時(shí),調(diào)用這個(gè)函數(shù),使得輸出的結(jié)果風(fēng)有序,輸出的結(jié)果更容易體現(xiàn)嵌套循環(huán)。三、工作原理九九乘法表輸出是簡(jiǎn)單的乘法,實(shí)現(xiàn)了19 之間的數(shù)字相互相乘,并且把結(jié)果輸出,利用 masm.exe 、link.exe

4、debug.exe 等匯編語(yǔ)言軟件。設(shè)計(jì)算法編寫源代碼,設(shè)計(jì)一個(gè)循環(huán)結(jié)構(gòu)來(lái)循環(huán)相乘,直到完成9*9 ,比較退出程序。同時(shí)還設(shè)計(jì)到數(shù)數(shù)制的轉(zhuǎn)換問(wèn)題,內(nèi)存中的數(shù)據(jù)是16 進(jìn)制,而我們習(xí)慣看到的是10 進(jìn)制數(shù),通過(guò)16 進(jìn)制轉(zhuǎn)換成10 進(jìn)制,在轉(zhuǎn)成通用ascll碼輸出顯示,同時(shí)還用到DOS的中斷調(diào)用。四、程序流程圖開始初始數(shù)據(jù)初始外循環(huán)bl初始內(nèi)循環(huán)bh實(shí)現(xiàn)兩個(gè)數(shù)相乘及主要代碼段十六轉(zhuǎn)十子函數(shù)Nax<10YAx 除十十轉(zhuǎn)ascll 碼子函數(shù)輸出結(jié)bh<blYN換行子函數(shù)Ybl<10N結(jié)束五、程序運(yùn)行結(jié)果截圖六、程序源代碼datasegmenttabledw 81 dup(0)dat

5、aendscodesegmentassume cs:code,ds:datastart:mov ax,datamov ds,axmov di,offset table ;dimov bl,1;mul_1:mov bh,1;mul_2:push cx;指向 table的首地址外循環(huán)值內(nèi)循環(huán)值壓棧輸出第一個(gè)外循環(huán)值00hmov dl,blor dl,30hmov ah,02hint 21h;輸出乘號(hào)mov dl,'x'mov ah,02hint 21h;輸出第一個(gè)內(nèi)循環(huán)值mov dl,bhor dl,30hmov ah,02hint 21h;輸出等號(hào)mov dl,'=

6、9;mov ah,02hint 21hmov al,bh;把 bh 的值賦給 al 寄存器中mul bl;乘法指令, al 與 bl相乘,結(jié)果放入al 中mov di,al;di指向乘的結(jié)果call dis;調(diào)用子函數(shù) dismov dl,0h;輸出空格mov ah,2int 21hmov dl,0h;輸出空格mov ah,2int 21hadd di,2;di指向它的下一個(gè)地址pop cxinc bh;自加一指令cmp bh,bl;比較語(yǔ)句, bh 小于 bl執(zhí)行 jbe 語(yǔ)句,否則執(zhí)行;call output_ctle語(yǔ)句jbe mul_2;跳轉(zhuǎn)指令,返回 mul_2處,實(shí)現(xiàn)循環(huán)call

7、output_ctle ;程序調(diào)用指令inc blcmp bl,10;比較語(yǔ)句, bl 小于 10執(zhí)行 jb 語(yǔ)句,否則執(zhí)行程; 序結(jié)束指令jb mul_1jmp exit;無(wú)條件轉(zhuǎn)移指令; output_ctle函數(shù)功能:輸出回車換行output_ctle proc Nearpush ax;壓棧語(yǔ)句push dxmov ah,02h;dos中斷下的單個(gè)字符輸出功能mov dl,0dh;0d是回車的 ascll碼值int 21hmov ah, 02hmov dl,0ah;0a是換行的 ascll碼值int 21hpop dx;出棧語(yǔ)句pop axretoutput_ctle endp;子函數(shù)

8、dis 結(jié)束;dis 功能:在系統(tǒng)內(nèi)數(shù)據(jù)是 16進(jìn)制的,乘的結(jié)果大于10, 則需要轉(zhuǎn)化成10 進(jìn)制數(shù)但; 是不輸出,首先判斷數(shù)據(jù)是否大于10,大于 10 的除以 10, 余數(shù)放在 dl 中 .dis proc near;子函數(shù) dis 開始push axpush dxmov dh,10cmp ax,10jb next1div dhcall disp;ax;ax;的值低于10 轉(zhuǎn)向的值高于10 除以子函數(shù)調(diào)用語(yǔ)句next110,結(jié)果存在ax中mov al,ahnext1:call disppop dxpop axretdisendp;子函數(shù)dis結(jié)束(一) dis 子函數(shù)的流程圖如下開始主函數(shù)給

9、子函數(shù)的參數(shù)ax<10Ax 的值除以十調(diào)用子函數(shù)disp結(jié)束;disp的函數(shù)功能: 把 dis 的十進(jìn)制數(shù)轉(zhuǎn)換成ASCII 碼,并輸出。實(shí)現(xiàn):十進(jìn)制和ASCII; 碼相差 30h,即把這個(gè)十進(jìn)制數(shù)加上 30h,就轉(zhuǎn)換成 ASCII 碼,并把乘數(shù)的結(jié)果輸出dispdispexit:proc near;子函數(shù) disp 開始push axpush bxmov dl,aladd dl,30H;加法指令mov ah,2int 21hpop bxpop axretendp;子函數(shù) disp 結(jié)束;結(jié)束退出語(yǔ)句mov ah,4chint 21hcodeendsend startend start(二

10、) disp 子函數(shù)的流程圖如下開 始dis 函數(shù)給 disp 子函數(shù)賦處參數(shù)執(zhí)行 ascll 碼轉(zhuǎn)換指令輸出 ascll 碼值結(jié) 束六、設(shè)計(jì)過(guò)程中遇到的問(wèn)題及解決方法首先,遇到的問(wèn)題是計(jì)算機(jī)的識(shí)別問(wèn)題,計(jì)算機(jī)內(nèi)部只唯一認(rèn)識(shí) 2 進(jìn)制代碼,為了更好的存儲(chǔ)信息,計(jì)算機(jī)用十六進(jìn)制數(shù)存儲(chǔ)數(shù)據(jù),設(shè)計(jì)之初,我反復(fù)思考自己的算法沒(méi)有問(wèn)題,但是總是的不到想要的結(jié)果,利用 debug 命令查看內(nèi)存的情況也正確,后來(lái)在網(wǎng)上百度論壇上發(fā)帖找到答案,設(shè)計(jì)了兩個(gè)子函數(shù)來(lái)處理這個(gè)問(wèn)題,一個(gè)是dis 函數(shù),一個(gè)是disp 函數(shù),之后再編譯鏈接,執(zhí)行目的程序得到預(yù)計(jì)的結(jié)果。其次,就是子函數(shù)的解決問(wèn)題,編寫源代碼的的習(xí)慣問(wèn)題

11、,語(yǔ)句不是成對(duì)出現(xiàn),push和 pop 語(yǔ)句出錯(cuò), 導(dǎo)致運(yùn)行鏈接正確,而沒(méi)有正確的結(jié)果,原因是沒(méi)有按順序出?;蛘卟怀鰲#沟脙?nèi)存沒(méi)有正確釋放或者不釋放引起的。在仔細(xì)閱讀IBM_PC匯編語(yǔ)言這本書的子函數(shù)設(shè)計(jì)一章后,加大了對(duì)子函數(shù)的認(rèn)識(shí),并修改解決上面問(wèn)題。最后,問(wèn)題設(shè)計(jì)初,用到的是指定循環(huán)次數(shù),利用loop 語(yǔ)句來(lái)實(shí)現(xiàn)循環(huán),這樣結(jié)果就想一個(gè)長(zhǎng)方形的輸出,每個(gè)數(shù)相互乘了兩次,同時(shí)輸出兩次結(jié)果,所以得到的結(jié)果不像我們使用的九九乘法表。后來(lái)使用判斷跳轉(zhuǎn)指令來(lái)實(shí)現(xiàn)循環(huán),首先判斷內(nèi)循環(huán)值和外循環(huán)值的大小,決定是否繼續(xù)乘法,再通過(guò)外循環(huán)值和10 比較,決定繼續(xù)執(zhí)行程序還是退出程序。七、設(shè)計(jì)心得通過(guò)九九乘法

12、表輸出程序的編寫,首先我更加的認(rèn)識(shí)到計(jì)算機(jī)內(nèi)部的運(yùn)行,對(duì)計(jì)算機(jī)的認(rèn)識(shí)加深,計(jì)算機(jī)的內(nèi)存使用情況,它是怎樣運(yùn)行的有更大的理解。其次通過(guò)自己編寫源代碼,了解到匯編語(yǔ)言和高級(jí)編程的語(yǔ)言的區(qū)別,匯編語(yǔ)言更難理解和翻譯但是在計(jì)算機(jī)內(nèi)部卻容易被計(jì)算機(jī)識(shí)別,匯編的關(guān)鍵字很多,存儲(chǔ)器很有限, 合理的利用和釋放存儲(chǔ)器至關(guān)重要,每利用一個(gè)存儲(chǔ)器在后面用到時(shí)必須查看是否已經(jīng)釋放這個(gè)存儲(chǔ)器,否則就會(huì)出現(xiàn)編譯鏈接沒(méi)錯(cuò)誤,但是運(yùn)行結(jié)果有誤的情況。最后就是對(duì)debug 命令操作加深, debug 命令是用來(lái)輔助匯編語(yǔ)言軟件使用,也可以單獨(dú)編程。可以幫助我們查看內(nèi)存的具體的使用情況,-u 指令來(lái)查看部分內(nèi)存,-g 用來(lái)執(zhí)行程序,單步運(yùn)行可以使用 -t 命令,還可以跳轉(zhuǎn)到指定位置執(zhí)行,在有設(shè)計(jì)子函數(shù)的程序中,利用 debug 命令是非常有必要的。八 、結(jié)束語(yǔ)編程對(duì)算法的分析很重要,無(wú)論是用什么語(yǔ)言來(lái)編程,算法是不會(huì)變化的,設(shè)計(jì)一個(gè)良好的算法, 不僅可減少計(jì)算機(jī)內(nèi)存的使用, 還可以加快程序的運(yùn)行, 就像我在第一次設(shè)計(jì)的時(shí)候使用的循環(huán)結(jié)構(gòu)就很不合理, 使得的工作量加大一倍, 而且得到的結(jié)果還不是很滿意,在網(wǎng)上查看后把算法加以改進(jìn), 得到的結(jié)果基本上符合要求。 設(shè)計(jì)一個(gè)良好的程序就是要

溫馨提示

  • 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論