




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、匯編語言課程實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)名稱課程設(shè)計(jì)2實(shí)驗(yàn)環(huán)境硬件平臺(tái):IntelCorei5-3210M操作系統(tǒng):DOSBoxinWindows軟件工具:MASM,VFloopy,MicrosoftVirtualPC2007實(shí)驗(yàn)內(nèi)容編寫一個(gè)可以自動(dòng)啟動(dòng)計(jì)算機(jī),不需要在現(xiàn)有操作系統(tǒng)環(huán)境中運(yùn)行的程序。該程序功能如下:(1) 列出功能選項(xiàng),讓用戶通過鍵盤進(jìn)行選擇,界面如下:1) resetpc;重新啟動(dòng)計(jì)算機(jī)2) startsystem;引導(dǎo)現(xiàn)有的操作系統(tǒng)3) clock;進(jìn)入時(shí)鐘程序4) setclock;設(shè)置時(shí)間(2) 用戶輸入“1”后重新啟動(dòng)計(jì)算機(jī)(提示:考慮ffff:0單元)。(3)用戶輸入“2”后引導(dǎo)現(xiàn)
2、有的操作系統(tǒng)(提示:考慮硬盤C的。道。面1扇區(qū))。(4) 用戶輸入“3”后,執(zhí)行動(dòng)態(tài)顯示當(dāng)前日期、時(shí)間的程序。顯示格式如下:年/月/日時(shí):分:秒進(jìn)入此項(xiàng)功能后,一直動(dòng)態(tài)顯示當(dāng)前的時(shí)間,在屏幕上將出現(xiàn)時(shí)間按秒變化的效果(提示:循環(huán)讀取CMO)S。實(shí)驗(yàn)步驟1. 系統(tǒng)啟動(dòng)初始化完成后最終調(diào)用19h,該中斷讀取軟盤的第一扇區(qū)或硬盤的第一扇區(qū)到0:7c00開始的512個(gè)字節(jié)的內(nèi)存空間中,并將cs:ip指向0:7c00執(zhí)行。2. 第一個(gè)段為安裝程序,負(fù)責(zé)將第二個(gè)段寫入第一扇區(qū),第三個(gè)段寫入2-17扇區(qū)。3. 第二個(gè)段是主引導(dǎo)程序,存在于軟盤第一扇區(qū),由BIOS的19h中斷讀取到0:7c00開始的內(nèi)存單元中
3、,并執(zhí)行0:7c00的第一行代碼。這一段的任務(wù)是將軟盤2-17扇區(qū)的數(shù)據(jù)讀入內(nèi)存,并執(zhí)行。(這里讀入到了2000:0開始的內(nèi)存中)。4. 第三個(gè)段是系統(tǒng)程序,存放所有引導(dǎo)所需的程序和子程序。5. 程序的匯編代碼如下:assumecs:setupsg;安裝程序;將引導(dǎo)所需的程序?qū)懭氲杰洷Psetupsgsegmentassumecs:setupsgsetup:;主引導(dǎo)程序安裝到第一扇區(qū)movax,initsgmoves,axmovbx,0moval,1movch,0movcl,1movdl,0movdh,0movah,3int13h;子程序安裝到從第2扇區(qū)開始的扇區(qū)movax,syssgmoves
4、,axmoval,15movcl,2movah,3int13h;安裝結(jié)束,返回movax,4c00hint21hsetupsgends;主引導(dǎo)程序;包含所有子程序的直接定址表,扇區(qū)加載程序,菜單initsgsegmentassumecs:initsginit:callloadsysmovax,2000hpushaxmovax,0pushaxretfloadsys:movax,2000h;軟盤數(shù)據(jù)讀取到2000:0moves,axmovbx,0moval,15;讀取的扇區(qū)數(shù)movch,0;0磁道m(xù)ovcl,2;2扇區(qū)movdl,0;0號(hào)驅(qū)動(dòng)器movdh,0;0面movah,2int13hreti
5、nitsgends;子程序;包含所有菜單需要調(diào)用的子過程syssgsegmentassumecs:syssg;菜單顯示功能menu:jmpnearptrmenushowmenudatadwoffsetmd0,offsetmd1,offsetmd2,offsetmd3,offsetmd4,offsetmd5md0db"Welcome",0md1db"1)resetpc",0md2db"2)startsystem",0md3db"3)clock",0md4db"4)setclock",0md5db&
6、quot;Copyright2010Haoran,rightsreserved.",0systabledwsys_restart,sys_disksys,sys_showclock,sys_setclockmenushow:movdh,5movdl,30movbp,0movax,csmovds,axmovcx,5menushow_s:pushcxmovsi,menudatabpmovcl,02hcallsys_showstraddbp,2adddh,2popcxloopmenushow_smovsi,offsetmd5movdh,23movdl,28movcl,02hcallsys_
7、showstr;處理用戶輸入sys_input:movah,0int16hmovbx,0movbl,almoval,30hsubbl,al;ascii轉(zhuǎn)換為序列號(hào)subbl,1;1-4轉(zhuǎn)換為0-3調(diào)用菜單功能cmpbx,0jbcyclecmpbx,3jacycleaddbx,bxcallwordptrsystablebx;cycle:jmpshortsys_input;重啟計(jì)算機(jī)sys_restart:movax,0ffffhpushaxmovax,0hpushaxretf;從硬盤引導(dǎo)sys_disksys:callclsmovax,0h;硬盤數(shù)據(jù)讀取到0:7c00moves,axmovbx,
8、7c00hmoval,1;讀取的扇區(qū)數(shù)movch,0;0磁道m(xù)ovcl,1;1扇區(qū)movdl,80h;c盤movdh,0;0面movah,2int13hmovax,0hpushaxmovax,7c00hpushaxretf;顯示時(shí)鐘sys_showclock:callclsjmpshortclockreadclockdata:clockstrdwoffsetcl1,offsetcl2,offsetcl3clockcolordb02hcl1db'00/00/0000:00:00',0cl2db'pressESCreturnmenu!',0cl3db'pre
9、ssF1changecolor!',0cltabledb9,8,7,4,2,0clockread:movsi,0;si指向'yy/mm/ddhh:mm:ss'的首地址movdi,0;di指向9,8,7,4,2,0的首地址movcx,6;clockread_s:pushcxmoval,cltabledi;out70h,alinal,71hmovah,al;almovcl,4shrah,cl;ahandal,00001111b;aladdah,30h;addal,30h;movbyteptrcl1si,ahmovbyteptrcl1si+1,aladdsi,3incdi循環(huán)
10、次數(shù)從CMO阱讀出年份的BC加中位讀出的數(shù)據(jù)中為年份的十位數(shù)中為年份的個(gè)位數(shù)把數(shù)值轉(zhuǎn)換為對(duì)應(yīng)的ASCII碼同上把讀出的時(shí)間寫入popcxloopclockread_sclockprint:movdh,6movdl,30movbp,0movax,csmovds,axmovcx,3clockprint_s:pushcxmovsi,clockstrbpmovcl,clockcolor0;將顏色值賦值給clcallsys_showstraddbp,2adddh,2popcxloopclockprint_smovah,1;調(diào)用16h中斷的1號(hào)功能(非阻塞)int16hcmpal,1bh;判斷是否為ESC
11、jeclockreturn;若是ESC回到菜單cmpah,3bh;判斷是否為F1jechangecolorjmpshortclockreadclockreturn:callclsmovah,0;16h中斷的1號(hào)功能不會(huì)清除鍵盤緩沖區(qū),下次讀取還會(huì)讀出int16h;調(diào)用0號(hào)功能清除一次jmpnearptrmenuchangecolor:incclockcolormovah,0;16h中斷的1號(hào)功能不會(huì)清除鍵盤緩沖區(qū),下次讀取還會(huì)讀出int16h;調(diào)用0號(hào)功能清除一次jmpnearptrclockread;設(shè)置時(shí)鐘sys_setclock:jmpshortsetclocksetclockdatad
12、b'Pleaseinputtimelike"yy/mm/ddhh:mm:ss"',0setsuccessdb'Setclocksuccessful!Pressanykeyreturn.',0setclock:callclsmovdh,6movdl,20movcl,02hmovax,csmovds,axmovsi,offsetsetclockdatacallsys_showstrcallgetstrcallsettimemovdh,10movdl,20movcl,02hmovax,csmovds,axmovsi,offsetsetsuccess
13、callsys_showstrmovah,0int16hcallclsjmpnearptrmenu;ds:si指向時(shí)間字符串settime:jmpshortsetingsettabledb9,8,7,4,2,0seting:movbx,0movcx,6settime_s:movdh,ds:siincsimovdl,ds:siaddsi,2moval,30hsubdl,alsubdh,alshldh,1shldh,1shldh,1shldh,1ordl,dhmoval,settablebxout70h,almoval,dlout71h,alincbxloopsettime_sret;子程序:接收
14、字符串getstr:pushaxgetstrs:movah,0int16hcmpal,20hjbnocharmovah,0callcharstackmovah,2movdh,8movdl,25callcharstackjmpgetstrsnochar:cmpah,0ehjebackspacecmpah,1chjeenterjmpgetstrsbackspace:movah,1callcharstackmovah,2callcharstackjmpgetstrsenter:moval,0movah,0callcharstackmovah,2callcharstackpopaxret;子程序:字符
15、串入棧,出棧和顯示;參數(shù):(ah)=功能號(hào),0入棧,1出棧,2顯示;ds:si指向字符??臻g,對(duì)于0號(hào)功能,(al)表示入棧字符;1號(hào)功能,(al)返回的字符,對(duì)于2號(hào)功能,(dh)(dl)字符串在屏幕顯示的行列位置charstack:jmpshortcharstarttabledwcharpush,charpop,charshowtopdw0charstart:pushbxpushdxpushdipushescmpah,2jasretmovbl,ahmovbh,0addbx,bxjmpwordptrtablebxcharpush:movbx,topmovsibx,alinctopjmpsre
16、tcharpop:cmptop,0jesretdectopmovbx,topmoval,sibxjmpsretcharshow:movbx,0b800hmoves,bxmoval,160movah,0muldhmovdi,axadddl,dlmovdh,0adddi,dxmovbx,0charshows:cmpbx,topjnenoemptymovbyteptres:di,''movbyteptres:di+1,02hjmpsretnoempty:moval,sibxmoves:di,almovbyteptres:di+2,''movbyteptres:di+1
17、,02hincbxadddi,2jmpcharshowssret:popespopdipopdxpopbxret;顯示0結(jié)尾的字符串;參數(shù):dh二行號(hào),dl二列號(hào),cl=顏色,ds:si指向字符串首地址sys_showstr:pushaxpushcxpushdxpushsipushbppushesmovax,0b800hmoves,axmoval,80*2;80*2*行號(hào)muldhmovdh,0adddx,dx;列號(hào)*2addax,dxmovbp,axshowstr_s:movch,ds:sicmpch,0jeshowstr_returnmoves:bp,chincbpmoves:bp,cli
18、ncbpincsijmpshortshowstr_sshowstr_return:popespopbppopsipopdxpopcxpopaxret;清屏cls:movax,0b800hmovds,axmovbx,0movcx,24*80*2cls_s:movbyteptrds:bx,0addbx,2loopcls_smovbx,1resetcol:movbyteptrds:bx,07haddbx,2loopresetcolretsyssgends;安裝過程的第一行指令endsetup6 .由于此程序涉及底層硬件的操作,而我們目前電腦的底層硬件及啟動(dòng)機(jī)制比實(shí)驗(yàn)內(nèi)容要復(fù)雜得多。因此我們將其放在相對(duì)簡(jiǎn)單的虛擬機(jī)中運(yùn)行。7 .首先我們需要用一個(gè)名為VFloopy的軟件來建立一個(gè)虛擬軟驅(qū),并使其盤符為A,這樣我們的程序就能將其內(nèi)容安裝到虛擬軟驅(qū)里。8 .然后我們還需要建
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫(yī)療決策支持系統(tǒng)在藥物研發(fā)中的應(yīng)用
- 醫(yī)療設(shè)備維修中的質(zhì)量風(fēng)險(xiǎn)控制
- 2025年高一政治老師工作總結(jié)模版
- 商戶調(diào)研分析和總結(jié)模版
- 代銷合同范例版本
- 中夫妻拆遷合同范例
- 小兒驚厥的臨床護(hù)理
- 醫(yī)療級(jí)汽車安全系統(tǒng)教育普及
- 醫(yī)療技術(shù)進(jìn)步與人才培養(yǎng)的互動(dòng)關(guān)系
- 走進(jìn)麗江第二課時(shí)教學(xué)設(shè)計(jì)
- 2025年動(dòng)車組機(jī)械師(高級(jí))職業(yè)技能鑒定參考試題庫(含答案)
- 第六單元《老爺爺趕鵝》課件 人教版音樂一年級(jí)下冊(cè)
- 酒店管理制度大全
- 天車司機(jī)考試試題及答案
- 國際學(xué)校綜合課程教研組計(jì)劃
- (2025)全國交管12123學(xué)法減分測(cè)試題庫及答案(帶圖版)
- 從財(cái)務(wù)視角看央企“一利五率”體系及實(shí)現(xiàn)路徑
- SJG 81-2020 政府投資辦公建筑室內(nèi)裝修材料空氣污染控制標(biāo)準(zhǔn)
- 學(xué)大講義六年級(jí)下冊(cè)數(shù)學(xué)(含答案)第一講 百分?jǐn)?shù)(二)及百分?jǐn)?shù)的復(fù)習(xí)
- 廣東省佛山市南海區(qū)2025年中考?xì)v史模擬試題(含答案)
- 2025年中國血型試劑行業(yè)競(jìng)爭(zhēng)格局及市場(chǎng)發(fā)展?jié)摿︻A(yù)測(cè)報(bào)告
評(píng)論
0/150
提交評(píng)論