版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
PAGEPAGE4《匯編語言程序設(shè)計(實踐)》課程教學大綱一、課程的性質(zhì)和任務(wù)課程性質(zhì):《匯編語言程序設(shè)計(實踐)》是計算機類專業(yè)《計算機組成與匯編》課程的后續(xù)課程設(shè)計課程。本課程的任務(wù)是:通過課程設(shè)計,為學生提供一個既動手又動腦,獨立實踐的機會,將課本上的理論知識和實際有機的結(jié)合起來,鍛煉學生的分析解決實際問題的能力。提高學生實際編程的能力。本課程教學應(yīng)達到的基本要求是:利用學到的編程知識和編程技巧,通過布置具有一定難度的程序設(shè)計題目,幫助學生熟悉程序的設(shè)計、編寫與調(diào)試過程。二、時間安排本課程設(shè)計時間為一周(28學時),題目提前兩周布置,使學生作好準備。具體時間安排如下:1.分析設(shè)計準備階段(周一)2.編程調(diào)試階段(周二至周四)3.總結(jié)報告和書寫說明書階段(周三至周四)4.考核階段(周五)三、課題內(nèi)容:提供以下備選課題:1.動畫程序2.圖形程序3.樂曲演奏程序四、組織管理:對學生分組,每組1~2人,每組必須完成以上1、3或2、3兩題。五、考核評估:成績分優(yōu)、良、及格和不及格四等,從以下幾方面考核:1.程序設(shè)計的可用性,實用性,通用性,可擴充性(40%)2.學生的動手能力,創(chuàng)新精神(30%)3.總結(jié)報告(10%)4.答辯水平(20%)主編:王富榮主審:姚培華閃爍閃爍背景色前景色圖2彩色顯示屬性字節(jié)位:76543210BLRGBIRGB表3彩色文本方式顏色顏色IRGB顏色IRGB顏色IRGB顏色IRGB黑0000藍0001綠0010青0011灰1000淺藍1001淺綠1010淺青1011紅0100洋紅0101棕0110淺灰0111淡紅1100淡洋紅1101黃1110高亮白11112字符方式下的顯示緩沖區(qū) 顯示存儲器是顯卡的一部分,它與普通內(nèi)存統(tǒng)一編址。8086/8088系列微機在設(shè)計時根據(jù)不同的顯卡將顯示緩沖區(qū)放在不同的位置。對CGA、EGA、VGA顯卡,顯存起始地址是B800:0000H;對MDA,是B000:0000H。每個字符的ASCII碼和屬性碼字節(jié)存放于連續(xù)的兩個字節(jié)中。在80×25的文本顯示方式下,屏幕可有2000個字符位置,因每個字符需要兩個字節(jié)來表示,共需顯存4KB(實際只使用4000個字節(jié))。如果顯存有16KB,則可保存4屏幕的字符數(shù)據(jù),通常稱為4頁數(shù)據(jù)。對CGA、EGA、VGA的80列方式,0頁在顯存中的起始地址是B800:0000H,1頁為B800:1000H,2頁是B800:2000H,3頁是B800:3000H。每個顯示頁的前2000個字(4000個字節(jié))與屏幕上的位置一一對應(yīng),存放一個字符的ASCII值及屬性值,對應(yīng)關(guān)系如圖8.3所示。屏幕上某地字符位置在顯存中的偏移地址可由下列公式算出:Char_offset=Page_offset+((row×width)+column)×byte在這個公式中,Page_offset是頁偏移地址,width是每行可顯示的字符數(shù),在25×80的字符顯示方式下,width=80,byte是表示一個字符所用的字節(jié)數(shù),在字符顯示方式中,byte=2,row和column是相對于屏幕左上角位置(0,0)的行列坐標。3BIOS顯示中斷BIOS提供的INT10H顯示中斷,除了0號功能設(shè)置顯示模式外(見表2),還有以下一些功能調(diào)用。B800:0000H0001HB800:0000H0001H0002H0003H…009EH009FH…0F00H0F01H…0F9EH0F9FH字符ASCII字符屬性字符ASCII字符屬性…字符ASCII字符屬性…字符ASCII字符屬性…字符ASCII字符屬性0列至79列0行至24行圖3顯示存儲器與顯示屏上字符對應(yīng)關(guān)系對光標的控制僅在字符方式下有效(因為圖形方式下無光標)。(1)改變光標的大小功能號:AH=01H入口參數(shù):CH=光標的開始行(0~4位) CL=光標的結(jié)束行號(0~4位)(2)設(shè)置光標位置功能號:AH=02H入口參數(shù):BH=頁號(在當前屏幕顯示時,BH=0) DH=行號(Y坐標) DL=列號(X坐標)(3)讀光標位置功能號:AH=03H入口參數(shù):BH=頁號出口參數(shù):CH=光標的當前行號 CL=光標的當前列號 DH=光標的起始線 DL=光標的結(jié)束線 例1將光標移至屏幕的中間位置顯示字符。 分析:通常光標的位置是隨著每一次顯示逐個向后移動的,為了在屏幕的指定位置顯示字符,必須先將光標移至該位置。若工作在顯示方式02,03(80×25字符顯示方式),(0,0)是左上角坐標,(79,24)是右下角坐標。 程序如下: …MOV AH,02H MOV BH,0 MOV DH,12 MOV DL,40 INT 10H …2.清屏和卷屏清屏是屏幕顯示內(nèi)容清除。卷屏是指屏幕顯示內(nèi)容滾動。分上滾和下滾兩種。(1)上滾:顯示內(nèi)容向上移動,底端插入空白行。功能號:AH=06H入口參數(shù):AL=滾動行數(shù)(如AL=0,則指定屏幕上為空白) BH=新插入行的字符屬性 CH=滾動的左上角行號 CL=滾動的左上角列號 DH=滾動的右下角行號 DL=滾動的右下角列號(2)下滾:顯示內(nèi)容向下移動,頂端插入空白行。功能號:AH=07H入口參數(shù):與上滾的入口參數(shù)相同清屏操作可通過這兩個操作進行。當AL中的值為0時就是清屏。例2清除全屏幕操作的子程序CLR PROC NEAR PUSH AX PUSH BX PUSH CXPUSH DXMOV AH,06H ;6號功能MOV AL,00 ;指定屏幕內(nèi)容為空白,即清屏MOV BH,07H ;用正常顯示屬性為指定窗口清屏XOR CX,CX ;窗口的左上角坐標為(0,0)MOV DX,184FH ;窗口的右下角坐標為(24,79)INT 10HMOV DX,0 ;設(shè)置光標于左上角MOV AH,2INT 10HPOP DXPOP CXPOP BXPOP AXRET CLR ENDP3.在指定的頁中顯示字符/字符串(1)選擇當前顯示頁功能號:AH=05H入口參數(shù):AL=當前顯示頁號注:對于不同的顯示方式,可用頁號范圍不同。(2)讀當前顯示方式功能號:AH=0FH入口參數(shù):無出口參數(shù):BH=頁號 AH=字符列數(shù) AL=顯示方式(3)在當前光標位置上寫字符功能號:AH=09H入口參數(shù):AL=字符的ASCII碼值 BH=頁號 BL=字符的屬性 CX=寫入的字符個數(shù)注:0A號功能與09號基本相同,僅不需設(shè)置字符的屬性。(4)在光標位置處顯示字符串功能號:AH=13H入口參數(shù):ES=字符串所在段的段地址 BP=字符串首字節(jié)的偏移地址 CX=字符串的字節(jié)長度 DX=顯示字符串第一個光標位置(DH:行號,DL:列號) BH=頁號 AL=0時,字符串結(jié)構(gòu)為:字符,字符,…… 顯示完后,光標在字符串的第一個位置上。 AL=1時,字符串結(jié)構(gòu)為:字符,字符,…… 顯示完后,光標在字符串的最后一個字符的下一個位置上。 AL=2時,字符串結(jié)構(gòu)為:字符,屬性,字符,屬性,…… 顯示完后,光標在字符串的第一個位置上。 AL=3時,字符串結(jié)構(gòu)為:字符,屬性,字符,屬性,…… 顯示完后,光標在字符串的最后一個字符的下一個位置上。例3在屏幕上以藍底紅字顯示字符串“HELLO”程序如下:…STRING DB‘HELLO’N DB$-STRING…MOV AL,3 ;設(shè)置顯示模式為80*25文本方式MOV AH,0INT 10HMOV AX,SEGSTRING ;字符串段地址→ESMOV ES,AXMOV BP,PFFSETSTRING ;字符串首字符偏移地址→BPMOV CX,N ;N個字符MOV DX,0 ;從(0,0)處開始顯示MOV BL,14H ;顯示字符屬性為藍底紅字MOV AL,0 ;字符串格式為:字符,字符,……MOV AH,13H ;顯示字符串INT 10H…4.圖形操作(1)設(shè)置彩色組或背景顏色功能號:AH=0BH入口參數(shù):BH=0時,設(shè)置背景顏色; BH=1時,設(shè)置彩色組,即為顯示的像素點確定顏色組; BL=背景顏色(0~15)見表4或彩色組(0~1)。出口參數(shù):無表4圖形方式下背景顏色代碼數(shù)值顏色數(shù)值顏色數(shù)值顏色數(shù)值顏色00黑色04紅色08灰色0C淺紅色01藍色05絳色09淺藍色0D淺絳色02綠色06褐色0A淺綠色0E黃色03表色07淺灰0B淺青色0F白色(2)寫一個像素功能號:AH=0CH入口參數(shù):DX=行數(shù)(0~199或0~479) CX=行數(shù)(0~319或0~639) AL=彩色值(AL的D7為“1”,則采色值與當前點內(nèi)容作“異或”運算)出口參數(shù):無(3)讀一個像素功能號:AH=0DH入口參數(shù):DX=行數(shù)(0~199或0~479) CX=行數(shù)(0~319或0~639)出口參數(shù):AL=彩色值例8.12設(shè)置彩色圖形方式,在屏幕中央顯示一個帶條紋的矩形。背景顏色設(shè)置為黃色,矩形邊框設(shè)置為紅色,橫條顏色為綠色。程序如下:CODESEGMENT ASSUMECS:CODESTART:MOV AH,0 MOV AL,4;設(shè)置320×200,4色圖形方式 INT 10H MOV AH,0BH MOV BH,0MOV BL,0EH ;設(shè)置背景顏色為黃色INT 10HMOV DX,50 ;行號送DX,列號送CXMOV CX,80MOV AL,2 ;選擇顏色為紅色 CALL LINE1 ;調(diào)用子程序LINE1,顯示矩形左邊框MOV DX,50 ;修改行號、列號MOV CX,240CALL LINE1 ;調(diào)用子程序LINE1,顯示矩形右邊框MOV DX,50 ;修改行號、列號MOV CX,81MOV AL,2 ;選擇顏色為紅色CALL LINE2 ;調(diào)用子程序LINE2,顯示矩形上邊框MOV DX,150 ;修改行號、列號MOV CX,81CALL LINE2 ;調(diào)用子程序LINE2,顯示矩形下邊框MOV DX,60LP3:MOV CX,81 ;置矩形內(nèi)橫線初始位置 MOV AL,1 ;選擇橫條顏色為綠色CALL LINE2 ;調(diào)用子程序LINE2,顯示綠色橫線ADDDX,10CMP DX,150JB LP3 ;若行號小于150,轉(zhuǎn)LP3繼續(xù)顯示橫線 MOV AH,4CH ;返回DOSINT 21HLINE1 PROC NEAR ;畫豎線子程序 LP1: MOV AH,0CH ;寫點功能 INT 10H INC DX ;下一點行號增1 CMP DX,150 JBE LP1 ;若行號小于150,則轉(zhuǎn)LP1繼續(xù)顯示 RETLINE1 ENDPLINE2 PROC NEAR ;畫橫線子程序 LP2: MOV AH,0CH ;寫點功能 INT 10H INC CX ;下一點列號增1 CMP CX,240 ;若列號小于240,則轉(zhuǎn)LP2繼續(xù)顯示 JBE LP2 RETLINE2 ENDPCODE ENDSEND START…4動畫程序?qū)崿F(xiàn)動畫的過程一般為:先將圖形在起點顯示,延時一段時間,再擦除圖形,然后在新的位置顯示原圖形,再擦除圖形,如此反復,形成圖形的運動,即動畫。擦除圖形,可以通過清除相應(yīng)部分屏幕來實現(xiàn),也可用空字符在原位置重寫來實現(xiàn)。例5在屏幕上顯示一運動的汽車。▓▓▓▓▓←淺紅■■■■■■■ ←紅○○ ←棕,閃爍程序如下:CODESEGMENTASSSUMECS:CODESTART:WR MACRO CHA,ATR,NUM ;定義一個宏WR MOV AH,02H ;設(shè)置光標位置號 INT 10H ;DH、DL為行號、列號 MOV AL,CHA ;AL中為顯示字符的ASCII碼值 MOV CX,NUM ;顯示字符個數(shù) MOV BL,ATR ;顯示字符的屬性 MOV AH,09H ;在當前光標位置寫字符 INT 10H ENDM MOV AX,0003H ;屏幕顯示方式設(shè)置為80×25字符方式 INT 10H S1: MOV SI,0A00H ;顯示起始坐標為10行,0列 S2: MOV DX,SIWR0DBH,0CH,5 ;顯示第一排 INC DH ;指向下一排 WR 0DBH,4,7 ;顯示第二排 INC DH ;指向下一排 INC DL ;指向下一列 WR 09H,8EH,1 ;顯示第三排的第一個符號 ADD DL,4 WR 09H,8EH,1 ;顯示第三排的第二個符號 CALL DEALY ;延時一段時間 MOV DX,SI ;返回起始點 WR 0,0,5 ;清除第一排 INC DH WR 0,0,7 ;清除第二排 INC DH WR 0,0,6 ;清除第三排 MOV AH,1 ;讀鍵盤,判有無鍵按下? INT 16H JZ CONU ;無鍵按下繼續(xù)轉(zhuǎn)下一列顯示 MOV AH,4C ;有鍵按下,返回DOS INT 21H CONU: INC SI CMP SI,0A50H ;是最后一列嗎? JB S3 ;不是,繼續(xù)轉(zhuǎn)下一列顯示 JMP S1 ;是,從第一列開始重新顯示S3: JMP S2 DELAY PROC MOV CX,0000H ;延時子程序 LOOP $ RET DELAY ENDP CODEENDS ENDSTART5圖形程序BIOS中斷調(diào)用中提供了一些讀/寫像素等功能,可以利用“INT10H”調(diào)用有關(guān)功能實現(xiàn)屏幕繪圖。例6在屏幕上根據(jù)光標控制鍵繪圖,按Esc鍵,繪圖結(jié)束。分析:在屏幕上繪圖,可調(diào)用BIOS軟中斷INT10H的0CH號功能,其作用是在屏幕上寫一個像素,即畫一個點,再用鍵盤中斷讀光標鍵的鍵值,根據(jù)鍵值修改像素的行列值,得到所需的圖形。程序如下:CODESEGMENTASSUMECS:CODESTART:MOV AH,00H ;設(shè)置顯示模式為VGA640×480 MOV AL,12H INT 10H MOV CX,300 ;CX為橫坐標 MOV DX,240 ;DX為縱坐標WRITE: MOV AL,0AH ;設(shè)置點的顏色 MOV AH,0CH ;寫一個像素 INT 10H MOV AH,0 ;讀鍵盤按鍵值 INT 16H CMP AL,1BH ;是Esc鍵嗎? JZ EXIT ;是,退出 CMP AH,48H ;是“↑”鍵嗎? JNZ NUP ;不是,轉(zhuǎn)判斷是其它光標鍵 DEC DX ;是“↑”鍵,縱坐標減1 JMP WRITE ;轉(zhuǎn)至畫點 NUP: CMP AH,50H ;是“↓”鍵嗎? JNZ NDOWN INC DX JMP WRITENDOWN:CMP AH,4DH ;是“→”鍵嗎? JNZ NRIGHT INC CX JMP WRITENRIGHT:CMP AH,4BH ;是“←”鍵嗎? JNZ NLEFT DEC CX JMP WRITEEXIT: MOV AX,0003H ;恢復屏幕為字符顯示方式INT 10HMOV AH,4CH ;返回DOSINT 21HCODEENDS ENDSTART7樂曲程序:我們知道,樂曲是按照一定的高低、長短和強弱關(guān)系組成的音調(diào)。在一首樂曲中,每個音符的音高和音長與音頻和節(jié)拍有關(guān)。音符與音頻的關(guān)系如表1所示。表5音符與音頻關(guān)系音符聲音頻率音符聲音頻率12625392229464403330749443491523而節(jié)拍是保持該聲音頻率的時間(音長)。八分音符為半拍,四分音符為一拍,二分音符為兩拍,全音符為四拍。如果全音符的持續(xù)時間為1s,那么八分音符就為0.125s,四分音符為0.25s,二分音符為0.5s。PB0GATE2OUT2PB1揚聲器圖1揚聲器工作硬件示意圖放大器&8086/8088微機驅(qū)動揚聲器發(fā)聲的硬件電路如圖1所示。欲使微機的揚聲器能演奏樂曲,從該圖可知,必須給揚聲器輸入指定頻率和持續(xù)一定時間的脈沖。產(chǎn)生指定頻率的脈沖除采用例7.1所示方法外,還可以采用另外一種方法:利用8253可編程定時器的通道2輸出不同頻率的脈沖信號。8253定時器通道2工作于計數(shù)方式,輸入的計數(shù)脈沖其頻率為1192576Hz,設(shè)置計數(shù)初值為1192576/聲音頻率,那么8253通道2輸出的將是該聲音頻率的脈沖??刂?255A的PB端口的位1,使其置PB0GATE2OUT2PB1揚聲器圖1揚聲器工作硬件示意圖放大器& 例88253定時計數(shù)器產(chǎn)生指定頻率脈沖的子程序 FREQ PROC PUSH AXPUSH DXPUSH DI ;子程序的入口參數(shù),DI=聲音頻率MOV AL,0B6H ;8253的工作方式OUT 43H,ALMOV DX,12H ;DX:AX內(nèi)容1192576作為被除數(shù)MOV AX,3480HDIV DIOUT 42H,AL ;AX作為商,先送AL至計數(shù)器MOV AL,AH ;再送AH至計數(shù)器OUT 42H,ALPOP DIPOP DX POP AXRETFREQ ENDP而持續(xù)時間可由兩種方法實現(xiàn)。一種是利用CPU執(zhí)行循環(huán)指令來產(chǎn)生延遲時間,如:MOVCX,NDELAY:LOOP DELAY但對于8086、80286、80386、80486、pentium芯片來說,同一指令執(zhí)行的時間是不一樣的,因而它們產(chǎn)生的時間延遲也是不一樣,很難在不同型號計算機得到相同的延遲時間。可以采用另一種方法:利用硬件產(chǎn)生時間延遲。我們知道微機硬件61H端口的PB4,每隔15.8us觸發(fā)一次(與硬件型號無關(guān)),監(jiān)控該位的變化從而產(chǎn)生準確的時間延遲。例9硬件產(chǎn)生10ms的延遲子程序:DELAY PROC PUSH AX PUSH CX MOV CX,663 ;663*15.08=10000us=10msLOP1: IN AL,61H ;讀入PB口 AND AL,10H ;檢查PB1 CMP AL,AHJE LOP1 ;有變化嗎? MOV AH,AL LOOP LOP1 POP CX POP AX RETDELAY ENDP有了上述延時子程序,延時1s可用下列語句實現(xiàn):MOV BX,100WAIT: CALL DELAYDEC BXJNZWAIT 同樣,0.5s、0.25s的延時,只要將BX改為50、25即可。有了上述子程序,就可以利用揚聲器演奏樂曲了。例10用匯編語言編程實現(xiàn)“HappyBirthday”的樂曲演奏?!禜appyBirthday》樂譜如圖5所示。HappyBirthday1=FHappyBirthday1=F1.1|214|3-1.1|215|Hap-pybirth–daytoyou.Hap–pyb
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度個人股權(quán)贈與協(xié)議(公益捐贈)4篇
- 2025年度個人與公司承包旅游服務(wù)合同范本2篇
- 2025版明星肖像使用權(quán)獨家轉(zhuǎn)讓合同2篇
- 2025版?zhèn)€人二手房交易房屋抵押貸款服務(wù)協(xié)議
- 2025年度個人獨資企業(yè)數(shù)據(jù)安全管理與隱私保護合同3篇
- 2025年度個人向非營利組織貸款合同樣本2篇
- 2025年度大型橋梁鋼管腳手架施工勞務(wù)承包合同
- 2025-2030全球法庭口譯服務(wù)行業(yè)調(diào)研及趨勢分析報告
- 2025-2030全球環(huán)網(wǎng)配電單元行業(yè)調(diào)研及趨勢分析報告
- 2025年度個人汽車租賃合同違約責任條款
- 中央2025年國務(wù)院發(fā)展研究中心有關(guān)直屬事業(yè)單位招聘19人筆試歷年參考題庫附帶答案詳解
- 2024年09月北京中信銀行北京分行社會招考(917)筆試歷年參考題庫附帶答案詳解
- 外呼合作協(xié)議
- 小學二年級100以內(nèi)進退位加減法800道題
- 保險公司2025年工作總結(jié)與2025年工作計劃
- 2024年公司領(lǐng)導在新年動員會上的講話樣本(3篇)
- 眼科護理進修專題匯報
- 介入手術(shù)室感染控制管理
- 2024北京初三(上)期末英語匯編:材料作文
- 2024年大型風力發(fā)電項目EPC總承包合同
- 禮儀服務(wù)合同三篇
評論
0/150
提交評論