版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、匯編語(yǔ)言課程設(shè)計(jì) 實(shí)驗(yàn)題目:常駐內(nèi)存時(shí)鐘 學(xué) 院:石油化工學(xué)院 指導(dǎo)老師:魏寶武 班 級(jí):計(jì)算機(jī)科學(xué)與技術(shù)2班姓 名:高帥 學(xué) 號(hào): 21號(hào)地 點(diǎn):機(jī)房 時(shí) 間: 17、18周沈陽(yáng)工業(yè)大學(xué)匯編程序設(shè)計(jì)報(bào)告設(shè)計(jì)目的 運(yùn)用匯編語(yǔ)言編制程序以實(shí)現(xiàn)各種功能將所學(xué)匯編語(yǔ)言知識(shí)綜合起來(lái)運(yùn)用于實(shí)際設(shè)計(jì)要求能靈活運(yùn)用匯編語(yǔ)言進(jìn)行編程學(xué)習(xí)運(yùn)用調(diào)用中斷指令實(shí)現(xiàn)各種操作學(xué)習(xí)中斷服務(wù)程序設(shè)計(jì)方法了解com程序的基本格式 設(shè)計(jì)內(nèi)容本設(shè)計(jì)的程序結(jié)構(gòu)大致如下:1偽指令 進(jìn)行數(shù)據(jù)常量賦值(cursor字符顯示所在列值 attrib字符屬性值)2代碼段 由于本程序?qū)賑om類(lèi)型,所以只有一個(gè)段即代碼段。3數(shù)據(jù)變量定義、分配空間(
2、oldcur 為原光標(biāo)所在列值 old1c 原1c號(hào)中斷向量的入口地址 )4中斷服務(wù)程序 取代原中斷向量int 1ch。此中斷當(dāng)每次系統(tǒng)時(shí)鐘發(fā)出信號(hào)時(shí)發(fā)出中斷,運(yùn)行顯示時(shí)間的常駐內(nèi)存程序。中斷服務(wù)程序子程序:showbyte 顯示時(shí)間子程序,入口參數(shù)為bx。調(diào)用show、curmove子程序。showcolon 顯示時(shí)間中的“:”子程序,無(wú)入口參數(shù)。show 在顯示器的dos界面里顯示字符、數(shù)字,入口參數(shù)al。curmove 移動(dòng)光標(biāo)子程序,無(wú)入口參數(shù)。5中斷程序設(shè)置部分 將中斷服務(wù)程序設(shè)置成第1ch號(hào)中斷向量并常駐內(nèi)存。設(shè)計(jì)程序執(zhí)行過(guò)程分析 經(jīng)分析此程序?yàn)閏om類(lèi)型的程序,原因是本程序大致上
3、符合com程序格式。com 程序的匯編語(yǔ)言格式如下:name 模塊名(可有可無(wú))段名 segment assume 段寄存器地址說(shuō)明 org 100h start:jmp begin 數(shù)據(jù)空間預(yù)置 begin:指令1 指令2 指令n 段名 ends end startcom程序的源程序形式不允許分段,程序中用到的數(shù)據(jù)定義、存儲(chǔ)空間預(yù)置、堆棧區(qū)域以及程序代碼均在僅有的一個(gè)段內(nèi)。程序運(yùn)行的起點(diǎn)必須是100h。程序結(jié)束使用end。按一般編程的習(xí)慣,將要定義的數(shù)據(jù)空間預(yù)置放到了程序前面并用jmp指令跳過(guò)。在本程序中唯一不符合格式處為沒(méi)有設(shè)置程序運(yùn)行起點(diǎn)為100h。程序執(zhí)行過(guò)程中所用到的中斷向量表如下:
4、intah 功能調(diào)用參數(shù)返回參數(shù)102置光標(biāo)位置bh=頁(yè)號(hào)dh,dl=行,列103讀光標(biāo)位置bh=頁(yè)號(hào)ch=光標(biāo)起始位置dh,dl=行,列109在光標(biāo)位置顯示字符及其屬性bh=顯示頁(yè)al=字符bl=屬性cx=字符重復(fù)次數(shù)1a2讀實(shí)時(shí)鐘ch:cl=時(shí):分(bcd數(shù))dh,dl=秒:1/100秒(bcd數(shù))1c定時(shí)器控制的軟中斷,每次系統(tǒng)時(shí)鐘信號(hào)出現(xiàn)時(shí)發(fā)出中斷2125設(shè)置中斷向量ds:dx=中斷向量al=中斷類(lèi)型號(hào)2131結(jié)束并駐留al=返回碼dx=駐留區(qū)大小2135取中斷向量al=中斷類(lèi)型es:bx=中斷向量程序過(guò)程具體分析如下: 首先,程序開(kāi)關(guān)進(jìn)行了數(shù)據(jù)常量的定義,定義了數(shù)字顯示所在列為69(
5、45h)位于屏幕右側(cè),和數(shù)字顯示時(shí)的屬性值2fh.然后進(jìn)行代碼段的定義,com程序只有一個(gè)段,即代碼段 從start開(kāi)始jmp go 轉(zhuǎn)移指令為com程序固定格式,跳過(guò)數(shù)據(jù)空間預(yù)置和自定義的中斷服務(wù)程序以及其調(diào)用的子程序.轉(zhuǎn)到go.標(biāo)號(hào)go后面的程序?yàn)轫樞蚪Y(jié)構(gòu),進(jìn)行中斷程序的設(shè)置中作.先將cs的內(nèi)容壓棧送入dx中,將ax的內(nèi)容設(shè)置為351h.ah=35h為取中斷向量,al=1ch為中斷向量類(lèi)型,即也1ch號(hào)中斷向量的cs:ip.將bx->old1c,es->old1c+2,即old1c中存儲(chǔ)原1ch中斷向量的cs:ip.取標(biāo)號(hào)newint1c的偏移地址送入dx中,(程序開(kāi)始處已設(shè)置
6、ds:code)所以此時(shí),ds:dx中為新的int 1ch的中斷向量入口地址.設(shè)置ax內(nèi)容為251ch,ah=25h為設(shè)置中斷向量,al=1ch為中斷向量類(lèi)型,即設(shè)置int 1ch的中斷向量入口地址為ds:dx,調(diào)用int 21h,將newint1c的位置登記為1ch號(hào)中斷向量的入口地址.接下來(lái)要將新的中斷向量,設(shè)置為常駐內(nèi)存的程序.正常情況下,當(dāng)程序結(jié)束后,其所占內(nèi)存被dos收回,中斷服務(wù)程序即不可再用,若想讓程序退出后中斷服務(wù)程序所占內(nèi)存仍然保留,以使為后續(xù)程序提供中斷服務(wù).則必須讓中斷服務(wù)程序駐留內(nèi)存.dos的31h號(hào)功能調(diào)用可實(shí)現(xiàn)終止并駐留內(nèi)存.dx=駐留內(nèi)存節(jié)數(shù),al=退出碼,無(wú)出口
7、參數(shù).dx中要指出節(jié)數(shù)而不是字節(jié)數(shù),1節(jié)等于16個(gè)字節(jié),設(shè)需要駐留部分長(zhǎng)度為n個(gè)字符.計(jì)算公式為dx=(n/16)+1+16式中加加1是為了防止n不是16整數(shù)倍時(shí)將余數(shù)部分考慮上,再加16是因?yàn)閐os在啟動(dòng)應(yīng)用程序時(shí)會(huì)在程序前加上一段前綴psp (dos管理程序用的數(shù)據(jù)結(jié)構(gòu)).它需要和程序一塊駐留內(nèi)存.psp占256字節(jié),正好16節(jié).取標(biāo)號(hào)go的偏移地址存入dx,用dx減start處的偏移地址即得到需駐留內(nèi)存程序長(zhǎng)度,將dx再右移4位即實(shí)現(xiàn)除以16的操作再加11h(17),dx中便為常駐內(nèi)存需的節(jié)數(shù),調(diào)用int 21h的31h號(hào)功能,程序駐留內(nèi)存并終止.中斷服務(wù)程序部分:在本設(shè)計(jì)中的中斷服務(wù)程
8、序是將原int 1ch取代,換成顯示時(shí)鐘的中斷程序,而顯示時(shí)鐘的常駐內(nèi)存的中斷程序,需要實(shí)時(shí)調(diào)用,所以在取代原1ch號(hào)中斷后沒(méi)有將其恢復(fù),如果恢復(fù)原1ch的中斷程序?qū)o(wú)法連續(xù)的顯示當(dāng)前時(shí)間.中斷服務(wù)程序入口newint1c,保存標(biāo)志寄存器,保存ax,bx,cx,dx.段間調(diào)用原1ch中斷向量對(duì)應(yīng)的中斷程序.(對(duì)于int 1ch對(duì)誚的中斷程序不可缺少,刪除這條語(yǔ)句程序運(yùn)行不正常,甚至出現(xiàn)死機(jī)的現(xiàn)象)讀光標(biāo)位置.bh=0為顯示頁(yè)號(hào)(圖形方式)調(diào)用int 10h的3號(hào)功能返回ch,dh,dl=行,列.將dx內(nèi)容存入oldcur中設(shè)置光標(biāo)位置,同樣bh清0,將自定義cursor光標(biāo)位置給dx,即00行
9、,69列,調(diào)用int 10h的2號(hào)功能.調(diào)用int 1ah 2號(hào)功能,讀系統(tǒng)時(shí)鐘,返回ch:cl=時(shí):分,dh:dl=秒:1/100秒,返回參數(shù)均為bcd數(shù).秒,時(shí),分壓棧,將時(shí)分出棧存入bx,再將bx壓棧.調(diào)用showbyte,顯示時(shí)間數(shù)字子程序,入口參數(shù)bxshowbyte子程序: 保護(hù)bx壓棧,將bhàal,即al中為小時(shí)數(shù),al右移4位為小時(shí)的十位,加30h變成ascii碼調(diào)用show子程序顯示小時(shí)的十位,入口參數(shù)al.show子程序:保護(hù)ax,bx,cx壓棧.al中為欲寫(xiě)字符,bx=attrib設(shè)置bh=0顯示頁(yè)號(hào),bl=2fh欲寫(xiě)字符的屬性.cx=1為寫(xiě)字符次數(shù).調(diào)用in
10、t 10h 在光標(biāo)處顯示字符執(zhí)行后光標(biāo)位置不變,顯示小時(shí)的十位,恢復(fù)cx,bx,ax內(nèi)容,子程序返回.調(diào)用curmove子程序使光標(biāo)移到下一位置.curmove子程序:ax,bx,cx,dx寄存器保護(hù)調(diào)用int 10h 3號(hào)功能讀取光標(biāo)位置,返回dx,dl=列值,dl加1,光標(biāo)移向下一列.恢復(fù)dx,cx,bx,ax內(nèi)容.返回showbyte程序.恢復(fù)bx內(nèi)容為時(shí),分.取bh=小時(shí),送入al,取al低4位,即小時(shí)的個(gè)位.調(diào)用show顯示小時(shí)的個(gè)位數(shù)字,入口參數(shù)al,執(zhí)行過(guò)程同前.調(diào)用curmove移動(dòng)光標(biāo),過(guò)程同前.返回中斷服務(wù)程序.調(diào)用showcolon子程序調(diào)用顯示時(shí)間中的“:”字符.sho
11、wcolon子程序:將“:”送入al中調(diào)用show子程序在屏幕上.執(zhí)行過(guò)程同前.返回中斷服務(wù)程序.恢復(fù)bx內(nèi)容為時(shí),分,交換bh,bl的內(nèi)容.將分鐘的值放在bh中.調(diào)用showbyte子程序顯示分鐘.執(zhí)行過(guò)程同前.調(diào)用showcolon子程序顯示“:”, 執(zhí)行過(guò)程同前.把秒的值存入bx,用以顯示秒.調(diào)用showbyte子程序顯示秒,執(zhí)行過(guò)程同前.返回中斷服務(wù)程序.oldcuràdx,調(diào)用int 10h,2號(hào)功能設(shè)置光標(biāo)位置為運(yùn)行前的位置.恢復(fù)dx,cx,bx,ax,及標(biāo)志寄存器f的內(nèi)容.中斷返回,恢復(fù)現(xiàn)場(chǎng),中斷服務(wù)程序結(jié)束.設(shè)計(jì)程序運(yùn)行及結(jié)果 com程序執(zhí)行后,中斷服務(wù)程序設(shè)置為in
12、t 1ch 類(lèi)型,此類(lèi)型中斷被int 8h(8253/8254計(jì)數(shù)器)中斷調(diào)用,每秒執(zhí)行18.2次.即每次系統(tǒng)時(shí)鐘出現(xiàn)時(shí)發(fā)出中斷,所以當(dāng)com程序執(zhí)行后,馬上發(fā)生中斷執(zhí)行顯示時(shí)鐘的中斷服務(wù)程序,而中斷每秒18.2次,屏幕上的時(shí)鐘便在人眼來(lái)看是始終顯示在屏幕的右上角.程序執(zhí)行結(jié)果:在dos界面下的右上角顯示當(dāng)前時(shí)鐘執(zhí)行結(jié)果如下圖:程序流程圖如下:2開(kāi)始取中斷服務(wù)程序的入口地址送入dx數(shù)據(jù)常量賦值調(diào)用int 21 的25號(hào)功能將中斷服務(wù)程序設(shè)置為1c類(lèi)型中斷向量代碼段定義jmp go計(jì)算中斷服務(wù)程序的長(zhǎng)度送入dx數(shù)據(jù)空間預(yù)置調(diào)用int 21的31號(hào)功能使程序正常結(jié)束并常駐內(nèi)存中斷服務(wù)程序調(diào)用int
13、 21 的35號(hào)功能取1c的中斷向量地址 go:結(jié)束將原1c號(hào)中斷向量地址存入old1c中1 4中斷服務(wù)程序開(kāi)始調(diào)用showbyte程序顯示bh中的秒各寄存器保存oldsuràdx 調(diào)用int 10 2號(hào)功能光標(biāo)返回中斷前位置段間調(diào)用原int 1ch的中斷程序各寄存器內(nèi)容恢復(fù)調(diào)用int 21 的3號(hào)功能讀當(dāng)前光標(biāo)位置 返回行列值中斷返回恢復(fù)現(xiàn)場(chǎng)原光標(biāo)位置存入oldsor中斷服務(wù)程序結(jié)束調(diào)用int 21 1a號(hào)功能讀當(dāng)前時(shí)鐘.返回cx,dxshowbyte子程序開(kāi)始將dx壓棧,cxàbx,bx壓棧保護(hù)bx內(nèi)容保護(hù)調(diào)用showbyte子程序顯示時(shí)間數(shù)字,顯示小時(shí)將bh中內(nèi)容送入
14、al調(diào)用showcolon子程序顯示“:”“:”取al的高4位即時(shí)間的十位轉(zhuǎn)換為ascii碼交換bh,bl的內(nèi)容調(diào)用show子程序顯示al中的數(shù)字調(diào)用showbyte顯示此時(shí)bh的內(nèi)容,顯示分鐘調(diào)用curmove光標(biāo)移向下一位置調(diào)用showcolon顯示“:”將bh中的時(shí)間的個(gè)位送入al ,轉(zhuǎn)換成ascii碼dxàbx 開(kāi)始顯示秒5386dl加1,移向下一列調(diào)用show顯示數(shù)字調(diào)用int 10 2號(hào)功能,將光標(biāo)移向下一位置移動(dòng)光標(biāo)到下一位置各寄存器內(nèi)容恢復(fù)ret返回中斷服務(wù)程序ret 返回showbyte或showcolon程序showbyte結(jié)束返回中斷curmove結(jié)束show子
15、程序開(kāi)始showcolon子程序開(kāi)始al中為“:”各寄存器內(nèi)容保護(hù)調(diào)用show顯示al中的字符調(diào)用int 10 9號(hào)功能顯示al中字符調(diào)用curmove將光標(biāo)移向下一位置各寄存器內(nèi)容恢復(fù)ret 返回showbyte 或showcolon程序ret 返回中斷程序showcolon結(jié)束show子程序結(jié)束curmove子程序開(kāi)始各寄存器保護(hù)調(diào)用int10 2號(hào)功能讀光標(biāo)位置,取列值7設(shè)計(jì)程序代碼:cursor equ 45h attrib equ 2fhcode segmentassume cs:code,ds:codestart: jmp gooldcur dw ?old1c dw 2 dup(?
16、)newint1c: pushfcall dword ptr cs:old1cpush axpush bxpush cxpush dx xor bh,bhmov ah,3 ;讀光標(biāo)位置 int 10h ;顯示器驅(qū)動(dòng)程序 mov cs:oldcur,dx mov ah,2 ;設(shè)置光標(biāo)位置xor bh,bh mov dx,cursor ;自定義curaor光標(biāo)位置給dx;即第00行,第69列(45h) int 10h ;顯示器驅(qū)動(dòng)程序mov ah,2 ;讀cmos時(shí)鐘,即系統(tǒng)時(shí)鐘ch=小;時(shí),cl=分,dh=秒(都為bcd數(shù)) int 1ah ;時(shí)鐘驅(qū)動(dòng)程序 push dx push cx ;將c
17、x小時(shí)寄存器給bx,cx備用pop bx ;cx->bx push bx ;保護(hù)bx call showbyte ;調(diào)用顯示時(shí)間數(shù)字的子程序 call showcolon ;調(diào)用顯示":"的子程序入口參數(shù)al pop bx xchg bh,bl ;交換bh bl為的是顯示分 call showbyte call showcolon pop bx ;把dx給bx,現(xiàn)在開(kāi)始顯示秒 call showbyte ;調(diào)用顯示時(shí)間數(shù)字的子程序 mov dx,cs:oldcur ;調(diào)用光標(biāo)的地址mov ah,02h ;10號(hào)功能ah=2是設(shè)置光標(biāo)位置xor bh,bh ;bh清0,
18、為圖形方式int 10h ;10號(hào)功能調(diào)用 pop dx pop cx pop bxpop axiretshowbyte proc near ;顯示時(shí)間數(shù)字子程序入口參數(shù)bh push bx mov cl,04h mov al,bh ;先將小時(shí)的十位給al,比;如12點(diǎn),這個(gè)是轉(zhuǎn)變1的 shr al,cl ;將小時(shí)的數(shù)轉(zhuǎn)化為ascii碼add al,30h call show ;調(diào)用顯示子程序call curmove ;移動(dòng)光標(biāo)pop bx ;再將小時(shí)的個(gè)位給al,比如;12點(diǎn),這個(gè)是轉(zhuǎn)變2的mov al,bhand al,0fhadd al,30hcall show ;調(diào)用顯示子程序call curmove ;調(diào)用移動(dòng)光標(biāo)子程序 retshowbyte endpshowcolon proc near ;顯示時(shí)間中的":" mov al,':' call show call curmove ret showcolon endp curmove proc near ;移動(dòng)光標(biāo)子程序,就好像在;dos中,按空格,光標(biāo)后移一個(gè)位置 push axpush bxpush cxpush dxmov ah,3 ;讀光標(biāo)位置mov bh,0 ;bh為顯示頁(yè)號(hào)bh=0是圖形方式int 10h ;10h號(hào)功能是顯示器驅(qū)動(dòng)程
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024版翡翠手鐲授權(quán)合同范本3篇
- 中小學(xué)校長(zhǎng)職業(yè)聘用協(xié)議示例(2024版)版B版
- 2024版勞動(dòng)合同烏魯木齊
- 個(gè)人對(duì)個(gè)人汽車(chē)租賃合同樣本2024版B版
- 西華師范大學(xué)《工程地質(zhì)》2023-2024學(xué)年第一學(xué)期期末試卷
- 二零二五版城市公交出租車(chē)服務(wù)承包管理合同3篇
- 無(wú)錫學(xué)院《水聲學(xué)原理》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024版建筑工程保險(xiǎn)條款標(biāo)準(zhǔn)協(xié)議樣本版B版
- 二零二五版合同能源服務(wù)與節(jié)能技術(shù)研發(fā)合作協(xié)議3篇
- 二零二五年酒店客房用品綠色包裝設(shè)計(jì)采購(gòu)合同2篇
- 《血管活性藥物靜脈輸注護(hù)理》團(tuán)體標(biāo)準(zhǔn)解讀
- GB/T 3324-2024木家具通用技術(shù)條件
- NGS二代測(cè)序培訓(xùn)
- 《材料合成與制備技術(shù)》課程教學(xué)大綱(材料化學(xué)專(zhuān)業(yè))
- 小紅書(shū)食用農(nóng)產(chǎn)品承諾書(shū)示例
- 釘釘OA辦公系統(tǒng)操作流程培訓(xùn)
- 新生兒科年度護(hù)理質(zhì)控總結(jié)
- GB/T 15934-2024電器附件電線組件和互連電線組件
- 《工貿(mào)企業(yè)有限空間作業(yè)安全規(guī)定》知識(shí)培訓(xùn)
- 高層次人才座談會(huì)發(fā)言稿
- 垃圾清運(yùn)公司管理制度(人員、車(chē)輛、質(zhì)量監(jiān)督、會(huì)計(jì)管理制度)
評(píng)論
0/150
提交評(píng)論