版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
四川大學(xué)網(wǎng)絡(luò)教育學(xué)院
計算機綜合實踐
校外學(xué)習(xí)中心:綿陽廣播電視大學(xué)
學(xué)生姓名:
專業(yè):電氣工程及其自動化
層次:專升本
年級:14秋
學(xué)號:DH114244008
實踐時間:2016年3月20日
1.了解并逐步熟悉匯編語言的編輯方法及特點.
實驗
目的2.復(fù)習(xí)8088匯編語言的段結(jié)構(gòu)、常用的指令與偽指令、
存儲空間的分配等。
3.掌握匯編語言的編輯、匯編及連接的過程。
4.了解并逐步掌握運用DEBUG進行調(diào)試匯編語言程序。
5.借助DEBUG調(diào)試工具來發(fā)現(xiàn)匯編語言程序的錯誤所在
并加以改正。
1、進入DEBUG
實驗
方法1:在晅ndows開始菜單由單擊運行命令,直接在運
內(nèi)容
行對話框中輸入〃DEBUG"
方法2:在運行對話框中輸入〃CMD〃啟動DOS命令窗匚后
算法輸入〃DEBUG"
與流
方法3:在程序、附件、命令提示符,啟動DOS命令窗口
程圖
后輸入〃DEBUG"
2、DEBUG命令格式
DEBUG的每個命令都是一個字母,后跟一個或多個參數(shù)。
程序
下面對DEBUG命令作幾點說明。
清單
-字母不分大小寫。
?只使用16進制數(shù),且不能帶后綴H。
?以空格或逗號作為命令各項之間的分隔符。分隔符只在
運行
兩個數(shù)值之間是必須的。
結(jié)果
,可以用Ctrl-C或Ctrl-Break終止命令的執(zhí)行。
?若輸入的命令有語法錯誤,則提示“Error",并用
指出錯誤位置。
3、常用的Debug功能
調(diào)試
用Debug的R命令查看、改變CPU寄存器的內(nèi)容;
分析
用Debug的D命令查看內(nèi)存中的內(nèi)容;
和體
用Debug的E命令改寫內(nèi)存中的內(nèi)容;
會
用Debug的U命令將內(nèi)存中的機器指令翻譯成匯編指令;
用Debug的T命令執(zhí)行一條機器指令
用Debug的A命令以匯編指令的格式在內(nèi)存中寫了一條機
器指令
4、用Debug的R命令查看、改變CPU寄存器的內(nèi)容;
R命令用來顯示和修改寄存器的值,包括以下兩種格式。
(1)R
顯示所芍寄存器和8個標(biāo)志位的值,并反匯編CS:TP所指
的指令。
(2)R〈寄存器名〉
顯示指定寄存器的值,并等待用戶鍵入新的值,按同車鍵
結(jié)束R
命令。
5、用Debug的D命令查看內(nèi)存中的內(nèi)容;
D命令可以查看內(nèi)存中的內(nèi)容,D命令的格式較多,只介
紹本次實驗中用到的格式,8086/8088CPU能夠訪問1M內(nèi)容,
D命令可以顯示OOOO:OOOOH-FFFF:FFFFH中的任何一個單元
的內(nèi)存
如果想知道內(nèi)存10000H處的內(nèi)容,可以用〃d段地址:偏
移地址〃的格式來查看,如輸入
-d1000:0
使用d1000:9查看1000:9處的內(nèi)容。
使用d1000:09查看1000:0-1000:9的內(nèi)容
一進入Debug,可直接使用D命令直接查看,將列出Deb
ug預(yù)設(shè)的地址處的內(nèi)容
6、用Debug的E命令改寫內(nèi)存中的內(nèi)容;
使用〃e起始地址數(shù)據(jù)數(shù)據(jù)數(shù)據(jù).?.〃的格式來進行
如將內(nèi)存1000:0T000:9單元中的內(nèi)容分別寫為0、1、2、
3、4、
5、6、7^8^9
-e1000:00123456789
也可以采用提問方式一個一個修改內(nèi)存中的內(nèi)容,如
輸入e1000:0,按Enter鍵輸入修改的數(shù)據(jù),再按空格
鍵輸入下一個要修改的數(shù)據(jù),最后Enter鍵結(jié)束操作°
輸入字符串的格式:如-e1000:101'a'2〃c++〃3〃I
BM〃將
輸入1a2c++3IBM到相應(yīng)單元
向內(nèi)容中寫入機器碼,如b80100(代表movax,0001),
b90200(代表niovex,002),01c8(代表addax,ex),那
么輸入-e1000:0b80100b9020001c8就將該程序輸
入內(nèi)容1000:0處,然后使用u命令-u1000:0可以將內(nèi)存單
元中的內(nèi)容翻譯成匯編指令。如果要執(zhí)行該程序,首先用r
命令將cs修改成1000,ip修改成0,再執(zhí)行t命令,單步
執(zhí)行程序。執(zhí)行T命令時,CPU執(zhí)行CS:IP執(zhí)行的指令并將I
P力口1.
7、用Debug的A命令以匯編指令的形式在內(nèi)存中寫了機
器指令示例:用A命令,輸入下列程序并運行
-a1000:0
movax,1
movbx,2
movex,3
addax,bx
addax,ex
addax,ax
直接按Enter鍵結(jié)果輸入。用r命令將cs修改成1000,
ip修改成0,再執(zhí)行t命令,單步執(zhí)行程序。執(zhí)行T命令時,
CPU執(zhí)行CS:IP執(zhí)行的指令并將IP加1.
實驗二設(shè)計匯編語言程序
一.實驗題目設(shè)計匯編語言程序
二.實驗日期:2010/04/10
三.實驗?zāi)康?/p>
字符串統(tǒng)計程序設(shè)計
雙字乘法程序設(shè)計
四.實驗內(nèi)容
1.字符串統(tǒng)計。
在數(shù)據(jù)段中建立一個緩沖區(qū)BUFFER,變量VER,編程使得
程序具
有如下功能:從鍵盤輸入一個子字符串存入VER,從鍵盤
輸入包含一個或幾個子字符串的字符串存入BUFFER。統(tǒng)計B
UFFER中的字符串含有多少個子字符串以及每個子字符串的
位置。
2.雙字乘法程序。
設(shè)計一個程序?qū)崿F(xiàn)32位帶符號雙精度數(shù)乘法運算。由于
只有8位和16位的乘法指令。因比32位乘法運算是不能直
接用指令實現(xiàn)的。但可以用16位乘法指令,通過4次想乘
然后把部分積想加。對于帶符號數(shù),可以先根據(jù)絕對值求得
積。然后判斷積的符號,若積為負(fù)數(shù),應(yīng)將其用補碼表示。
五、程序設(shè)計
1、字符串統(tǒng)計程序設(shè)計
#incIude<iost.ream>
usingnamespacestd;;intmain();chara;intb=O,c=0,d
=0,e=0;cout<<〃請輸入一行任;a=cin.get();;while(a!=
'\n');if(a<01a>=128);b++;;elseif(a>=,a*&&am;c++;;
elseif(a='');d+
usingnamespacestd;
intmain()
(
chara;intb=O,c=O,d=O,e=O,f=O;
cout?〃請輸入一行任意字符:〃;
a=cin.get();
while(a!=,\n,)
(
if(a<0||a>=128)
b++;
elseif(a>='a'&&a<二'z'||a>=,Af&&a<=fZ')
c++;
elseif(a==,')
d++;
elseif(a>='O'&&a<二'9')
e++;
elsef++;
a=cin.get();
}
cout<<〃總共有〃<<b/2+c+d+e+f<〈〃個字符:,z?endl;
cout<<〃中文〃〈〃英文〃《〃\t〃?!崭瘛?〃\t〃<<〃
數(shù)字〃〃其他〃0endl;
cout?b/2?/,\t,/?c?,,\t,,?d?/,\t,,?e?,,\t,/?f?en
dl;
return0;
)
分別統(tǒng)計出英文字母,空格,數(shù)字和其他字符的個數(shù)。
2、雙字乘法程序設(shè)計
datasegment
xdw1,2;被乘數(shù)
ydw3,4;乘數(shù)
zdw4dup(?);積
dataends
codesegment
assumeds:data,cs:code
start:
movax,data
movds,ax
movax,x
muly
movz,ax
movz+2,dx
movax,x+2
muly
movz+4,ax
movz+6,dx
movax,x
muly+2
addz+4,ax
adcz+6,dx
movax,x+2
muly+2
adcz+8,ax
adcz+10,dx
adcz+12,0
movax,4c00h
int21h
codeends
endstart
實驗三8253定時器/計數(shù)器接口與數(shù)字電子琴
一、實驗題目8253定時器/計數(shù)器接口與數(shù)字電子琴
二、實驗日期:2010/05/15
三、實驗?zāi)康?/p>
改變定時器2的計數(shù)值來改變聲音頻率,通過編程來獲得
聲調(diào)(頻率)和節(jié)奏(延時長短),使計算機演奏出樂曲來。
四、實驗內(nèi)容
設(shè)計程序讓微機演奏一段簡單樂曲
利用DOS的鍵盤管理功能。將微機變?yōu)橐粋€具有簡單功能
的電子琴(選作)。
五、程序設(shè)計
硬件設(shè)計
利用實驗板上的8253計數(shù)/定時器和8255并行接口,定
時器8253利用工作方式3產(chǎn)生一定頻率信號,通過可編程的
并行外圍接口芯片8255控制頻率信號的通斷。
8255的A口設(shè)置為輸出,8255的A口的低兩位用來控制
揚聲器驅(qū)動,當(dāng)輸出端口的PA0位為“1”或為“0”時,將
使控制驅(qū)動器的與門電路接通或關(guān)閉,使8253所發(fā)出的音頻
信號能到達(dá)驅(qū)動器或被阻斷。這樣通過控制PA0的變化,可
使揚聲器接通和斷開,控制揚聲器是否能發(fā)出聲音。此外,
通過控制PA0的通斷時間,就能發(fā)出不同的音長。8255的P
A1位為“1”時,控制8253定時器產(chǎn)生驅(qū)動揚聲器發(fā)聲的音
頻信號,該位為“0”則不發(fā)信號,8253有三個定時器,分
為0號、1號和2號
定時器,驅(qū)動揚聲器的是0號定時器,該定時器工作在方式
3,是一個頻率發(fā)生器,它負(fù)責(zé)向揚聲器發(fā)送指定頻率的脈沖
信號。當(dāng)8255的PAO和PA1都為1時,8253發(fā)出指定頻率
的聲音信號的前提下,聲音信號通過與門到達(dá)驅(qū)動器驅(qū)動揚
聲器發(fā)聲。
硬件原理圖如圖1所示:
圖2揚聲器驅(qū)動電路
軟件設(shè)計
系統(tǒng)要求實現(xiàn)2個功能,電子琴和音樂盒的功能。兩者發(fā)
聲的方法一樣,只是一個數(shù)據(jù)是從鍵盤讀取的,另一個是已
經(jīng)保存好的數(shù)據(jù)。首先我們可以用一個子程序?qū)崿F(xiàn)單個音調(diào)
的產(chǎn)生,對8253輸入不同的計數(shù)初值生成不同頻率的波形,
然后延時一段時間。電子琴程序主要是讀取鍵盤按鍵,根據(jù)
鍵值產(chǎn)生不同的音調(diào)即可。而樂曲的播放先將樂曲的音符編
碼表和節(jié)拍編碼表建立好的,然后在播放時讀取數(shù)據(jù)。
1.單音調(diào)子程序SOUND;單音調(diào)子程序的調(diào)用前需要進行
以下幾個方面工作:;1)確定相應(yīng)的音調(diào)所對應(yīng)的頻率,查
表可以得到,再;2)確定音長,即一個音符所持續(xù)的時間;
在單音調(diào)子程序中實現(xiàn)發(fā)出一個音符的聲音,持續(xù)所需;圖
3單音調(diào)子程序流程圖;2.音樂盒程序;音樂盒的樂曲播放
程序中需要有兩組數(shù)據(jù)支持:一組是;有了音調(diào)與頻率和時
間的關(guān)系后,就可以按照樂曲的曲;在程序
1.單音調(diào)子程序SOUND
單音調(diào)子程序的調(diào)用前需要進行以下幾個方面工作:
1)確定相應(yīng)的音調(diào)所對應(yīng)的頻率,查表可以得到,再由
頻率得到對應(yīng)的8253計數(shù)初值。
2)確定音長,即一個音符所持續(xù)的時間。
在單音調(diào)子程序中實現(xiàn)發(fā)出一個音符的聲音,持續(xù)所需的
時間,流程圖如圖3所示:
圖3單音調(diào)子程序流程圖
2.音樂盒程序
音樂盒的樂曲播放程序中需要有兩組數(shù)據(jù)支持:一組是頻
率數(shù)據(jù),一組是節(jié)拍時間數(shù)據(jù)。音符的頻率可以通過簡譜從
頻率表中查得。節(jié)拍時間就是音符的持續(xù)時間,取決于樂曲
的速度和每個音符的節(jié)拍數(shù)據(jù)。如4/4(四四拍)中,每小
節(jié)包括4拍,全音符持續(xù)4拍,二分音符持續(xù)2拍,四分音
符持續(xù)一拍,八分音符持續(xù)半拍等。
有了音調(diào)與頻率和時間的關(guān)系后,就可以按照樂曲的曲譜
將每個音符的頻率和持續(xù)的時間定義成兩組數(shù)據(jù)表,然后編
程依次取出表中的頻
率值和節(jié)拍值,調(diào)用單音調(diào)子程序就可依次產(chǎn)生各個音調(diào),
播放出樂曲。
在程序中存儲幾個樂曲數(shù)據(jù)?,根據(jù)音樂盒子菜單選擇相應(yīng)
的樂曲演奏,讀取對應(yīng)的數(shù)據(jù)輸出。
樂曲《兩只老虎》的簡譜如下:
兩只老虎
1=C4/4
1231|1231|345-|345-|565431
|565431|
251-|251-|
對應(yīng)的頻率數(shù)據(jù)表Freq、節(jié)拍數(shù)據(jù)表Time如下:
TWOTIGERS_FREDW2DUP(524,588,660,524,0)樂曲的
頻率表
DW2DUP(660,698,784,0)
DW2DUP(784,880,784,698,660,524,0)DW2DUP(588,
392,524,0),1
TWOTIGERS_TIMEDW10DUP(IOO),200,100,100,200樂
曲的時間表
DW2DUP(50,50,50,50,100,100)DW2DUP(100,100,20
0)
outb_p(0x34,0x43);
??
outb_p(LATCH&Oxff,0x40);
outb_p(LATCH?8,0x40);
outb(inb_p(0x21)&"0x01,0x21);//允許接收定時
器中斷}
voiddo_timer(void)
(
這是定時器主程序,用于每隔一段時間后進行某些操作
)
[8253.asm]:
〃以下是nasm格式的匯編代碼,這個中斷處理函數(shù)必須
用匯編timer_interrupt:
pushgs
pushfs
pushes
pushds
pushebp
pushedi
pushesi
pushedx
pushecx
pushebx
pusheax
;如果你不在操作系統(tǒng)下使用,以下三行必須刪除,否則必
須把0x10更改為內(nèi)核段選擇符
moveax,0x10
movds,ax
moves,ax
moval,0x20
outOxaO,al;發(fā)送E01
out0x20,al
calldo_timer
pope
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 陶瓷工藝品彩繪師安全應(yīng)急強化考核試卷含答案
- 硝酸銨結(jié)晶造粒工測試驗證模擬考核試卷含答案
- 數(shù)控銑工安全管理競賽考核試卷含答案
- 金屬軋制工崗后考核試卷含答案
- 木地板成型工班組評比模擬考核試卷含答案
- 機場場道維護員崗前設(shè)備性能考核試卷含答案
- 委托接聽電話協(xié)議書
- cs架構(gòu)的協(xié)議書是
- 協(xié)議書過期但是合作繼續(xù)
- 初一政治試題及答案
- 深圳市龍崗區(qū)2025年生物高一上期末調(diào)研模擬試題含解析
- 欄桿勞務(wù)分包合同范本
- 2025年黃帝內(nèi)經(jīng)章節(jié)題庫及答案
- 具身智能+醫(yī)療康復(fù)中多模態(tài)感知與自適應(yīng)訓(xùn)練系統(tǒng)研究報告
- 廣東省深圳市寶安區(qū)2026屆高一上生物期末聯(lián)考試題含解析
- 2025-2026學(xué)年上學(xué)期高二化學(xué)蘇教版期中必刷??碱}之化學(xué)反應(yīng)速率與化學(xué)平衡(解答題)
- 自動化生產(chǎn)線調(diào)試與安裝試題及答案
- GB/T 7986-2025輸送帶滾筒摩擦試驗
- 2025秋期版國開電大本科《管理英語4》一平臺綜合測試形考任務(wù)在線形考試題及答案
- 洗衣房安全培訓(xùn)課件
- 玻纖拉絲工專業(yè)知識考核試卷及答案
評論
0/150
提交評論