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

下載本文檔

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

文檔簡介

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

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

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

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

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環(huán)境的命令行編 譯器tcc.exe,而tcc.exe在編譯時要調(diào)用tasm.exe,因此tc安裝目錄 下必須有匯編程序tasm.exe。但是在大多數(shù)的情況下此a澩屮是沒有 tasnlexe的。我們可以先

6、下載tasm 5.0進行安裝,然后將安裝目錄下的 tasm.exe直接拷w到tc安裝目錄下,就可以用了。tcc.exe的調(diào)用格式是:tcc options file s其中,files|為需要編譯或連接的文件,可有一個或多個。foptionl為各個參數(shù)選項,常用的有“-b”,用于指示源程序中使用了嵌入式匯編,則編譯命令為: tcc -id:tcinclude -b test注意:tcc區(qū)分大小寫,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文件,結(jié)果如下:結(jié)果正確!2. 在c語言程序中調(diào)用匯編語言函數(shù)此方法要求分別編譯c語言程序和匯編語言程序,再將目標文件連接成- 個可執(zhí)行文件。在這一過程中,匯編語言程序被看作函數(shù),被c語言程序調(diào)用。

9、 c語言程序以匯編語言子程序名作為函數(shù)名調(diào)用匯編語言程序模塊。(1)編寫源程序匯編語言子模塊的過程應(yīng)用public偽指令將其說明為“公用過程”。在 c語言程序中,也應(yīng)對被調(diào)用的匯編語言程序模塊用extern聲明為“外部模例如:在c中調(diào)用匯編語言模塊完成兩個數(shù)的求和。 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 參數(shù)傳遞主要采用堆棧來進行。

10、對于tc中的小模式采用近調(diào)用,參數(shù)入 棧采用自右向左的順序,即變量y、變量x,且在棧中各占用2個字節(jié)。匯編語言文件(命名為addm.asm,完成的功能為求兩個整數(shù)之和)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、個格式書寫匯編代碼,調(diào)用就不 會成功。tc編譯器默認情況下,對外部標識符均要在其首部加下劃線,所以c 程序中調(diào)用的函數(shù)addup在這里也是以下劃線標出:_addup。(2)編譯過程 用masm宏匯編在命令行下對addm. asm匯編,匯編后生成一個模 塊文件addm.obj,然后將addm.obj復制到tc r錄下,以便于建立tc下的工程文件。 工程文件的建立。在tc集成環(huán)境下建一個新文件,其內(nèi)容為:就只有以上兩行內(nèi)容,寫完后保存為addcm.prj,說明了該工程包含了 addc.c和addm.obj兩個程序模塊。 對工程文件編譯連接。在tc環(huán)境中利用compilemake exe file命

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

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

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

15、對任一個計數(shù)器編程時,首先要將控制字節(jié)寫入控制寄存器。 控制字節(jié)各位含義如圖1所示.r oo計數(shù)器鎖存操作 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控制字節(jié)各位含義pc中,通過初始化控制寄存器(43h端口值為0b6h),使通道2用于揚 聲器發(fā)聲。使揚聲器發(fā)聲的驅(qū)動電路如圖2所示。8255 的 pb

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

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

18、拍,八音符持續(xù)半拍等。如果我們給全音符分配1秒的時 間,則二分音符的持續(xù)時間為0.5秒。10ms的延遲時間可以簡單地通過執(zhí)行循環(huán)指令取得:wait1:mov cx, 2801delay: loop delay如果要產(chǎn)生與10ms成倍數(shù)的延遲時間,可執(zhí)行該倍數(shù)次延遲10ms的指令。知道了音調(diào)與頻率和時間的關(guān)系,我們就可以按照樂曲的曲譜將每個音符 的頻率和持續(xù)時間定義成兩個數(shù)據(jù)表,然后編寫程序依次取出表中的頻率值送 通道2并用持續(xù)時間進行延時。兩只老虎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奇怪, 真奇如上面兩只老虎的樂曲,我們就可以建立如下數(shù)據(jù)表: 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:任務(wù)一參考程序清單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/*轉(zhuǎn)移到c的標號*/12asmcmp alr1z11314asm/* j a next不是a'到f之間的字符保持原樣15asmsub al,20h /*小寫字母轉(zhuǎn)換成大寫*/16asmmov si,

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

22、ercase!附2:獲取日期時間參考程序清單注意:此程序沒宥設(shè)置為跳動的吋鐘以及確定時鐘顯示位置。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;保存;設(shè)置新的中斷向量mov gxr offset intpro mov ax,seg intpro mov ds,axmov alr ich mov ahr 25hint 21h;設(shè)置中斷向量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 現(xiàn)場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,顯示字符串;詞甲函數(shù)顯示曰期和時間;顯.示日期子程字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;年汾轉(zhuǎn)4位ascii碼/指向字符串年份最后一位 ,年份4位,循壞4次,保存月曰;dx清零,保存余數(shù)即個位;商存ax,余數(shù)存dx,轉(zhuǎn)ascii碼,存dates tr字符串末尾;還原dx,處理彐;求曰的個位,存ah,十位存;分別轉(zhuǎn)ascii碼/存曰nov dh;處理弓;顯示日期字符蕓xorah, ahdivbl,求月的個位,存ah,十位存aladdax,3030h;分別轉(zhuǎn)ascii媽subsi# 3raovsi,a

27、x,存曰novdxr offset datestrraovah,09hint21hpopsipopdxpopexpopaxretdispdateendp;足示時間子裡序disptimedisptimeprocpush ax push ex push dx push si;獲取系統(tǒng)時間:入口: 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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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

提交評論