彙編課程設計---求0~100內的素數2

 

計算機原理與彙編語言

課程設計

 

題目名稱 :求100之內的素數2

 


 

姓名:

學號:

專業:計算機科學與技術

班級:

指導老師:

編寫日期:24/04/2019


 

目錄

 

目錄html

正文部分 3ios

一. 問題描述 3程序員

1.背景 3編程

2.基本功能要求 4ide

二. 系統設計 4oop

1. 題目的基本內容 4學習

2. 程序流程圖 5測試

三. 源代碼清單 8優化

.運行結果測試與分析 13ui

五.結論和心得 22

 


 

正文部分

一.問題描述

1.背景

彙編語言不像其餘大多數的程序設計語言同樣被普遍用於程序設計。在今天的實際應用中,它一般被應用在底層,硬件操做和高要求的程序優化的場合。驅動程序、嵌入式操做系統和實時運行程序都須要彙編語言。彙編語言的另外一個特色就是它所操做的對象不是具體的數據,而是寄存器或者存儲器,也就是說它是直接和寄存器和存儲器打交道,這也是爲何彙編語言的執行速度要比其它語言快,但同時這也使編程更加複雜,由於既然數據是存放在寄存器或存儲器中,那麼必然就存在着尋址方式,也就是用什麼方法找到所須要的數據。例如上面的例子,咱們就不能像高級語言同樣直接使用數據,而是先要從相應的寄存器AX、BX 中把數據取出。這也就增長了編程的複雜性,由於在高級語言中尋址這部分工做是由編譯系統來完成的,而在彙編語言中是由程序員本身來完成的,這無異增長了編程的複雜程度和程序的可讀性。

2.基本功能要求

因爲DOS的9號調用輸出的是ASCⅡ碼,所以咱們在輸出到屏幕的時候必定要將其先轉換爲ASCⅡ碼再使用9號調用輸出。考慮到ASCⅡ碼轉化爲數字較爲麻煩,所以能夠定義兩個組數據buf、buf1,其中buf用於存放1~99,buf1用於存放1~99的ASCⅡ碼。

這段程序運用的兩次loop循環分別實現把0~99送到buf、將0~99的ASCⅡ碼送到buf1。在循環完畢後,採用dos的9號調用將buf1的數據輸出到屏幕上,

完成這段程序後,跳到下一個模塊,即刪除合數保留素數並顯示模塊。而後跳轉到下一模塊。求和,最後到求平均數模塊。

 

 

二.系統設計

1. 題目的基本內容


設計題目:求100之內的素數
具體要求
1)求出這些素數。
2)在屏幕上顯示出求素數的動態過程(在屏幕上先顯示出100之內的全部數,再動態地刪去不符合要求的數,刪除的過程要明顯)。
3)計算這些素數的平均值(取整,四捨五入),以十進制形式輸出,並讓改制以紅色顯示。
4)數據的輸入和結果的輸出都要有必要的提示,且提示獨佔一行。

(5)要使用子程序。

2. 程序流程圖

2.1.顯示素數的流程圖

顯示0~100的流程圖

 

 

 

 

 

 刪除合數保留素數流程圖

 

 

 

 

 

 

 

求和流程圖

 

 

 

求平均數的流程圖

 

 

 

 

三.源代碼清單

data segment input1 db 0ah,0dh,'if you want to quit,please press Q/q! ' db 0ah,0dh,'if you want to print 0~99,please press any other key!',0ah,0dh,' $' input2 db 0ah,0dh,'if you want to quit,please press Q/q! ' db 0ah,0dh,'if you want to find the prime number ,please press any other key!',0ah,0dh,0ah,0dh,'$' input3 db 0ah,0dh,'if you want to quit,please press Q/q! ' db 0ah,0dh,'if you want to get the avreage of the prime numbers ,please press any other key!',0ah,0dh,0ah,0dh,'$' input4 db 0ah,0dh,'the avreage of the prime numbers is:','$' input5 db 0ah,0dh,'press any key to quit!','$' buf db 99 dup(?),0         ;用於存0~99 buf1 db 99 dup(?,?,','),0dh,0ah,'press any key to continue!',0dh,0ah,'$'  ;用於放1~99的asc碼 buf2 db ?,?,0dh,0ah,'$' data ends code segment assume ds:data,cs:code start: mov ax,data mov ds,ax lea dx,input1 mov ah,9 ;打印字符串input1 int 21h ;從鍵盤讀一字符但不回顯,判斷是否要退出 mov ah,08h int 21h cmp al,'Q' jE exit cmp al,'q' je exit lea bx,buf;把buf的有效地址給bx mov ax,0 mov al,1 mov cx,99 loop1: ;buf裏面存放0~100 mov [bx],al inc al ;al++ inc bx loop loop1 mov cx,99 lea si,buf1 ; lea bx,buf ; loop2: ;輸出0~100 mov ax,0 mov al,[bx] mov dl,10 div dl ;ax/dl ;轉換成ACSII碼 add al,30h ;十位asc碼 add ah,30h ;個位asc碼 mov [si],al mov [si+1],ah add si,3 add bx,1;下一個數 loop loop2 lea dx,buf1 mov ah,9

int 21h mov ah,08h int 21h                    ;顯示0~100 jmp bb exit: ;退出 mov ax,4c00h int 21h bb: ;判斷是否繼續輸出尋找素數的過程 lea dx,input2 mov ah,9

int 21h mov ah,08h int 21h cmp al,'Q' jE exit cmp al,'q' je exit mov cx,0 lea bx,buf lea si,buf1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; a1: mov dl,1 a2: and ax,0 mov al,[bx+3] dec al ;al-- inc dl ;dl++ cmp al,dl jz a3 inc al div dl cmp ah,0 jnz a2 mov [si+9],ah mov [si+10],ah jmp a4 a3: inc cx ;控制循環次數 a4: ;輸出篩選過程 lea dx,buf1 mov ah,9

int 21h mov ah,08h int 21h add si,3 inc bx mov dl,[bx+3] cmp dl,0 ;跳出循環 jnz a1 lea dx,input3 ;輸入提示input3(average) mov ah,9

int 21h mov ah,08h int 21h ;輸入提示 cmp al,'Q' jE exit cmp al,'q' je exit mov di,cx add di,3 ;計數送到di mov cx,99 and si,0 lea bx,buf1 loop3: mov al,[bx] ;十位 and ax,00ffh mov dh,[bx+1] ;個位 cmp al,0 jz c1 sub dh,30h sub al,30h mov dl,10 mul dl add al,dh add si,ax c1: ;求和求平均數 add bx,3 loop loop3 lea dx,input4;輸出平均值 mov ah,9

int 21h mov ah,08h int 21h mov ax,si ;和送到ax mov bx,di ;個數送到bx and bx,00ffh div bl inc al and ax,00ffh mov bx,10 and bx,00ffh div bl add al,30h add ah,30h ;將平均值轉化爲asc碼,al爲十位,ah爲個位 lea bx,buf2 mov [bx],al mov [bx+1],ah mov ah,09 mov al,0 mov bh,00 mov cx,2 mov bl,4

int 10h lea dx,buf2 mov ah,9

int 21h mov ah,08h int 21h lea dx,input5 mov ah,9

int 21h mov ah,08h int 21h exit1: mov ax,4c00h int 21h code ends end start 
View Code

 

.運行結果測試與分析

 

 

 

 


 

五.結論和心得

 

此次的計算機原理與彙編語言課程設計,求100之內的素數,在數學的學習中,咱們會常常接觸到素數這個概念。素數又稱質數。指在一個大於1的天然數中,除了1和此整數自身外,不能被其餘天然數(不包括0)整除的數。由於合數是由若干個質數相乘而得來的,因此,沒有質數就沒有合數,因而可知素數在數論中有着很重要的地位。比1大但不是素數的數稱爲合數。1和0既非素數也非合數。這個學期咱們恰好學了《彙編語言程序設計》這門課,而且初步的瞭解了彙編語言知識,而且能夠編寫簡單的代碼。所以,咱們能夠運用匯編語言來編寫程序,求取100之內的素數,動態的刪除合數,而且以紅色的字輸出素數的平均值。起初覺得這個課題比較簡單,經過查書和資料能夠很快作出來,來,結果開始作卻發現不是那麼回事,發現了不少的問題。

首先,課本上的知識還遠遠不夠,須要我借鑑別人的程序來提高本身對彙編語言的認識以及瞭解,而且不少複雜難懂的程序還沒法讀懂。其次,在編寫的過程當中,總會有各類各樣的問題出現,即便一個小小的標點符號錯誤也沒法將程序運行出來,這就須要咱們的耐心仔細去慢慢的調試而且發現錯誤在哪裏。第三,咱們對於彙編語言的認識還遠遠不夠,一學期的簡單學習,應用於編程還很吃力,dos調用、bios調用咱們接觸的很是很是少。總之,費了九牛二虎之力,總算是解決此次的課程設計。
此次課程設計給我帶來的收穫不少。第一,它讓我更進一步的瞭解了彙編語言,並用其來作一些實踐性的東西。第二,我在編寫和調試程序的時候,也鍛鍊了個人耐心和細心。第三,此次課程設計也鍛鍊了我查閱資料的能力。

 

原文出處:https://www.cnblogs.com/csushl/p/10765063.html

相關文章
相關標籤/搜索