作業(yè)匯編課程設(shè)計_第1頁
作業(yè)匯編課程設(shè)計_第2頁
作業(yè)匯編課程設(shè)計_第3頁
作業(yè)匯編課程設(shè)計_第4頁
作業(yè)匯編課程設(shè)計_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、20計算機應用技術(shù)二班 趙春楊 貴州航天職業(yè)技術(shù)學院 匯編語言程序設(shè)計 題目:從鍵盤輸入一個字符串,然后按升序排序顯示輸出班 級 : 計算機應用技術(shù)(2)班學 號 : A123GZ0530102025 姓 名 : 趙 春 楊 指導教師 :周 慶 國 2013.12.5年匯編語言程序設(shè)計前言 匯編語言程序設(shè)計匯編大多是指匯編語言,匯編程序。把匯編語言翻譯成機器語言的過程稱為匯編。在匯編語言中,用助符(Memon)代替操作碼,用地址符號(Symbol)或標號(Label)代替地址碼。這樣用符號代替機器語言的二進制碼,就把機器語言變成了匯編語言。于是匯編語言亦稱為符號語言。用匯言編寫的程序,機器不能

2、直接識別,要由一種程序?qū)R編語言翻譯成機器語言,這種起 翻 譯作用的程序叫匯編程序,匯編程序是系統(tǒng)軟件中語言處理的系統(tǒng)軟件。 匯編語言(Assembly Language)是面向機器的程序設(shè)計語言。匯編語言比機器語言易于讀寫、易于調(diào) 試和修改,同時也具有器語言執(zhí)行速度快,內(nèi)存空間少等優(yōu)點,但在編寫復雜程序時具有明顯的局限性,匯編語言依賴于具體的機型,不能通用,也不能在不同機型之間移植。是能完成一定任務的機器指令的集合。 常說匯編語言過時,是 低 級 語 言,并不 是 說 匯 編 語 言 要 被 棄 之,相 反,匯編語言仍然是程 序 員 必 須 了 解 的 語 言,在 某 些 行 業(yè) 與 領(lǐng) 域

3、,匯 編 是 必 不 可 少 的,非 它 不 可 適 用 。只 是,現(xiàn) 在計算機最大的領(lǐng)域IT軟 件 ,也 是 我 們 常 說 的 Windows編 程,在 熟 練 的 程 序 員 手 里,使 用匯編語言編寫的程序,運行效率與性能比其它語言寫的程序是成倍的優(yōu)秀,但是代價是需要更長的時間來優(yōu)化,如果對計算機原理及編程基礎(chǔ)不扎實,實在是得不償失,對比現(xiàn)在的軟件開發(fā),已經(jīng)是市場化的軟件行業(yè),加上高級語言的優(yōu)秀與跨平臺,一個公司不可以讓一個團隊使用匯編語言來編寫所有的東西,花上幾倍甚至幾十倍的時間,不如使用其它語言來完成,只要最終結(jié)果不比匯編語言編寫的差太多,就能搶先一步完成,這是市場經(jīng)濟下的必然結(jié)果

4、。 但是,至今為止,還沒有程序員敢斷定匯編語言是不需要學的,一個不懂匯編語言的程序員,只是三流的程序員,這是大部分人的共識,同時,技術(shù)匯編語言(Assembly Language)是面向機器的程序設(shè)計語言精湛的匯編程序員,已經(jīng)脫離軟件開發(fā),擠身于工業(yè)電子編程中,一個電子工程師,主要開發(fā)語言就是匯編,c語言使用只占極少部分,而電子開發(fā)工程師是千金難求,在一些工業(yè)公司,一個核心的電子工程師比其它任何職員待遇都高,對比起來,一般電子工程師待遇是程序員的十倍以上。這種情況是因為現(xiàn)在學習匯編的人雖然也不少,但 是 真 正 能 學 到 精 通 的 卻不 多,它 難 學,難 用,適 用 范 圍 小 ,雖 然

5、 簡 單,但 是 過 于 靈 活 ,學習過高級語言的人去學習匯編比一開始學匯編的人難得多,但是學過匯編的人學習高級語言卻很容易,簡從繁易,繁從簡難。 總之,匯編語言是程序員的必修語言。目錄 CONTENTS 匯編語言處理數(shù)據(jù) 前言一、提出需求 . 6 1.1 匯編語言簡介 . 6 1.2 設(shè)計開發(fā)平臺 . 6 1.3 需求分析 . 7二、詳細設(shè)計 . 7 2.1 分析 . 2 2.1.1 數(shù)據(jù)輸入模塊 . 8 2.1.2比較排序模塊 . 9 2.1.3數(shù)據(jù)輸出模塊. 10 2.2 調(diào)試中的問題及解決方法. 11 2.3執(zhí)行過程 . 12總結(jié) . 14附 錄:程序代碼 . 15參考資料:. 20

6、 一提出需求1、提出設(shè)計要求 課題名稱:用匯編語言處理數(shù)據(jù) 課題功能:隨機從鍵盤輸入經(jīng)排序后,按照從升序的順序顯示出來。(注:輸入數(shù)據(jù)個數(shù)范圍可視具體情況更改)2、需要用到的知識點 掌握80X86匯編指令及中斷的使用方法; 掌握DOS系統(tǒng)功能調(diào)用; 掌握基本的數(shù)據(jù)處理方法(輸入、輸出、排序)1.1 匯編語言簡介匯編語言(Assembly Language)是面向機器的程序設(shè)計語言,采用助記符來編寫程序,比用機器語言的二進制代碼編程要方便些,在一定程度上簡化了編程過程。使用匯編語言能面向機器并較好地發(fā)揮機器的特性,比機器語言易于讀寫、易于調(diào)試和修改,同時也具有機器語言執(zhí)行速度快,占內(nèi)存空間少等優(yōu)

7、點,因而可以得到質(zhì)量較高的程序。1.2 設(shè)計開發(fā)平臺匯編語言集成編譯器(Visual Assembly 1.2版)是運行在DOS環(huán)境下,提供了編輯、編譯、運行、調(diào)試匯編語言程序的集成環(huán)境。目前支持MASM、TASM、MCS51三種編譯器。第一次使用時,要在選項菜單中選擇您所使用的編譯器類型及其目錄所在。masm為MASM類型的編譯器,其中:masm.exe為編譯器,link.exe為連接器; tasm為TASM類型的編譯器,其中:tasm.exe為編譯器,tlink.exe為連接器; mcs51為MCS51類型的編譯器,用于MCS51單片機匯編語言的編譯,其中:asm51.exe為編譯器,OH

8、.exe為目標文件轉(zhuǎn)十六進制文件(連接器選項選擇此文件)。本次設(shè)計使用的是MASM類型的編譯器。1.3 需求分析 本程序是通過匯編語言實現(xiàn)數(shù)據(jù)的排序及輸入、輸出的處理,適用于多數(shù)據(jù)排序的處理,程序結(jié)構(gòu)包含三部分:數(shù)據(jù)輸入、數(shù)據(jù)排序、數(shù)據(jù)輸出。設(shè)計思路是先用一段程序?qū)崿F(xiàn)成績的錄入,并暫存在數(shù)據(jù)表中,再將數(shù)據(jù)調(diào)出進行從大到小的比較,最后用DOS功能調(diào)用將完成排序的數(shù)據(jù)輸出顯示。二.詳細設(shè)計2.1 分析程序結(jié)構(gòu)分為三個功能模塊:數(shù)據(jù)輸入、數(shù)據(jù)排序、數(shù)據(jù)輸出。數(shù)據(jù)輸入模塊:用DOS調(diào)用的1號功能實現(xiàn)輸入并顯示。因輸入數(shù)據(jù)是以ASCII碼形式存放,所以還要對輸入數(shù)據(jù)進行處理,用AND指令將ASCII碼轉(zhuǎn)

9、換為壓縮BCD碼。并將所有輸入數(shù)據(jù)連續(xù)放入存儲單元中,為后面的數(shù)據(jù)處理做準備。數(shù)據(jù)排序模塊:將存儲單元的數(shù)據(jù)按照從大到小的順序排序。用冒泡法將數(shù)據(jù)表中的第一個數(shù)依次與后面的數(shù)兩兩相比,若小于則將兩數(shù)的地址互換,直到無地址交換為止。其中需設(shè)置一標志來判斷比較是否結(jié)束,因N個數(shù)據(jù)排序理論上需進行(N-1)×(N-1)次比較,但實際上不用比較這么多次,所以當標志位的值沒有發(fā)生變化時,即完成排序。輸出顯示模塊:用DOS調(diào)用的2號功能實現(xiàn)輸出顯示,因該功能是顯示字符,所以這部分也涉及數(shù)據(jù)轉(zhuǎn)換,即將壓縮BCD碼轉(zhuǎn)換成ASCII碼,并判斷數(shù)據(jù)是否輸出完整,再顯示。數(shù)據(jù)輸入模塊 數(shù)據(jù)排序模塊數(shù)據(jù)輸出

10、模塊結(jié)束開始完整流程圖如圖21所示。2.1.1 數(shù)據(jù)輸入模塊 初始化,提示輸入字符串開始輸入判斷是否為輸入結(jié)束標志轉(zhuǎn)換為BCD碼處理為十位并暫存轉(zhuǎn)換為BCD碼并暫存 放入數(shù)據(jù)表中輸入排序顯示提示輸入用戶在輸入信息的提示下,從鍵盤隨機輸入后,按照從升序的順序顯示出來。因輸入數(shù)據(jù)是ASCII碼,所以還要實現(xiàn)數(shù)據(jù)轉(zhuǎn)換,即將ASCII碼轉(zhuǎn)換為壓縮BCD碼。設(shè)一標志判斷數(shù)據(jù)是否輸入完成,一邊輸入一邊將當前數(shù)據(jù)保存到指定存儲區(qū)。數(shù)據(jù)輸入流程圖如圖22所示。 是 否 圖2-2 數(shù)據(jù)輸入部分2.1.2比較排序模塊 設(shè)置數(shù)據(jù)交換標志為0,依次從存儲單元中取數(shù)據(jù),比較后判斷是否需要進行位置交換,直到完成對所有數(shù)據(jù)

11、的比較,則比較結(jié)束。數(shù)據(jù)排序流程圖如圖23所示。輸入結(jié)束在輸入數(shù)據(jù)結(jié)尾加結(jié)束標志取數(shù)據(jù)表首地址將表中第一個數(shù)放入寄存器AL中設(shè)置數(shù)據(jù)交換標志為0地址加1,將當前地址中數(shù)據(jù)放入寄存器BL中判斷BL中是否為結(jié)束標志 是 否比較AL,BL中數(shù)據(jù)大小 交換當前地址與前一地址的數(shù)據(jù),數(shù)據(jù)交換標志置1 小將BL中數(shù)據(jù)放入AL中 大判斷數(shù)據(jù)交換標志是否變化 是 輸出否圖2-3 數(shù)據(jù)排序 2.1.3數(shù)據(jù)輸出模塊 在存儲單元中的數(shù)據(jù)是以壓縮BCD碼形式存放的,要將其顯示出來,需要把它們轉(zhuǎn)換為ASCII碼,再調(diào)用DOS的2號功能,所以在進行顯示前要完成數(shù)據(jù)轉(zhuǎn)換;因輸入數(shù)據(jù)個數(shù)不固定,是隨機的,故還需判斷數(shù)據(jù)是否已

12、完全輸出,再顯示。數(shù)據(jù)輸出流程圖如圖24所示。 排序結(jié)束 以壓縮BCD碼的形式讀取字符串到寄存器中 將不相同的字符串分離再顯示數(shù)字字符 顯示空格 提取下一個字符 判斷是否為最后一個字符 N 結(jié)束 Y 2.2 調(diào)試中的問題及解決方法 如圖2-5中文輸入注釋報錯 1、在集成環(huán)境下運行程序,編譯器出現(xiàn)了圖2-5的提示:系統(tǒng)提示未初始化寄存器,但檢查程序無誤。進入DOS環(huán)境編譯,我們可以 圖2-6中發(fā)現(xiàn)程序代碼后的“;”根本不存在,這是因為我們在中文方式下輸入了“;”,將“;”在英文環(huán)境下錄入程序即可正常執(zhí)行。 如圖2-6中文輸入注釋報錯 2、 在集成環(huán)境下運行程序,編譯器出現(xiàn)了圖2-6的提示:系統(tǒng)提

13、示data: 塊嵌套不匹配,一般是由于前后段名不相同、前后子程序不相同、需要配對出現(xiàn)的指令不一致等會出現(xiàn)該錯誤2.3執(zhí)行過程1、打開匯編軟件,輸入該程序的源代碼,進行編譯,出現(xiàn)如圖2-7.圖2-72、 運行該源代碼,出現(xiàn)如圖2-8.圖2-83、在DOS狀態(tài)下輸入該程序生成的可執(zhí)行文件名出現(xiàn)圖2-9的提示信息:圖2-94、隨機從鍵盤輸入經(jīng)排序后,按照從升序的順序顯示出現(xiàn)如圖2-10.圖2-10 總結(jié)經(jīng)過大量的查找資料和老師的不斷指點,我的課程設(shè)計成功完成,在這個過程中,我了解了匯編語言的功能,同時明白了其的工作原理并實現(xiàn)了其功能。 短短的四周畢業(yè)設(shè)計是我們對大學兩年的計算機知識的整體總結(jié),也是理

14、論與實踐的結(jié)合。在我們現(xiàn)有的理論知識下結(jié)合校園的實驗設(shè)備成功地完成了這次畢業(yè)設(shè)計。期間讓我收獲頗多。在知識技能方面我對面向機器的匯編語言的編寫的再次認識與學習,加深專業(yè)基礎(chǔ)。俗話說:“高樓基地起”,可見匯編語言的重要性。這次課程設(shè)計對我來說,要想成功地完成任務不是一件容易的事。我非常清楚我自己所學的8086匯編知識遠遠不足。在這次設(shè)計中困難重重,翻閱相關(guān)資料,復習以往教科書,網(wǎng)上搜找相關(guān)的信息和老師的細心講解是必不可少的。在這次設(shè)計中,讓我學到了新知識,也增長了見識,讓我對我所學的知識有所鞏固和提高,并且讓我對匯編語言有了更深的了解。在今后的日子里,我仍要不斷地充實自己,希望在我所學的專業(yè)有所

15、作為。 這次的課程設(shè)計在我與同學的共同努力下成功完成的。這里少不了教授我們的老師,是他授我們以漁,在認真負責的周老師帶領(lǐng)下,同學們的團結(jié)互助。我看到了團結(jié)的力量,團結(jié)的成效,讓我學到了重要的一堂社會課。腳踏實地、認真嚴謹、實事求是是學習應該有的態(tài)度,不怕困難、堅持不懈、吃苦耐勞是我國優(yōu)良傳統(tǒng)美德,這一次意志的磨練,是對我實際能力的一次提升,也會對我未來的學習和工作有很大的幫助。 在本次設(shè)計中,衷心的感謝我們的周老師,在我們設(shè)計過程中遇到的種種困難,全靠周老師的悉心指導和建議給了我們極大的幫助和支持,使我們受益匪淺,使得我們的動手能力和技能都有了很大的提高。所以,衷心的感謝周老師。附 錄:程序代

16、碼 ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<按ASCII編碼由小到大排序從鍵盤上輸入的字符串,然后輸出;(輸入以回車鍵結(jié)束);解:排序用冒泡法,按無符號數(shù),從小到大;<

17、<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<name string_sort;定義等價符unfinished equ 0FFFFh;標記排序任務沒完成FINISHED equ 0 ;標記排

18、序任務完成了;-stack segment para stack 'STACK' db 16 dup('MYSTACK ') ; 16*8 字節(jié)stack ends;-datas segment buffer db 51 ;可以輸入50個有效字符 count db 0 chars db 52 dup (0) crlf db 0dh,0ah,' huan ying shi yong',0dh,0ah,0dh,0ah,'$' crlg db 0dh,0ah,0dh,0ah,' sheng xu shu ru jie guo&#

19、39;,0dh,0ah,0dh,0ah,'$'datas ends;-codes segment assume cs:codes,ds:datas,es:datas,ss:stackstart: mov ax,datas mov ds,ax lea dx,crlf mov ah,9 int 21h mov es,ax ;從鍵盤接收一個串(回車結(jié)束) mov dx,offset buffer ;指定字符串存放的首地址 mov ah,0ah ;buffered keyboard input func int 21h ;call DOS ;排序(冒泡法) mov bx,UNFINIS

20、HED ;bx用來標記大循環(huán) xor cx,cx ;下面只使用cl,清高四位為0 mov cl,count ;取實際輸入的字符數(shù) cmp cl,1 ;檢查輸入的字符數(shù) jbe sort_finished ;如果輸入的字符數(shù)少于2個,就不需要排序Next_Round: cmp bx,FINISHED ;排序任務完成了嗎? je sort_finished ;完成了就跳出 mov bx,FINISHED ;先標記排序任務已完成 mov cl,count ;取實際輸入的字符數(shù) dec cl ;換算成比對的次數(shù)(比字符數(shù)要少1) xor si,si ;著si為輸出串的下標,初值為0GetNext: m

21、ov al,charssi ;從charssi讀一個數(shù)進al cmp al,charssi+1 ;al與下一個chars元素對比 jbe less ;如果小于或等于就跳轉(zhuǎn)(這里要使用無符號數(shù)判斷) xchg charssi+1,al ;否則,就交換 mov charssi,al ;用al中的新值回填原地址 mov bx,UNFINISHED ;標記要從頭進入下一輪掃描less: inc si ;調(diào)整數(shù)組下標變元 loop GetNext ;再取下一個字符 jmp Next_Round ;進入下一個輪回sort_finished: ;輸出新行 mov ah,9 mov dx,offset crlg int 21h ;顯示排過序的串 xor si,si ;著si為輸出串的下標,初值為0showNext: mov dl,charssi ;從輸出串中提取一個字符 cmp dl,0 ;檢查是不是結(jié)束符 je finish ;是就結(jié)束 mov ah,02 ;否則輸出到屏幕 int 21h inc si ;指向下一個字符 jmp showNext ;進入顯示下一個字符的輪回finish: ;退出 mov ax,4c00h int 21hcodes ends end start;劇終總結(jié)在本次課程設(shè)計讓我充分了解了匯編語言在實

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論