

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 目錄</b></p><p> 一、任務(wù)及要求:1</p><p> 二、課程設(shè)計(jì)簡(jiǎn)述及整體方框圖2</p><p> 1.總體設(shè)計(jì)思路簡(jiǎn)述2</p><p> 2.程序主框圖2</p><p> 三、課程設(shè)計(jì)原理分析3</p>
2、;<p> 四、設(shè)計(jì)中出現(xiàn)的問(wèn)題分析及解決方案3</p><p><b> 五、結(jié)論4</b></p><p> 六、體會(huì)與收獲5</p><p> 附錄1 程序源代碼5</p><p><b> 任務(wù)及要求:</b></p><p>
3、 將教材中實(shí)驗(yàn)七中的Power idea公司的數(shù)據(jù)按照以下格式在屏幕上顯示。</p><p> 編寫一個(gè)可以自行啟動(dòng)計(jì)算機(jī),不需要在現(xiàn)有操作系統(tǒng)環(huán)境中運(yùn)行的程序。程序功能如下:</p><p> 列出功能選項(xiàng),讓用戶通過(guò)鍵盤進(jìn)行選擇,界面如下:</p><p><b> 提示:</b></p><p> 功能1
4、:考慮ffff:0單元</p><p> 功能2:考慮硬盤C的0道0面1扇區(qū)</p><p> 功能3執(zhí)行動(dòng)態(tài)顯示當(dāng)前日期、時(shí)間,顯示格式:年/月/日 時(shí):分:秒按下ESC鍵后,返回到主選單</p><p> 功能4:可更改當(dāng)前日期時(shí)間,更改后返回到主選單。</p><p> 以上兩個(gè)題目中選擇一個(gè)自行完成。</p>
5、<p> 我本次課程設(shè)計(jì)選擇的題目是:任務(wù)一。</p><p> 課程設(shè)計(jì)簡(jiǎn)述及整體方框圖</p><p><b> 總體設(shè)計(jì)思路簡(jiǎn)述</b></p><p> 設(shè)置六個(gè)子程序,其中divdw和show_str是被重復(fù)使用的,divdw用于將十六進(jìn)制數(shù)轉(zhuǎn)換為字符,show_str用于顯示字符數(shù)據(jù),show_year,show
6、_income,show_employee,show_wage分別用于將年份,收入,員工數(shù),人均工資在dos窗口顯示。</p><p><b> 程序主框圖</b></p><p><b> 課程設(shè)計(jì)原理分析</b></p><p> 運(yùn)用多種尋址方式、多重循環(huán)、棧、div指令、多種轉(zhuǎn)移指令等構(gòu)造六個(gè)子函數(shù)完成了將d
7、ata段中的數(shù)據(jù)分配到包含多個(gè)數(shù)據(jù)項(xiàng)的結(jié)構(gòu)型數(shù)據(jù)的顯示緩沖區(qū),和顯示緩沖區(qū)的每個(gè)字的顏色屬性和字符的設(shè)置,使代碼更加清楚,按功能對(duì)代碼進(jìn)行劃分也可以避免寄存器的沖突。</p><p> 設(shè)計(jì)中出現(xiàn)的問(wèn)題分析及解決方案</p><p> 編譯、連接正常,并生成可執(zhí)行文件,但執(zhí)行時(shí)出現(xiàn)錯(cuò)誤,可能是由于計(jì)算機(jī)設(shè)置有問(wèn)題,所以換另外一臺(tái)計(jì)算機(jī)執(zhí)行出結(jié)果。</p><p>
8、;<b> 結(jié)論</b></p><p><b> 體會(huì)與收獲</b></p><p> 剛開始對(duì)于程序設(shè)計(jì)沒有思路,但是在重新仔細(xì)鉆研了實(shí)驗(yàn)7、實(shí)驗(yàn)9、實(shí)驗(yàn)10以后,對(duì)于課程設(shè)計(jì)一的設(shè)計(jì)就順利很多了。不僅對(duì)于前十章的知識(shí)有了更深層次的理解,也明白了,一門計(jì)算機(jī)語(yǔ)言的學(xué)習(xí)確實(shí)離不開一步步腳踏實(shí)地的實(shí)踐。</p><p&g
9、t; 附錄1 程序源代碼</p><p> assume cs:code,ds:data,ss:stack</p><p> stack segment</p><p> db 32 dup(0) ;用來(lái)保存寄存器值 </p><p> stack ends</p><p> data segment&l
10、t;/p><p> db 32 dup(0) ;用于存放臨時(shí)數(shù)據(jù)</p><p> db '1975','1976','1977','1978','1979','1980','1981','1982','1983'</p>&l
11、t;p> db '1984','1985','1986','1987','1988','1989','1990','1991','1992'</p><p> db '1993','1994','1995'&l
12、t;/p><p> ;以上是表示21年的字符串 4 * 21 = 84</p><p> dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514</p><p> dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000
13、,5937000</p><p> ;以上是表示21年公司總收入的dword型數(shù)據(jù) 4 * 21 = 84</p><p> dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226</p><p> dw 11542,14430,15257,17800</p>&l
14、t;p> ;以上是表示21年公司雇員人數(shù)的21個(gè)word型數(shù)據(jù) 2 * 21 = 42</p><p><b> data ends</b></p><p> code segment</p><p><b> start:</b></p><p> mov bx,stack<
15、/p><p> mov ss,bx;設(shè)置ss,指向stack 用于作為用戶控制的??臻g</p><p> mov sp,20H</p><p> mov ax,data</p><p> mov ds,ax;data數(shù)據(jù) 放在ds</p><p> mov ax,0B800H</p><
16、p> mov es,ax;用于指向顯存</p><p> call show_year;調(diào)用函數(shù)顯示年份</p><p> call show_income;調(diào)用函數(shù)顯示收入</p><p> call show_employee;調(diào)用函數(shù)顯示員工數(shù)</p><p> call show_wage ;調(diào)用函數(shù)計(jì)算并顯示工
17、資 </p><p> mov ax,4ch</p><p><b> int 21h</b></p><p> ;============== 1 ====================================== </p><p><b> ;顯示年份</b></p>
18、;<p> show_year:</p><p> mov cx,21 ;循環(huán)21次輸出年份</p><p> mov si,0 ;控制讀取的字符</p><p> mov dh,4 ;輸出行號(hào)</p><p> mov dl,3 ;輸出列號(hào)</p><p><b> do:
19、</b></p><p> push cx ;將原cx值入棧</p><p> mov di,0 ;控制輸出的位置</p><p> mov cx,4 ;循環(huán)4次輸出年份的每個(gè)字符</p><p><b> sy_s: </b></p><p> mov bl,[s
20、i + 32];取得要輸出的字符</p><p> mov bh,0CAH ;取得字符的屬性</p><p> push dx ;保存行和列信息</p><p> mov ax,0 ;根據(jù)輸出行號(hào)計(jì)算輸出位置</p><p> mov al,160 ;每行有160個(gè)字節(jié)</p>
21、;<p> mul dh ;行號(hào)和每行的字節(jié)數(shù)據(jù)相乘</p><p> mov bp,ax ;結(jié)果放在bp中</p><p> sub dl,1 ;根據(jù)列號(hào)計(jì)算輸出位置</p><p> mov al,2 ;第兩個(gè)字節(jié)表示一列</p><p> mul dl ;根據(jù)
22、要輸出的列位置計(jì)算</p><p> add bp,ax ;將行和列位置的值相加 </p><p> mov es:[bp + di],bx ;在對(duì)應(yīng)位置上輸出字符</p><p> pop dx ;得到原行列信息</p><p> inc si ;加1 用于取得下一個(gè)字符<
23、;/p><p> add di,2 ;加2在下了個(gè)位置輸出字符</p><p> loop sy_s ;執(zhí)行下一次取字符操作</p><p> pop cx ;彈出cx值用于下一次循環(huán)</p><p> inc dh ;要輸出的行號(hào)加1</p><p>
24、loop do ;執(zhí)行下一次循環(huán)</p><p> ret ;返回主程序 </p><p> ;================== 2 ============================ </p><p><b> ;顯示收入</b></p><p> show_incom
25、e: </p><p> mov dh,4 ;輸出行號(hào)</p><p> mov dl,13 ;輸出列號(hào)</p><p> mov cx,21 ;循環(huán)21次輸出收入</p><p> mov si,0 ;用于控制讀取位置</p><p><b> s_income:</b&
26、gt;</p><p> push cx ;保存cx值</p><p> push si ;保存si值</p><p> push dx ;將行號(hào)和列號(hào)信息保存</p><p> mov di,1EH ;控制零時(shí)數(shù)據(jù)的存放位置</p><p> mov ax,[32 + 84 + 0 + si] ;取
27、得所在操作的字符</p><p> mov dx,[32 + 84 + 2 + si] ;divdw子程序的參數(shù)在dx,ax中,ax存放數(shù)據(jù)的低16位,dx中存放高16位</p><p> mov cx,0AH ;要除的數(shù)在cx中</p><p> call divdw ;調(diào)用divdw子程序</p><p> p
28、op dx ;彈出行號(hào)和列號(hào)信息 </p><p> mov cl,0CAH ;字符的屬性在cl中</p><p> call show_str ;調(diào)用顯示字符串子程序</p><p> pop si ;彈出讀取位置信息</p><p> add si,4 ;指向下一個(gè)收入信息</p&
29、gt;<p><b> inc dh</b></p><p> pop cx ;彈出循環(huán)次數(shù)信息</p><p> loop s_income ;執(zhí)行下一次循環(huán)</p><p><b> ret</b></p><p> ;===================
30、3 ================================</p><p><b> ;顯示雇員數(shù)</b></p><p> show_employee:</p><p> mov dh,4 ;輸出行號(hào)</p><p> mov dl,26 ;輸出列號(hào)</p><p>
31、 mov cx,21 ;循環(huán)次數(shù)</p><p> mov si,0 ;用于控制讀取員工數(shù)信息</p><p> s_employee:</p><p> push cx ;保存循環(huán)次數(shù)信息</p><p> push si ;保存讀取員工數(shù)信息位置</p><p> push dx ;將行號(hào)和
32、列號(hào)信息保存</p><p> mov di,1EH ;用于指定零時(shí)數(shù)據(jù)的存放位置</p><p> mov ax,[32 + 84 + 84 + si] ;取得所在操作的字符</p><p> mov dx,0 ;divdw子程序的參數(shù)在dx,ax中,ax存放數(shù)據(jù)的低16位,dx中存放高16位</p><p> mo
33、v cx,0AH ;要除的數(shù)在cx中</p><p> call divdw ;調(diào)用divdw子程序 </p><p> pop dx ;彈出行號(hào)列號(hào)信息 </p><p> mov cl,0CAH ;字符的屬性在cl中 </p><p> call show_str
34、 ;調(diào)用顯示字符串子程序</p><p> pop si ;彈出讀取位置信息</p><p> add si,2 ;指向下一個(gè)員工數(shù)信息</p><p> inc dh ;輸出行號(hào)位置加1</p><p> pop cx ;彈出循環(huán)信息</p><p&
35、gt; loop s_employee ;執(zhí)行下一次循環(huán)</p><p><b> ret</b></p><p> ;=================== 4 =============================</p><p><b> ;計(jì)算并顯示工資</b></p><p>
36、 show_wage:</p><p> mov dh,4 ;輸出行號(hào)</p><p> mov dl,36 ;輸出列號(hào)</p><p> mov cx,21 ;循環(huán)次數(shù)</p><p> mov si,0 ;控制取員工數(shù)</p><p> mov bx,0 ;控制取收入</p&
37、gt;<p><b> s_wage:</b></p><p> push cx ;保存循環(huán)次數(shù)值</p><p> push bx ;保存取收入信息位置值 </p><p> push si ;保存取員工數(shù)信息位置 </p><p> push dx ;保存行號(hào)列號(hào)信息&l
38、t;/p><p> mov di,1EH ;用于指定零時(shí)數(shù)據(jù)存放位置</p><p> mov ax,[32 + 84 + 0 + bx ] ;取得所在操作的字符</p><p> mov dx,[32 + 84 + 2 + bx ] ;divdw子程序的參數(shù)在dx,ax中,ax存放數(shù)據(jù)的低16位,dx中存放高16位</p><p>
39、mov cx,[32 + 84 + 84 + si] ;取得所在操作的字符</p><p> ;計(jì)算員工人均收入 </p><p> push ax ;將被除數(shù)的低位壓棧保存</p><p> push dx ;將被除數(shù)的高位壓棧保存</p><p> mov dx,0 ;dx置0</p><p>
40、 pop ax ;將原dx值給ax </p><p> div cx ;執(zhí)行高位除法</p><p> mov bx,ax;商保存在ax,余數(shù)保存在dx;將商保存到bx中 </p><p> pop ax;取出原被除數(shù)低位</p><p> ;此時(shí),dx中的值為rem(H/N)*65536,ax中值為L(zhǎng)
41、</p><p> div cx;商高位在dx,低位在ax</p><p> mov dx,bx </p><p> ;調(diào)用函數(shù)輸出員工平均工資 </p><p> mov cx,0AH;要除的數(shù)在cx中</p><p> call divdw ;調(diào)用divdw子程序 </p>&l
42、t;p> pop dx ;彈出行號(hào)列號(hào)信息</p><p> mov cl,0CAH;字符的屬性在cl中 </p><p> call show_str ;調(diào)用顯示字符串子程序 </p><p> inc dh </p><p> pop si ;彈出取員工數(shù)位置信息</p&
43、gt;<p> add si,2 ;指向下一個(gè)員工數(shù)信息 </p><p> pop bx ;彈出收入位置信息</p><p> add bx,4 ;指向下一個(gè)收入信息 </p><p> pop cx ;彈出循環(huán)次數(shù)信息</p><p> loop s
44、_wage;執(zhí)行下一次循環(huán)</p><p><b> ret</b></p><p> ;=================== 5 ==========================</p><p> ; 完成16進(jìn)制到字符的轉(zhuǎn)換并保存在ds中</p><p><b> divdw:</b&
45、gt;</p><p> divdw_do: </p><p><b> push cx</b></p><p> push ax ;將被除數(shù)的低位壓棧保存</p><p> push dx ;將被除數(shù)的高位壓棧保存</p><p> mov dx,0 ;dx置0</p>
46、;<p> pop ax ;將原dx值給ax </p><p> div cx ;執(zhí)行高位除法;商保存在ax,余數(shù)保存在dx </p><p> mov bx,ax ;將商保存到bx中 </p><p> pop ax ;取出原被除數(shù)低位</p><p> div cx
47、;此時(shí),dx中的值為rem(H/N)*65536,ax中值為L(zhǎng)</p><p> mov cx,dx ;將最終的余數(shù)放在cx</p><p> mov dx,bx ;商高位在dx,低位在ax</p><p> add cx,30H ;1和'1'相差30H</p><p> mov [di],cl<
48、;/p><p><b> dec di</b></p><p> mov cx,ax ;判斷商是否為0,為0則完成了轉(zhuǎn)換 </p><p> jcxz end_div</p><p><b> pop cx</b></p><p> jmp divdw_do
49、</p><p><b> end_div:</b></p><p><b> pop cx</b></p><p><b> ret </b></p><p> ;=================== 6 ==============================
50、=========</p><p><b> ;實(shí)現(xiàn)字符的輸出 </b></p><p> show_str: </p><p> mov si,0;控制輸出位置</p><p><b> inc di</b></p><p><b> show:<
51、;/b></p><p> push cx ;將原cx值入棧</p><p> mov cl,[di] ;得到字符判斷是否為0,不為0執(zhí)行輸出操作</p><p> mov ch,[0]</p><p> jcxz show_ok ;字符為0執(zhí)行ok標(biāo)號(hào)處代碼</p><p>
52、; pop cx ;得到原cx中的值</p><p> mov bl,[di] ;取得要輸出的字符</p><p> mov bh,cl ;取得字符的屬性</p><p> push dx ;保存行和列信息</p><p> mov ax,0 ;根據(jù)輸出行號(hào)計(jì)算輸出
53、位置</p><p> mov al,160 ;80*25每行有80個(gè)字符</p><p><b> mul dh</b></p><p> mov bp,ax ;結(jié)果放在bp中</p><p> mov ax,0 </p><p> sub dl,1
54、 ;根據(jù)列號(hào)計(jì)算輸出位置</p><p><b> mov al,2</b></p><p><b> mul dl</b></p><p> add bp,ax ;將行和列位置的值相加 </p><p> mov es:[bp + si],bx ;在對(duì)應(yīng)位置上輸出字符&
55、lt;/p><p> pop dx ;得到原行列信息</p><p> inc di ;加1 用于取得下一個(gè)字符</p><p> add si,2 ;加2在下了個(gè)位置輸出字符</p><p> jmp show ;執(zhí)行下一次取字符操作 </p><p
56、> show_ok: ;字符為0返回主程序</p><p><b> pop cx</b></p><p><b> ret </b></p><p><b> code ends</b></p><p><b> e
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(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ǔ)言課程設(shè)計(jì)報(bào)告
- 匯編語(yǔ)言課程設(shè)計(jì)報(bào)告
- 匯編語(yǔ)言課程設(shè)計(jì)報(bào)告a
- 匯編語(yǔ)言課程設(shè)計(jì)
- 匯編語(yǔ)言課程設(shè)計(jì)
- 匯編語(yǔ)言課程設(shè)計(jì)報(bào)告---打字游戲
- 匯編語(yǔ)言課程設(shè)計(jì)安排
- 《匯編語(yǔ)言》課程設(shè)計(jì)報(bào)告--判斷閏年程序
- 匯編語(yǔ)言課程設(shè)計(jì)報(bào)告---顯示系統(tǒng)時(shí)間
- 《匯編語(yǔ)言》課程設(shè)計(jì)報(bào)告顯示系統(tǒng)時(shí)間
- 匯編語(yǔ)言推箱子課程設(shè)計(jì)
- 匯編語(yǔ)言課程設(shè)計(jì)----電子鬧鐘
- 打字游戲-匯編語(yǔ)言課程設(shè)計(jì)
- 匯編語(yǔ)言程序設(shè)計(jì)-課程設(shè)計(jì)
- 匯編語(yǔ)言程序設(shè)計(jì)課程設(shè)計(jì)
- 匯編語(yǔ)言動(dòng)畫設(shè)計(jì)課程設(shè)計(jì)
- 微機(jī)原理與匯編語(yǔ)言課程設(shè)計(jì)
- 匯編語(yǔ)言課程設(shè)計(jì)磁盤文件管理
- 匯編語(yǔ)言課程設(shè)計(jì)_提取系統(tǒng)時(shí)間
- 匯編語(yǔ)言課程設(shè)計(jì)《定時(shí)顯示系統(tǒng)》
評(píng)論
0/150
提交評(píng)論