編程輸出九九乘法表_第1頁
編程輸出九九乘法表_第2頁
編程輸出九九乘法表_第3頁
編程輸出九九乘法表_第4頁
編程輸出九九乘法表_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、摘要.九九乘法表輸出是應(yīng)用 masm.exe、link.exe、debug.exe等匯編語言軟件進(jìn)行編譯鏈接及執(zhí)行目的程序的方法來實(shí)現(xiàn)。并且認(rèn)識(shí)和利用 DOS系統(tǒng)下的 21h函數(shù)的 02功能號(hào)來進(jìn)行單個(gè)字符的輸出.程序設(shè)計(jì)的過程中用到循環(huán)和子函數(shù)的思想。模塊化的程序設(shè)計(jì)思想有利于源代碼代碼的編寫.錯(cuò)誤的查找和修改同時(shí)可以分步來調(diào)試程序減少工作量乘法表的輸出沒有乘數(shù)和被乘數(shù)只有乘積的結(jié)果輸出。關(guān)鍵詞:匯編語言程序設(shè)計(jì)、微機(jī)原理、九九乘法表、dos中斷系統(tǒng)導(dǎo)入語前 言匯編語言是一門程序設(shè)計(jì)語言,學(xué)習(xí)程序設(shè)計(jì)的思想與方法既是學(xué)習(xí)的重點(diǎn)也是難點(diǎn),課設(shè)的目標(biāo)就是要幫助讀者提高程序設(shè)計(jì)的能力,較深入地掌握

2、匯編語言程序設(shè)計(jì)的思想與方法。學(xué)習(xí)匯編語言時(shí),有些同學(xué)已經(jīng)學(xué)習(xí)過例如C語言等高級(jí)語言,將為我們理解程序設(shè)計(jì)的思想打下良好基礎(chǔ);但也可能從未學(xué)習(xí)過其他語言,雖然框框較少,但建立計(jì)算機(jī)語言與程序設(shè)計(jì)的概念將是一大難題。匯編語言是多類知識(shí)交叉的學(xué)科,一部分知識(shí)往往還連帶著其他的相關(guān)內(nèi)容,如果處理不好這些連帶的內(nèi)容,將影響學(xué)習(xí)者對(duì)當(dāng)前知識(shí)點(diǎn)的理解。但是如果先掃清外圍,例如先介紹CPU與存儲(chǔ)器的內(nèi)部結(jié)構(gòu)、數(shù)據(jù)形式,再介紹指令與指令系統(tǒng)、程序設(shè)計(jì)方法,雖然可以做到內(nèi)容單一,也容易接受,但教學(xué)未以程序設(shè)計(jì)為線索展開,可能在開始學(xué)習(xí)后相當(dāng)長一段時(shí)間里不接觸匯編語言程序設(shè)計(jì)的內(nèi)容,將令學(xué)習(xí)過程抽象無趣。本書考慮

3、到這些情況,采用了實(shí)踐先行的方法,以一個(gè)完整的程序?qū)嵗龑?dǎo),首先通過演示與動(dòng)手,對(duì)程序設(shè)計(jì)及一些基本概念、基本方法建立感性認(rèn)識(shí),從而屏蔽了一些相關(guān)知識(shí)帶來的干擾,在此基礎(chǔ)上再逐一展開。學(xué)習(xí)的過程除了理解還有記憶與模仿,人們往往都是從死記、模仿走向創(chuàng)新的,實(shí)踐引導(dǎo)的過程將為模仿創(chuàng)造條件,也提供了記憶的線索與內(nèi)容。以程以程序?yàn)榫€索展開,將使我們?cè)谡麄€(gè)學(xué)習(xí)過程中的每一步都目標(biāo)明確,主題清晰,基礎(chǔ)扎實(shí),在不知不覺中登上程序設(shè)計(jì)的顛峰。匯編語言的主要用途之一是涉及硬件的開發(fā),目前社會(huì)對(duì)具有一定硬件基礎(chǔ)的計(jì)算機(jī) 人才需求較旺,本書圍繞輸入、輸出程序設(shè)計(jì)介紹了若干常用芯片的結(jié)構(gòu)與程序設(shè)計(jì)方法,即加強(qiáng)了涉及硬

4、件的程序設(shè)計(jì)技術(shù)的教學(xué),也有助于提高設(shè)計(jì)實(shí)際應(yīng)用系統(tǒng)的能力。目錄 一、設(shè)計(jì)內(nèi)容與要求 . 1二、設(shè)計(jì)思想. 2三、工作原理. 3四、程序流程圖. 4五、程序運(yùn)行結(jié)果截圖. 5六、程序源代碼 . 6七、設(shè)計(jì)過程中遇到的問題及解決方法 . 10八、設(shè)計(jì)心得 . 11九、致謝. 12十、參考文獻(xiàn) . 13一、設(shè)計(jì)要求 創(chuàng)建文本文件:編寫源代碼.把文件保存在有 masm.exe link.exe等匯編軟件的文件夾下.文件后綴名改為 asm.比如九九乘法表輸出 .asm.。 開啟電腦在“開始”“運(yùn)行”輸入“ cmd”命令進(jìn)入 DOS的字符操作界面 編譯鏈接程序代碼查看源程序是否有錯(cuò)誤有錯(cuò)誤則加以修改。程

5、序編譯鏈接沒有錯(cuò)誤的情況下執(zhí)行目標(biāo)程序.查看結(jié)果的輸出情況并用 debug命令查看內(nèi)存的變化。 按要求撰寫設(shè)計(jì)報(bào)告。二、設(shè)計(jì)思想九九乘法表輸出程序主要用到一個(gè)嵌套循環(huán).和兩個(gè)過程.外層循環(huán)用 bl保存并記錄.外循環(huán)每執(zhí)行一次. bl的值加一。內(nèi)循環(huán)用bh保存并記錄.如果bh的值小于bl的值則執(zhí)行內(nèi)循環(huán).內(nèi)循環(huán)中每盒 bl比較一次.成立則值加一不成立則轉(zhuǎn)到換行子函數(shù)執(zhí)行.同時(shí)也比較外循環(huán)是否繼續(xù)滿足條件執(zhí)行.即比較 bl的值是否小于 10.小于就執(zhí)行外循環(huán).否則就結(jié)束程序。設(shè)計(jì) dis子函數(shù).把內(nèi)存中的 16進(jìn)制數(shù)轉(zhuǎn)換成 10進(jìn)制.設(shè)計(jì)的 disp子函數(shù)是把十進(jìn)制轉(zhuǎn)化成 ASCLL碼.并輸出乘積

6、.這樣得到的顯示的結(jié)果就是我們看到的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)。三、工作原理九九乘法表輸出是簡單的乘法.實(shí)現(xiàn)了19之間的數(shù)字相互相乘.并且把結(jié)果輸出.利用 masm.exe、link.exe debug.exe等匯編語言軟件。設(shè)計(jì)算法編寫源代碼.設(shè)計(jì)一個(gè)循環(huán)結(jié)構(gòu)來循環(huán)相乘.直到完成 9*9.比較退出程序。同時(shí)還設(shè)計(jì)到數(shù)數(shù)制的轉(zhuǎn)換問題.內(nèi)存中的數(shù)據(jù)是 16進(jìn)制.而我們習(xí)慣看到的是 10進(jìn)制數(shù).通過 16進(jìn)制轉(zhuǎn)換成 10進(jìn)制.在轉(zhuǎn)成通用 ascll碼輸出顯示.同時(shí)

7、還用到DOS的中斷調(diào)用。4、 程序流程圖 五、程序運(yùn)行結(jié)果截圖六、程序源代碼 data segment table dw 81 dup(0) data ends code segment assume cs:code,ds:data start: mov ax,data mov ds,ax mov di,offset table ;di指向table的首地址 00h mov bl,1 ;外循環(huán)值 mul_1: mov bh,1 ;內(nèi)循環(huán)值 mul_2: push cx ;壓棧 ;輸出第一個(gè)外循環(huán)值 mov dl,bl or dl,30h mov ah,02h int 21h ;輸出乘號(hào) mov

8、 dl,x mov ah,02h int 21h ;輸出第一個(gè)內(nèi)循環(huán)值 mov dl,bh or dl,30h mov ah,02h int 21h ;輸出等號(hào) mov dl,= mov ah,02h int 21h mov al,bh ;把bh的值賦給al寄存器中mulbl ;乘法指令al與bl相乘.結(jié)果放入al中 mov di,al ;di指向乘的結(jié)果 call dis ;調(diào)用子函數(shù)dis mov dl,0h ;輸出空格 mov ah,2 int 21h mov dl,0h ;輸出空格 mov ah,2 int 21h add di,2 ;di指向它的下一個(gè)地址 pop cx inc bh

9、 ;自加一指令 cmp bh,bl ;比較語句. bh小于bl執(zhí)行 jbe語句.否則執(zhí)行 ;call output_ctle語句 jbe mul_2 ;跳轉(zhuǎn)指令.返回mul_2處.實(shí)現(xiàn)循環(huán) call output_ctle ;程序調(diào)用指令 inc bl cmp bl,10 ;比較語句. bl小于 10執(zhí)行 jb語句.否則執(zhí)行程 ;序結(jié)束指令 jb mul_1 jmp exit ;無條件轉(zhuǎn)移指令 ; output_ctle函數(shù)功能.輸出回車換行 output_ctle proc Near push ax ;壓棧語句 push dx mov ah,02h ;dos中斷下的單個(gè)字符輸出功能 mov

10、dl,0dh ;0d是回車的ascll碼值 int 21h mov ah.02h mov dl,0ah ;0a是換行的 ascll碼值 int 21h pop dx ;出棧語句 pop ax ret output_ctle endp ;子函數(shù) 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 ax push dx mov dh,10 cmp ax,10 jb next1 ;ax的值低于10轉(zhuǎn)向 next1 d

11、iv dh ;ax的值高于 10除以 10.結(jié)果存在 ax中 call disp ;子函數(shù)調(diào)用語句 mov al,ah next1: call disp pop dx pop ax ret dis endp ;子函數(shù) dis結(jié)束.一. dis子函數(shù)的流程圖如下 開始主函數(shù)給子函數(shù)的參數(shù)10調(diào)用子函數(shù)disp A的值除以十結(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é)果輸出 disp proc near ;子函數(shù) disp開始 push ax push b

12、x mov dl,al add dl,30H ;加法指令 mov ah,2 int 21h pop bx pop ax ret disp endp ;子函數(shù) disp結(jié)束 exit: ;結(jié)束退出語句 mov ah,4ch int 21hcode ends end start end startdisp子函數(shù)的流程圖如下di函數(shù)給di子函數(shù)賦處參數(shù)執(zhí)行ascll碼轉(zhuǎn)換指令輸出ascll碼值結(jié)束六、設(shè)計(jì)過程中遇到的問題及解決方法首先.遇到的問題是計(jì)算機(jī)的識(shí)別問題.計(jì)算機(jī)內(nèi)部只唯一認(rèn)識(shí)2進(jìn)制代碼.為了更好的存儲(chǔ)信息.計(jì)算機(jī)用十六進(jìn)制數(shù)存儲(chǔ)數(shù)據(jù).設(shè)計(jì)之初.我反復(fù)思考自己的算法沒有問題.但是總是的不到想

13、要的結(jié)果.利用 debug命令查看內(nèi)存的情況也正確.后來在網(wǎng)上百度論壇上發(fā)帖找到答案.設(shè)計(jì)了兩個(gè)子函數(shù)來處理這個(gè)問題.一個(gè)是 dis函數(shù).一個(gè)是 disp函數(shù)之后再編譯鏈接.執(zhí)行目的程序得到預(yù)計(jì)的結(jié)果。其次.就是子函數(shù)的解決問題.編寫源代碼的的習(xí)慣問題.語句不是成對(duì)出現(xiàn). push和 pop語句出錯(cuò).導(dǎo)致運(yùn)行鏈接正確.而沒有正確的結(jié)果.原因是沒有按順序出?;蛘卟怀鰲?使得內(nèi)存沒有正確釋放或者不釋放引起的。在仔細(xì)閱讀 IBM_PC匯編語言這本書的子函數(shù)設(shè)計(jì)一章后.加大了對(duì)子函數(shù)的認(rèn)識(shí).并修改解決上面問題。最后.問題設(shè)計(jì)初.用到的是指定循環(huán)次數(shù).利用 loop語句來實(shí)現(xiàn)循環(huán).這樣結(jié)果就想一個(gè)長方形

14、的輸出.每個(gè)數(shù)相互乘了兩次.同時(shí)輸出兩次結(jié)果.所以得到的結(jié)果不像我們使用的九九乘法表。后來使用判斷跳轉(zhuǎn)指令來實(shí)現(xiàn)循環(huán).首先判斷內(nèi)循環(huán)值和外循環(huán)值的大小決定是否繼續(xù)乘法.再通過外循環(huán)值和10比較決定繼續(xù)執(zhí)行程序還是退出程序。七、設(shè)計(jì)心得通過九九乘法表輸出程序的編寫.首先我更加的認(rèn)識(shí)到計(jì)算機(jī)內(nèi)部的運(yùn)行.對(duì)計(jì)算機(jī)的認(rèn)識(shí)加深.計(jì)算機(jī)的內(nèi)存使用情況.它是怎樣運(yùn)行的有更大的理解。其次通過自己編寫源代碼.了解到匯編語言和高級(jí)編程的語言的區(qū)別.匯編語言更難理解和翻譯但是在計(jì)算機(jī)內(nèi)部卻容易被計(jì)算機(jī)識(shí)別.匯編的關(guān)鍵字很多.存儲(chǔ)器很有限.合理的利用和釋放存儲(chǔ)器至關(guān)重要.每利用一個(gè)存儲(chǔ)器在后面用到時(shí)必須查看是否已經(jīng)釋放這個(gè)存儲(chǔ)器.否則就會(huì)出現(xiàn)編譯鏈接沒錯(cuò)誤.但是運(yùn)行結(jié)果有誤的情況。最后就是對(duì) debug命令操作加深. debug命令是用來輔助匯編語言軟件使用.也可以單 獨(dú)編程??梢詭椭覀儾榭磧?nèi)存的具體的使用情況. -u指令來查看部分內(nèi)存. -g用來執(zhí)行程序.單步運(yùn)行可以使用 -t命令.還可以跳轉(zhuǎn)到指定位置執(zhí)行.在有設(shè)計(jì)子函數(shù)的程序中.利用debug命令是非常有必要的。致謝編程對(duì)算法的分析很重要.無論是用什么語言來編程.算法是不會(huì)變化的.設(shè)計(jì)一個(gè)良好的算法.不僅可減少計(jì)算機(jī)內(nèi)存的使用.還可以加快程序的運(yùn)行.就像我在第一次設(shè)計(jì)的時(shí)候使用的循環(huán)結(jié)構(gòu)就很不合理.使得的工作量加大一倍.而且得到的結(jié)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論