《川大計算機綜合實踐[共19頁]》由會員分享,可在線閱讀,更多相關《川大計算機綜合實踐[共19頁](19頁珍藏版)》請在裝配圖網上搜索。
1、word格式整理版
四川大學網絡教育學院
計算機綜合實踐
校外學習中心: 綿陽廣播電視大學
學 生 姓 名: 張潤
專 業(yè): 電氣工程及其自動化
層 次: 專升本
年 級: 14 秋
學 號: DH114244008
實
2、 踐 時 間: 2016年3月20日
實驗
目的
1. 了解并逐步熟悉匯編語言的編輯方法及特點.
2. 復習8088匯編語言的段結構、常用的指令與偽指令、存儲空間的分配等。
3. 掌握匯編語言的編輯、匯編及連接的過程。
4. 了解并逐步掌握運用DEBUG進行調試匯編語言程序。
5. 借助DEBUG調試工具來發(fā)現匯編語言程序的錯誤所在并加以改正。
實驗
內容
算法
與流
程圖
程序
清單
3、運行
結果
調試
分析
和體
會
1、 進入DEBUG
方法1:在Windows開始菜單中單擊運行命令,直接在運行對話框中輸入"DEBUG"
方法2:在運行對話框中輸入"CMD"啟動DOS命令窗口后輸入"DEBUG"
方法3:在程序、附件、命令提示符,啟動DOS命令窗口后輸入"DEBUG"
2、DEBUG命令格式
DEBUG的每個命令都是一個字母,后跟一個或多個參數。下面對DEBUG命令作幾點說明。
·字母不分大小寫。
4、3;只使用16進制數,且不能帶后綴H。
·以空格或逗號作為命令各項之間的分隔符。分隔符只在兩個數值之間是必須的。
·可以用Ctrl-C或Ctrl-Break終止命令的執(zhí)行。
·若輸入的命令有語法錯誤,則提示“Error”,并用“^”指出錯誤位置。
3、 常用的Debug功能
用Debug的R命令查看、改變CPU寄存器的內容;
用Debug的D命令查看內存中的內容;
用Debug的E命令改寫內存中的內容;
用Debug的U命令將內存中的機器指令翻譯成匯編指令; 用Debug的T命令執(zhí)行一條機器指令
用Debug的A命令以匯編指令的格式在內存中寫了一
5、條機器指令
4、 用Debug的R命令查看、改變CPU寄存器的內容;
R命令用來顯示和修改寄存器的值,包括以下兩種格式。
(1) R
顯示所有寄存器和8個標志位的值,并反匯編CS:IP所指的指令。
(2) R<寄存器名>
顯示指定寄存器的值,并等待用戶鍵入新的值,按回車鍵結束R
命令。
5、 用Debug的D命令查看內存中的內容;
D命令可以查看內存中的內容,D命令的格式較多,只介紹本次實驗中用到的格式,8086/8088CPU能夠訪問1M內容,D命令可以顯示0000:0000H-FFFF:FFFFH中的任何一個單元的內存
如果想知道內存10000H處的內容,可
6、以用"d 段地址:偏移地址"的格式來查看,如輸入
-d 1000:0
使用 d 1000:9查看1000:9處的內容。
使用 d 1000:0 9查看1000:0-1000:9的內容
一進入Debug,可直接使用D命令直接查看,將列出Debug預設的地址處的內容
6、 用Debug的E命令改寫內存中的內容;
使用"e 起始地址 數據 數據 數據..."的格式來進行
如將內存1000:0-1000:9單元中的內容分別寫為0、1、2、3、4、
5、6、7、8、9
-e 1000:0 0 1 2 3 4 5 6 7 8 9
也可以采用提問方
7、式一個一個修改內存中的內容,如
輸入e 1000:0,按Enter鍵 輸入修改的數據,再按空格鍵輸入下一個要修改的數據,最后Enter鍵結束操作。
輸入字符串的格式:如-e 1000:10 1 'a' 2 "c++" 3 "IBM"將
輸入1 a 2 c++ 3 IBM到相應單元
向內容中寫入機器碼,如 b80100 (代表 mov ax, 0001), b90200(代表 mov cx, 002), 01c8(代表 add ax, cx),那么輸入-e 1000:0 b8 01 00 b9 02 00 01 c8就將該程序輸入內
8、容1000:0處,然后使用u命令-u 1000:0可以將內存單元中的內容翻譯成匯編指令。如果要執(zhí)行該程序,首先用r命令將cs修改成1000,ip修改成0,再執(zhí)行t命令,單步執(zhí)行程序。執(zhí)行T命令時,CPU執(zhí)行CS:IP執(zhí)行的指令并將IP加1.
7、 用Debug的A命令以匯編指令的形式在內存中寫了機器指令 示例:用A命令,輸入下列程序并運行
-a 1000:0
mov ax, 1
mov bx, 2
mov cx, 3
add ax, bx
add ax, cx
add ax, ax
直接按Enter鍵結果輸入。用r命令將cs修改成1000,ip修改成0,再執(zhí)行t命令,單步執(zhí)行
9、程序。執(zhí)行T命令時,CPU執(zhí)行CS:IP執(zhí)行的指令并將IP加1.
實驗二 設計匯編語言程序
一. 實驗題目 設計匯編語言程序
二. 實驗日期:2010/04/10
三. 實驗目的
字符串統(tǒng)計程序設計
雙字乘法程序設計
四. 實驗內容
1. 字符串統(tǒng)計。
在數據段中建立一個緩沖區(qū)BUFFER,變量VER,編程使得程序具
有如下功能:從鍵盤輸入一個子字符串存入VER,從鍵盤輸入包含一個或幾個子字符串的字符串存入BUFFER。統(tǒng)計BUFFER中的字符串含有多少個子字符串以及每個子字符串的位置。
2. 雙字乘法程序。
設計一個程序實現32位帶符號雙精度數乘法運算。由于只有8位和
10、16位的乘法指令。因此32位乘法運算是不能直接用指令實現的。但可以用16位乘法指令,通過 4次想乘然后把部分積想加。對于帶符號數,可以先根據絕對值求得積。然后判斷積的符號,若積為負數,應將其用補碼表示。
五、 程序設計
1、字符串統(tǒng)計程序設計
#include<iostream>
usingnamespacestd;;intmain();chara;intb=0,c=0,d=0,e=0;cout<<"請輸入一行任;a=cin.get();;while(a!='\n');if(a<0||a>=128);b++;;elseif(
11、a>='a'&&am;c++;;elseif(a=='');d+
using namespace std;
int main()
{
char a;int b=0,c=0,d=0,e=0,f=0;
cout<<"請輸入一行任意字符:";
a=cin.get();
while(a!='\n')
{
if(a<0||a>=128)
b++;
else if(a>='a'&&a<='z'||a>=
12、'A'&&a<='Z')
c++;
else if(a==' ')
d++;
else if(a>='0'&&a<='9')
e++;
else f++;
a=cin.get();
}
cout<<"總共有"<<b/2+c+d+e+f<<"個字符:"<<endl;
cout<<"中文"<<"\t"
13、<<"英文"<<"\t"<<"空格"<<"\t"<<"數字"<<"\t"<<"其他"<<endl;
cout<<b/2<<"\t"<<c<<"\t"<<d<<"\t"<<e<<"\t"&
14、lt;<f<<endl;
return 0;
}
分別統(tǒng)計出英文字母,空格,數字和其他字符的個數。
2、雙字乘法程序設計
data segment
x dw 1,2;被乘數
y dw 3,4;乘數
z dw 4 dup (?);積
data ends
code segment
assume ds:data,cs:code
start:
mov ax,data
mov ds,ax
mov ax,x
mul y
mov z,ax
mov z+2,dx
mov ax,x+2
mul y
mov z+4,ax
mov z+6,dx
mov
15、 ax,x
mul y+2
add z+4,ax
adc z+6,dx
mov ax,x+2
mul y+2
adc z+8,ax
adc z+10,dx
adc z+12,0
mov ax,4c00h
int 21h
code ends
end start
實驗三 8253定時器/計數器接口與數字電子琴
一、 實驗題目 8253定時器/計數器接口與數字電子琴
二、 實驗日期:2010/05/15
三、 實驗目的
改變定時器2的計數值來改變聲音頻率,通過編程來獲得聲調(頻率)和節(jié)奏(延時長短),使計算機演奏出樂曲來。
四、 實驗內容
設計程序讓微機演奏一段
16、簡單樂曲
利用DOS的鍵盤管理功能。將微機變?yōu)橐粋€具有簡單功能的電子琴(選作)。
五、 程序設計
硬件設計
利用實驗板上的8253計數/定時器和8255并行接口,定時器8253利用工作方式3產生一定頻率信號,通過可編程的并行外圍接口芯片8255控制頻率信號的通斷。
8255的A口設置為輸出,8255的A口的低兩位用來控制揚聲器驅動,當輸出端口的PA0位為“1”或為“0”時,將使控制驅動器的與門電路接通或關閉,使8253所發(fā)出的音頻信號能到達驅動器或被阻斷。這樣通過控制PA0的變化,可使揚聲器接通和斷開,控制揚聲器是否能發(fā)出聲音。此外,通過控制PA0的通斷時間,就能發(fā)出不同的音長。82
17、55的PA1位為“1”時,控制8253定時器產生驅動揚聲器發(fā)聲的音頻信號,該位為“0”則不發(fā)信號。8253有三個定時器,分為0號、1號和2號
定時器,驅動揚聲器的是0號定時器,該定時器工作在方式3,是一個頻率發(fā)生器,它負責向揚聲器發(fā)送指定頻率的脈沖信號。當8255的PA0和PA1都為1時,8253發(fā)出指定頻率的聲音信號的前提下,聲音信號通過與門到達驅動器驅動揚聲器發(fā)聲。
硬件原理圖如圖1所示:
圖2 揚聲器驅動電路
軟件設計
系統(tǒng)要求實現2個功能,電子琴和音樂盒的功能。兩者發(fā)聲的方法一樣,只是一個數據是從鍵盤讀取的,另一個是已經保存好的數據。首先我們可以用一個子程序實現單個音調的產生
18、,對8253輸入不同的計數初值生成不同頻率的波形,然后延時一段時間。電子琴程序主要是讀取鍵盤按鍵,根據鍵值產生不同的音調即可。而樂曲的播放先將樂曲的音符編碼表和節(jié)拍編碼表建立好的,然后在播放時讀取數據。
1.單音調子程序SOUND;單音調子程序的調用前需要進行以下幾個方面工作:;1)確定相應的音調所對應的頻率,查表可以得到,再;2)確定音長,即一個音符所持續(xù)的時間;在單音調子程序中實現發(fā)出一個音符的聲音,持續(xù)所需;圖3單音調子程序流程圖;2.音樂盒程序;音樂盒的樂曲播放程序中需要有兩組數據支持:一組是;有了音調與頻率和時間的關系后,就可以按照樂曲的曲;在程序
1. 單音調子程序SOUN
19、D
單音調子程序的調用前需要進行以下幾個方面工作:
1)確定相應的音調所對應的頻率,查表可以得到,再由頻率得到對應的8253計數初值。
2)確定音長,即一個音符所持續(xù)的時間。
在單音調子程序中實現發(fā)出一個音符的聲音,持續(xù)所需的時間,流程圖如圖3所示:
圖3 單音調子程序流程圖
2.音樂盒程序
音樂盒的樂曲播放程序中需要有兩組數據支持:一組是頻率數據,一組是節(jié)拍時間數據。音符的頻率可以通過簡譜從頻率表中查得。節(jié)拍時間就是音符的持續(xù)時間,取決于樂曲的速度和每個音符的節(jié)拍數據。如4/4(四四拍)中,每小節(jié)包括4拍,全音符持續(xù)4拍,二分音符持續(xù)2拍,四分音符持續(xù)一拍,八分音符持續(xù)半拍等。
20、
有了音調與頻率和時間的關系后,就可以按照樂曲的曲譜將每個音符的頻率和持續(xù)的時間定義成兩組數據表,然后編程依次取出表中的頻
率值和節(jié)拍值,調用單音調子程序就可依次產生各個音調,播放出樂曲。
在程序中存儲幾個樂曲數據,根據音樂盒子菜單選擇相應的樂曲演奏,讀取對應的數據輸出。
樂曲《兩只老虎》的簡譜如下:
兩只老虎
1=C 4/4
1 2 3 1 | 1 2 3 1 | 3 4 5 - | 3 4 5 - |56 54 3 1 |56 54 3 1 |
2 5 1 - | 2 5 1 - |
對應的頻率數據表Freq、節(jié)拍數據表Time如下:
TWOTIGERS_FRE DW
21、2 DUP(524,588,660,524,0) 樂曲的頻率表
DW 2 DUP(660,698,784,0)
DW 2 DUP(784,880,784,698,660,524,0) DW 2 DUP(588,392,524,0),1
TWOTIGERS_TIME DW 10 DUP(100),200,100,100,200 樂曲的時間表
DW 2 DUP(50,50,50,50,100,100) DW 2 DUP(100,100,200)
outb_p(0x34,0x43);
; ;
outb_p(LATCH&0xff,0x40);
outb_p(LATCH>&
22、gt;8,0x40);
outb(inb_p (0x21) & ~0x01, 0x21); //允許接收定時器中斷 }
void do_timer(void)
{
這是定時器主程序,用于每隔一段時間后進行某些操作
}
[8253.asm]:
//以下是nasm格式的匯編代碼,這個中斷處理函數必須用匯編 timer_interrupt:
push gs
push fs
push es
push ds
push ebp
push edi
push esi
push edx
push ecx
push ebx
push eax
;如果你不在操作系統(tǒng)下使用
23、,以下三行必須刪除,否則必須把0x10更改為內核段選擇符
mov eax,0x10
mov ds,ax
mov es,ax
mov al,0x20
out 0xa0,al ;發(fā)送EOI
out 0x20,al
call do_timer
pop ebx
pop ecx
pop edx
pop esi
pop edi
pop ebp
pop ds
pop es
pop fs
pop gs
xor eax,eax
iretd
實踐體會
本次微機實驗課程設計,使我對微機軟硬件結合有了進一步的了解。原來并不太清楚是什么意思,一直都很模糊,聽課本也是很迷茫;而之
24、前的那些單元實驗,也沒有都做好。之前做的實驗,由于大部分是驗證性的,所以就很被動地去做,甚至并沒有想為什么要那樣連電路,內部的代碼更沒有認真看。這次課程設計,因為要自己去設計整個過程,所以就不得不去了解學習自己原來并沒有真正弄懂的東西。比如一些程序的代碼的意思,匯編語言的邏輯,比如一些芯片的用途。使我對前面所做的實驗有了原理性的了解,回頭看一些實驗,也知其然其所以然了。同時對課本上講的一些內容,不再像以前那樣覺得抽象,通過這次設計,有了具體的理解。
同時,我也知道了設計一個項目,應該如何下手。應該先對項目要求有個全面的了解,知道要做什么,然后根據要求所要涉及到的知識我們要主動去攝取,結合自己
25、已學過的,再對整體框架有個感知,心里有數后,進行設計。設計時用流程圖,這很重要,這樣整個思路就很清晰,而且是按照軟硬件語言的邏輯順序進行,就很方便。設計過程可以分模塊,不要一開始就想把所有的功能都實現了,應該一個模塊一個模塊地實現,再總的連起來,實現最后的總模塊。在每個模塊設計時,盡量想到比較簡單的設計,簡化編程和電路,也可少出錯。對微機是這樣,對其他的像數字系統(tǒng)設計,也是一樣的。
因此,我也覺得微機實驗的這種形式的課程設計是很好也很有必要的。對我們對微機實驗的理解有很大幫助。
查閱
資料
目錄
格式要求
內頁正文內容:4號宋體、單倍行距
如需附圖可將文檔圖紙壓縮后上傳
范文范例 學習指導