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