匯編語言課程設計任務書_第1頁
匯編語言課程設計任務書_第2頁
匯編語言課程設計任務書_第3頁
匯編語言課程設計任務書_第4頁
匯編語言課程設計任務書_第5頁
已閱讀5頁,還剩16頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、匯編語言課程設計任務書一、課程設計目的1. 掌握匯編語言與高級語言的接u方法,正確編寫混合語言程序,掌握混合 語言程序的調試和運行;2. 掌握dos、bios系統功能調用,掌握基本的顯存讀寫技術;進一步了解 匯編接口的功能和用法,掌握利用定時器產生聲音的方法;3. 學會用匯編語言編寫一個較完整的實用程序,培養自己的動手操作能力;4. 學習匯編語言項目設計的基木思路和方法,編程、調試、撰寫報告等。二、任務內容:任務一:混合編程,將內存中的一個字符串的小寫字母轉換為大寫并輸出。也 可根據自己興趣自定題目。要求:1.分別運用混合編程的兩種方法:嵌入式編程、c程序調用匯編函數模 塊完成該任務;2. 也

2、可根據興趣自定題目,如排序、求階乘和等。任務二:以下題目二選一1. 顯示系統日期和時間要求:1.在屏幕特定位置顯示當前系統日期和時間;2. 顯示的日期和時間要求即時更新,妖跳動的時鐘、3. 可自定義電子鐘的顯示區域、顯示位置、背景和前景色或以 圖形化方式顯示。4. 當按下某個鍵,如“q”時,程序返回dos,數字鐘消失。2. 利用pc揚聲器演奏樂曲要求:1.在屏幕特定位置顯示樂曲名稱;2. 循環演奏樂曲(自選);3. 當按下某個鍵,如“q”時,音樂停止,程序返回dos。課程設計報告的要求1. 本次課程設計每位同學必須認真、獨立的完成課程設計的編程和調試。2. 課程設計報告要求使用a4紙打印,必須

3、有r錄。封面提供,n容要認真獨立完成。3. 課程設計報告內容一般應包含如下部分: 課程設計目的、內容; 每個任務的程序流程閣 程序淸單 調試結果及分析; 收獲、體會和建議。4. 課程設計結束同時上交課程設計報告,不得拖延。成績的評定1. 考勤(20分)2. 調試驗收(30分)3. 隨機回答指導教師的問題(20分)4. 課程設計報告(30分)5. 課程設計態度不認真,超過1/3時間不到者,不予及格。6. 完全拷貝他人,對設計內容一無所者或知之甚少者,一經發現,不予及 格。7. 課程設計拫告雷同或抄襲者,不予及格。8. 可以自主擴充功能,有創新可加分。匯編語言課程設計指導書一、混合編程預備知識(一

4、) 什么是混合編程多種程序設計語言間,通過和互調用、參數傳遞、共享數據結構和數據信 息而形成程序的過程就是混合編程。程序的大部分采用高級語言編寫,可以提 高程序的開發效率;在某些部分,利用匯編語言編寫,可以提高程序的運行效 率。(二) 混合編程方法匯編語言與c語言混合編程有4種實現方法:一是嵌入式匯編,即將匯編 語句或程序嵌入到c語言程序中;二是在c語言程序中調用匯編語言函數(匯 編函數以匯編程序源文件形式存在);三是在匯編語言程序屮調用c語言程序; 四是采用dos或bios調用函數。這里我們著重介紹前兩種方法。1. 嵌入式匯編(1) c語言中嵌入匯編語句的格式如下:asm操作碼操作數 <

5、;或換行 如以下c源程序文件“test.c” :1 iinclude <stdio.h>2 int x=10;3 main()4 5 inti=5byte ptr x ax, 20 i, ax6 asminc7 asranov8 asmmov9 printf(”i=dn”,x,i);10 getchar ();1”(2) 編譯連接方法含有嵌入式匯編語句的c程序的編譯連接,需要使用tc環境的命令行編 譯器tcc.exe,而tcc.exe在編譯時要調用tasm.exe,因此tc安裝目錄 下必須有匯編程序tasm.exe。但是在大多數的情況下此a澩屮是沒有 tasnlexe的。我們可以先

6、下載tasm 5.0進行安裝,然后將安裝目錄下的 tasm.exe直接拷w到tc安裝目錄下,就可以用了。tcc.exe的調用格式是:tcc options file s其中,files|為需要編譯或連接的文件,可有一個或多個。foptionl為各個參數選項,常用的有“-b”,用于指示源程序中使用了嵌入式匯編,則編譯命令為: tcc -id:tcinclude -b test注意:tcc區分大小寫,b必須為大寫。(3) 編譯連接過程假定tc2.0安裝目錄為c:turboc2, test.c文件在turboc2文件夾中,且該目 錄中含有tasm.exe。則編譯連接過程如下: 啟動命令提示符,使用c

7、dturboc2命令切換到tc目錄,輸入tcc命令: 運行該編譯命令,如下閣所示表示編譯連接成功:exes? c:tiido¥ssyst e>32c>d.turbo c uersion 2.0 copyright <c> 198?, 1988 borland international (test c:turbo assembler uersion 4.1 copyright <c> 1988, 1996 borland internationalbssembling file:test .asmerror messages:noneuapning

8、 messages: none tpasses:1henaining nenory:232k|turbo link uersion 2.0 copyright <c> 1987, 1988 borland international available nenory 396860 :turboc2>_ 此時在當前r榮不生成test.obj、test.exe文件,運行test.exe文件,結果如下:結果正確!2. 在c語言程序中調用匯編語言函數此方法要求分別編譯c語言程序和匯編語言程序,再將目標文件連接成- 個可執行文件。在這一過程中,匯編語言程序被看作函數,被c語言程序調用。

9、 c語言程序以匯編語言子程序名作為函數名調用匯編語言程序模塊。(1)編寫源程序匯編語言子模塊的過程應用public偽指令將其說明為“公用過程”。在 c語言程序中,也應對被調用的匯編語言程序模塊用extern聲明為“外部模例如:在c中調用匯編語言模塊完成兩個數的求和。 c文件(命名為addc.c)1 #include<stdio.h>2 main()3 4 extern int addup(int,int);5 int x=33z y=ss,z;6 z=addup(x,y);7 printf(nnx+y=%dn”'z);8 getchar();9 參數傳遞主要采用堆棧來進行。

10、對于tc中的小模式采用近調用,參數入 棧采用自右向左的順序,即變量y、變量x,且在棧中各占用2個字節。匯編語言文件(命名為addm.asm,完成的功能為求兩個整數之和)1 _text2 一3 public4 _addup5675 911 _addup12 一 text13 segment byte public 1 code assume cs:_text 一addupprocpushbpnovbp, spnovax,bp+4addax,bp+6popretendpendsendbp可以看出代碼段是以帶下劃線的標識符開頭的,代碼段的標識a_text, 這是由tc編譯程序所定好了的,如果不按照這

11、個格式書寫匯編代碼,調用就不 會成功。tc編譯器默認情況下,對外部標識符均要在其首部加下劃線,所以c 程序中調用的函數addup在這里也是以下劃線標出:_addup。(2)編譯過程 用masm宏匯編在命令行下對addm. asm匯編,匯編后生成一個模 塊文件addm.obj,然后將addm.obj復制到tc r錄下,以便于建立tc下的工程文件。 工程文件的建立。在tc集成環境下建一個新文件,其內容為:就只有以上兩行內容,寫完后保存為addcm.prj,說明了該工程包含了 addc.c和addm.obj兩個程序模塊。 對工程文件編譯連接。在tc環境中利用compilemake exe file命

12、令, 可將該文件編譯連接為addcm.exe。運行addcm.exe,結果如下:保護現場讀取系統日期、時間分別將時間的時、分、秒轉換力ascii碼在指定位置顯示期和時間恢復現場f1 >中斷返回圖2屮斷處理程序流程圖二、系統時間的獲取和顯亦(一)時間的獲取調用系統口期和時間,并將調用的口期和時間數轉換成ascii碼存在系統 內存區的字符串中。將存在系統內存區的日期和時間用字符串存入顯存區(顯 存的起始地址:b800:0000)并在合適的位置顯示出來。由于獲取了的系統時間 不會自動刷新,所以我們要設計成刷新的方式(如利用定時器中斷,中斷類型 號為1ch)來不斷獲取系統的時間,這樣就形成了會跳

13、動的電子鐘。流程閣如圖1、圖2所示。開始i獲取原1ch中斷向量保存原中斷向量設置新1ch的巾斷向量開定時器屮斷執行屮斷處理程序斷恢復原1ch的屮斷向量結束i圖1主程序流程圖(二)屏幕特定位置顯示字符 閱讀教材p.324-335頁內容。對應屏幕上的每個字符位置,顯存空間都有相應的存儲單元與之對應。對 應顯示在屏幕上的每個字符,在存儲器中由連續的兩個字節表示,一個字節保 存ascii碼,另一個字節保存字符的屬性。屬性字節對單色顯示和彩色顯示都 是冇效的。相應的值與屬性關系參考教材p.325圖9.5以及p.326圖9.6以及表 9.7o我們可以使用bois顯示中斷10h的各項功能來進行顯示字符的編程

14、。 首先,利用0號功能設置屏幕顯示方式:mov ax, 0003h;設置80x25彩色文本方式int joh設置光標位置:mov ah, 02h mov bh,顯示的頁號 mov dx,顯示的行、列 int joh 在光標位置顯示字符:mov ah, 09h mov bh,顯示的頁號 mov bl,字符屬性值 mov al,顯示的字符 mov cx,顯示次數int 10h、使pc發出音符聲音8253定時器內部有三個獨立的計數器:countero、counter 1 > counter2 (端 口地址為40h、41h、42h)和一個控制寄存器(端口地址為43h)。三個計數 器是分別編程的,

15、對任一個計數器編程時,首先要將控制字節寫入控制寄存器。 控制字節各位含義如圖1所示.r oo計數器鎖存操作 01只讀寫lsb 10只讀寫msb、11 讀寫 lsb,:isb'0二進制l 1 bcd5馬r 000 modeo 001 model xl0mode2 xll mode3 100mode4、101 mode500 選擇 counto 01countl10 選擇 count2 11無效sciscorl1rl0m2mlm0bcd圖1控制字節各位含義pc中,通過初始化控制寄存器(43h端口值為0b6h),使通道2用于揚 聲器發聲。使揚聲器發聲的驅動電路如圖2所示。8255 的 pb

16、端口 (61h)第1位8255 的 pb 端口 (6111)第0位1.19mhz 信號 計數值(地址42h )(地址43h )圖2微機揚聲器發聲電路原理圖放大器揚聲器通過使8255的pb端口的第1位輸出高電平打開與門,利用8253的2通 道發出不同頻率的脈沖信號,經過放大器放大后,便可驅動揚聲器發聲。通過 改變計數值的方法,使其產生不同頻率音調的聲音。音符與頻率值的對應關系 如表1所示。表1音符與頻率值對應關系表123爨456712345671131147165175196220247262294330349392440494523編程提示:音頻頻率的產生,可通過設置8253通道2的計數器值來

17、確定。 計數值=1.19318mhz/給定音符頻率=1234dch/給定音符頻率可用以下程序求計數值。mov db給定頻率值mov dx, 12hmov ax, 34dchdiv di得到的計數值,按低8位、高8位分別送通道2,程序如下:out 42h, almov al, ahout 42h, al樂曲是按照一定的高低、長短和強弱關系組成的音調,組成樂曲的每個音 符的頻率值和持續時間是樂曲程序發聲所需耍的兩個數據。音符的頻率可以從 表1屮獲得,音符的持續時間根據樂曲每個音符的節拍數來確定。在4/4 (四 四拍)中,四分音符為一拍,每小節4拍,全音符持續4拍,二分音符持續2 拍,四分音符持續1

18、拍,八音符持續半拍等。如果我們給全音符分配1秒的時 間,則二分音符的持續時間為0.5秒。10ms的延遲時間可以簡單地通過執行循環指令取得:wait1:mov cx, 2801delay: loop delay如果要產生與10ms成倍數的延遲時間,可執行該倍數次延遲10ms的指令。知道了音調與頻率和時間的關系,我們就可以按照樂曲的曲譜將每個音符 的頻率和持續時間定義成兩個數據表,然后編寫程序依次取出表中的頻率值送 通道2并用持續時間進行延時。兩只老虎1=c|1231兩只老虎,5- 6 5- 4 3 1一 k沒蚤眼睛,12313兩只老虎,跑5» 6 5- 4 3 1 | 1 一 

19、6;沒i耳朵,真4 5 - i 34得快, 跑得5 1 - | 15奇怪, 真奇如上面兩只老虎的樂曲,我們就可以建立如下數據表: mus一freq dw2 dup(262,294,330,262)dw 2 dup(330349r392)dw 2 dup(392,440,392,349,330,262)dw2 dup(262f392f262)dw-1mus_time dw8dup(100)dw 2 dup(100,100,200)dw2dup (75,25,75,25j00j00>dw 2 dup(100,100,200)三、附件附1:任務一參考程序清單1 芬include <std

20、io . ti>2 main() /* 主程序*/3 4 char *str=nthis started out as lowercase!”; printf("origin string:n%snn,str);6 asm mov sir str77 loop:/* c語言定義的標號*/9asmmov alr si10asmcmp alr 1 a 111asmjb next/*轉移到c的標號*/12asmcmp alr1z11314asm/* j a next不是a'到f之間的字符保持原樣15asmsub al,20h /*小寫字母轉換成大寫*/16asmmov si,

21、al17 next:18asm inc si19asm and alr al20/* c語言中,字符串用nullco)結尾/21asm jnz loop2223printf(nuppercase string:n%snh 9 str);24getchar();25 設計思路:對字符串中的字符進行逐個判斷是否為小寫字母,若是,則轉 換為大寫。小寫字母轉換為大寫字母的方法為減去20h。運行結果如下:c、c:turboc2a-exeorigin string:this started out as lowercase! uppercase string:this started out as low

22、ercase!附2:獲取日期時間參考程序清單注意:此程序沒宥設置為跳動的吋鐘以及確定時鐘顯示位置。data segment data endscount;dwinfodbfcurrenr r二me ls : , odh, c,ah, s ;提不/5datestrdb100-00-0000f , odh, oah,;日期s示信息:month-day-yeartimestrdb1 00 : 00 : c 0 f f 0dhr 0ahr f s f;時間s示信息:hour :minute: secondcode segmentassume cs:code,ds:data;main programma

23、in proc farstart:mov ax,data mov ds,ax,保存原中斷向呈mov alrich mov ah,35hint 21h;獲取ich中斷向量到es :bxpush es push bxpush ds;保存;設置新的中斷向量mov gxr offset intpro mov ax,seg intpro mov ds,axmov alr ich mov ahr 25hint 21h;設置中斷向量ds:dxpop dsin alr 21h;讀亡新異趕奇存器and al, l1l1l1l開弓 t 器=out 2ihr al,寫中靳=蘞吾存器sti,開中斷mov dir of

24、fffhdelay:mov siroffffhdeiayl:dec si jnz delay! dec di jnz delay loop s/等待中®s :;恢復ich原中斷向imainpopdxpopdsmoval,ichmovahr25hint21hmovax,4c00hint21hendp中斷處理程字intprointoro croc near 現場push ds push ax push ex push dxnov ax,data nov ds,ax stidec count jnz exit;並不提7fmov dx,offset nov ah,09h int 21h ca

25、ll dispdate call disptime mov count, 18,exit:clipop dx pop ex pop ax pop dsiretintpro endpinfo,顯示字符串;詞甲函數顯示曰期和時間;顯.示日期子程字dispdate參爛隱dispdateproc nearpush ax push ex push dx oush si;獲取系銳日期:入口: ah<-2ah,出口y:movah,2ahint21hmovax, exnovbxr 10leadatssr*9movcxr 4push dxxordxr gxdivbxadddlr30hmovsil.dlde

26、csiloop ypop gx nov alrcl xor ah,ah div bladd ax,3030hs cx<-yearz dh<-month,dl<-day;年汾轉4位ascii碼/指向字符串年份最后一位 ,年份4位,循壞4次,保存月曰;dx清零,保存余數即個位;商存ax,余數存dx,轉ascii碼,存dates tr字符串末尾;還原dx,處理彐;求曰的個位,存ah,十位存;分別轉ascii碼/存曰nov dh;處理弓;顯示日期字符蕓xorah, ahdivbl,求月的個位,存ah,十位存aladdax,3030h;分別轉ascii媽subsi# 3raovsi,a

27、x,存曰novdxr offset datestrraovah,09hint21hpopsipopdxpopexpopaxretdispdateendp;足示時間子裡序disptimedisptimeprocpush ax push ex push dx push si;獲取系統時間:入口: mov ahr 2ch int 21hnearah<-2chz 出口:ch<-hour, ck-ninute/ dh<-secondmov 10lea si,tinestrraov ch;處珪小時xor ahdiv bladd ax,3030hmov si9axadd si,3mov alr cl;處理分xor ahr ah div bladd ax,3030hmov isiz axadd sif 3mov alrdh;處理秒xor ahr ah div bladd ax# 3030h nov :si

溫馨提示

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

評論

0/150

提交評論