川大16年計算機綜合實踐報告材料_第1頁
川大16年計算機綜合實踐報告材料_第2頁
川大16年計算機綜合實踐報告材料_第3頁
川大16年計算機綜合實踐報告材料_第4頁
川大16年計算機綜合實踐報告材料_第5頁
已閱讀5頁,還剩11頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

實用標(biāo)準文案

四川大學(xué)網(wǎng)絡(luò)教育學(xué)院

計算機綜合實踐

校外學(xué)習(xí)中心:宜賓職業(yè)技術(shù)學(xué)院

學(xué)生姓名:______________________

專業(yè):電氣工程及其自動化

層次:專升本

年級:2015

學(xué)號:42001

實踐時間:2016.7.7

文檔

實用標(biāo)準文案

實驗一DEBUG調(diào)試工具熟悉、使用

1.了解并逐步熟悉匯編語言的編輯方法及特點.

實驗2.復(fù)習(xí)8088匯編語言的段結(jié)構(gòu)、常用的指令與偽指令、

存儲空間的分配等。

目的3.掌握匯編語言的編輯、匯編及連接的過程。

4.了解并逐步掌握運用DEBUG進行調(diào)試匯編語言程

序。

5.借助DEBUG調(diào)試工具來發(fā)現(xiàn)匯編語言程序的錯誤所

在并加以改正。

1、進入DEBUG

方法1:在Windows開始菜單中單擊運行命令,直

接在運行對話框中輸入"DEBUG"

實驗方法2:在運行對話框中輸入"CMD"啟動DOS命令窗

口后輸入"DEBUG"

方法3:在程序、附件、命令提示符,啟動DOS命令

內(nèi)容窗口后輸入"DEBUG"

2、DEBUG命令格式

DEBUG的每個命令都是一個字母,后跟一個或多個參數(shù)。

下面對DEBUG命令作幾點說明。

?字母不分大小寫。

?只使用16進制數(shù),且不能帶后綴H。

文檔

實用標(biāo)準文案

?以空格或逗號作為命令各項之間的分隔符。分隔符只在兩

個數(shù)值之間是必須的。

?可以用Dtrl-C或Ctrl-Break終止命令的執(zhí)行。

?若輸入的命令有語法錯誤,則提示“Error”,并用“…

指出錯誤位置。

3、常用的Debug功能

用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:IP

所指的指令。

(2)R<寄存器名〉

顯示指定寄存器的值,并等待用戶鍵入新的值,按回

文檔

實用標(biāo)準文案

車鍵結(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命令直接查看,將列出

Debug預(yù)設(shè)的地址處的內(nèi)容

6、用Debug的E命令改寫內(nèi)存中的內(nèi)容;

使用“e起始地址數(shù)據(jù)數(shù)據(jù)數(shù)據(jù)…"的格式來進行

如將內(nèi)存1000:0-1000: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

文檔

實用標(biāo)準文案

"IBM"將輸入1a2c++3IBM到相應(yīng)單元

向內(nèi)容中寫入機器碼,如b80100(代表movax,

0001),b90200(代表movex,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í)行的指令并將IP加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.

文檔

實用標(biāo)準文案

實驗二設(shè)計匯編語言程序

字符串統(tǒng)計程序設(shè)計

實驗雙字乘法程序設(shè)計

目的

1.字符串統(tǒng)計。

在數(shù)據(jù)段中建立一個緩沖區(qū)BUFFER,變量VER,編

程使得程序具有如下功能:從鍵盤輸入一個子字符串

實驗存入VER,從鍵盤輸入包含一個或幾個子字符串的

字符串存入BUFFER。統(tǒng)計BUFFER中的字符串含有

多少個子字符串以及每個子字符串的位置。

內(nèi)容2.雙字乘法程序。

設(shè)計一個程序?qū)崿F(xiàn)32位帶符號雙精度數(shù)乘法運算。由

于只有8位和16位的乘法指令。因此32位乘法運算

是不能直接用指令實現(xiàn)的。但可以用16位乘法指令,

通過4次想乘然后把部分積想加。對于帶符號數(shù),可

以先根據(jù)絕對值求得積。然后判斷積的符號,若積為

負數(shù),應(yīng)將其用補碼表示。

一、程序設(shè)計

1、字符串統(tǒng)計程序設(shè)計

#include<iostream>

文檔

實用標(biāo)準文案

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>='A'&&a<='Z')

C++;

elseif(a=='')

d++;

elseif(a>='0'&&a<='9')

e++;

elsef++;

a=cin.get();

}

cout?"總共有"<<b/2+c+d+e+f<<”個字

符1<<endl;

文檔

實用標(biāo)準文案

cout?"中文英文空格

"?"\t"?"數(shù)字其他"<<endl;

cout?b/2?"\t"?c?"\t"?d?"\t"?e?"

\t"?f?endl;

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

文檔

實用標(biāo)準文案

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+1O,dx

adcz+12,0

movax,4cOOh

int21h

codeends

endstart

實驗三8253定時器/計數(shù)器接口與數(shù)字電子琴

文檔

實用標(biāo)準文案

改變定時器2的計數(shù)值來改變聲音頻率,通過編程來獲得聲調(diào)(頻

實驗率)和節(jié)奏(延時長短),使計算機演奏出樂曲來。

目的

設(shè)計程序讓微機演奏一段簡單樂曲

利用DOS的鍵盤管理功能。將微機變?yōu)橐粋€具有簡單功能的電

實驗子琴(選作)。

內(nèi)容

算法硬件設(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ā)出的音頻信號能到達驅(qū)動

器或被阻斷。這樣通過控制PA0的變化,可使揚聲器接通和斷開,

控制揚聲器是否能發(fā)出聲音。此外,通過控制PA0的通斷時間,就

能發(fā)出不同的音長。8255的PA1位為“1”時:控制8253定時器

產(chǎn)生驅(qū)動揚聲器發(fā)聲的音頻信號,該位為“0”則不發(fā)信號。8253

有三個定時器,分為。號、1號和2號定時器,驅(qū)動揚聲器的是0

文檔

實用標(biāo)準文案

號定時器,該定時器工作在方式3,是一個頻率發(fā)生器,它負責(zé)向

揚聲器發(fā)送指定頻率的脈沖信號。當(dāng)8255的PAO和PA1都為1時,

8253發(fā)出指定頻率的聲音信號的前提下,聲音信號通過與門到達驅(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é)拍編碼表建立好的,然后在播放

文檔

實用標(biāo)準文案

時讀取數(shù)據(jù)。

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)系后,就可以按照樂曲的曲譜將每個

文檔

實用標(biāo)準文案

音符的頻率和持續(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-1

345-I565431|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_TIMEDW10

DUP(100),200,100,100,200;樂曲的時間表

DW2DUP(50,50,50,50,100,100)

DW2DUP(100,100,200)

文檔

實用標(biāo)準文案

outb_p(0x34,0x43);

outb_p(LATCH&0xff,0x40);

outb_p(LATCH?8,0x40);

outb(inbjD(0x21)&-0x01,0x21);//允許接收定時器中斷

)

voiddo_timer(void)

(

這是定時器主程序,用于每隔一段時間后進行某些操作

)

[8253.asm]:

//以下是nasm格式的匯編代碼,這個中斷處理函數(shù)必須用匯編

timerjnterrupt:

pushgs

pushfs

pushes

pushds

pushebp

pushedi

pushesi

pushedx

pushecx

pushebx

pusheax

文檔

實用標(biāo)準文案

;如果你不在操作系統(tǒng)下使用,以下三行必須刪除,否則必須把0x10

更改為內(nèi)核段選擇符

moveax,0x10

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論