微机原理实验指导书.docx

上传人:b****9 文档编号:25273975 上传时间:2023-06-06 格式:DOCX 页数:30 大小:27.35KB
下载 相关 举报
微机原理实验指导书.docx_第1页
第1页 / 共30页
微机原理实验指导书.docx_第2页
第2页 / 共30页
微机原理实验指导书.docx_第3页
第3页 / 共30页
微机原理实验指导书.docx_第4页
第4页 / 共30页
微机原理实验指导书.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

微机原理实验指导书.docx

《微机原理实验指导书.docx》由会员分享,可在线阅读,更多相关《微机原理实验指导书.docx(30页珍藏版)》请在冰豆网上搜索。

微机原理实验指导书.docx

微机原理实验指导书

微型计算机原理与应用

实验指导书

上海大学通信学院

2010年4月

PC微机原理实验一

一、目的:

掌握PC机DEBUG调试程序有关命令的操作及8086各类指令的

功能。

要求:

在PC机上完成下列程序的调试运行,并写出运行结果。

二、

1.DEBUG的基本操作:

(详细内容请参阅教材“程序的调试,P173”和“附录F调试程序DEUBG的使用,P499”)

(1)从WINDOWS进入DOS之后,输入命令启动DEBUG:

C:

>DEBUG回车

(2)输入R命令,查看和记录CPU各个寄存器的内容:

-R回车

看到什么

(3)输入A命令,汇编下面的字符“WINDOWS”显示程序:

-A100;从偏移地址是0100H处开始写指令

MOVAH,2

MOVDL,57;57H是“W”的ASCII码

INT21;INT21是DOS功能调用,AH=2代表2号功能

;这3句合起来的功能是:

显示DL中的字符

MOVDL,49

INT21

MOVDL,4E

INT21

MOVDL,44

INT21

MOVDL,4F

INT21

MOVDL,57

INT21

MOVDL,53

INT21

INT3;功能是产生一个断点,不要省略

(4)输入U命令反汇编上面的程序:

-U100

问:

这里100代表什么

(5)输入G命令连续运行上面的程序,记录运行结果:

-G=100

,57,53依次分别改为574F4E57(6)输入E命令把上面程序中的数据,49,,44,,45:

,,45,4C43,4F4D,-E103回车(以下同)

-E107

10B-E

-E10F

113-E

117-E

11B-E

(7)输入D命令查看程序机器码的存放情况:

-D10011E;看从100开始到11E的机器码

(8)输入G命令再连续运行程序,并记录运行结果:

-G=100

(9)依次输入下面的T命令(单步执行)和G命令(设置断点并启动运行),记录各

命令的运行结果:

-T=100回车

-G=100106回车

-G=10010A回车

-G=10010E回车

-G=10011E回车

注意:

下面第2—第8段程序是7个实用的小程序,若不小心打错指令,可以这样修改:

例如:

CS:

0100B300MOVBL,0

010253PUSHBX

0103B220LP1:

MOVDL,20

要修改“PUSHBX”,因为这条指令的IP是0102,所以按以下操作:

-A0102回车,然后把正确的指令打入,“-A”是汇编指令。

如果要查看0100以后的指令及相应的机器代码,可以

-U0100回车,能够看到CS:

0100开始的指令及相应的机器代码。

“-U”是反汇编

若发现有误用,用“-AXXXX回车”,重打这条指令即可

2.编制一个能在CRT上连续显示A,B,C,D······Z大写英文字符的源程序,并在源程序下汇编调试机运行。

参考源程序(DEBUG调试环境中,源程序的十六进制数后面不写H):

CS:

0100B300MOVBL,0

010253PUSHBX

0103B220LP1:

MOVDL,20

0105B402MOVAH,02

0107CD21INT21

BXPOP5B0109

010A88D8MOVAL,BL

ALFEC0010CINC

CMPAL,1B3C1B010E

JNZ0110LP2(0114);不能写LP2,应写7502

01140112B001

MOVAL,01

LP2:

88C3MOVBL,AL0114

011653PUSHBX;

ADDAL,4004400117

88C20119MOVDL,AL

B402MOVAH,02011B

011DCD2121INT

MOV011FB9FFFFCX,FFFFDECCXDL:

012249

012375FDJNZDL(0122);不能写DL,应写0122

0125EBDCJMPLP1(0103);

按CTRL+C,可中止程序运行。

运行正确后,改写程序为0,1,2,3,4,5,7,8,9的循环显示。

3.编制一个3字节压缩BCD加法源程序

若要实现123456+456789,根据低地址放低字节,高地址放高字节原则,请用E命令在DS:

1000-1002单元正确存放被加数123456,在DS:

1010-1012单元正确存放加数456789。

参考程序如下:

CS:

0200BE0010MOVSI,1000

0203BF1010MOVDI,1010

0206BB2010MOVBX,1020

0209B103MOVCL,3

020BB500MOVCH,0

020DF8CLC

020E8A04MAD:

MOVAL,[SI]

02101205ADCAL,[DI]

021227DAA

02138807MOV[BX],AL

021546INCSI

021647INCDI

021743INCBX

0218E2F4LOOPMAD(020E)

021AF4HLT

运行结果:

[1020]=______[1021]=______[1022]=______SI=______DI=______BX=_____

相加后结果是:

_________________

F标志:

O=______S=______Z=______A=______P=______C=______

注意:

按CRT的实际显示填写。

(参考书P502)

结果会如何DAA的作用,如果没有DAA思考:

4.一字节十六进制数转换为ASCII码(只考虑大写字母)

用E命令在DS:

1000单元中存放十六进制数5A

调试运行下面程序:

CS:

03008D360010LEASI,[1000]

03048D3E2010LEADI,[1020]

03088A04MOVAL,[SI]

030A240FMOVBL,AL

030C240FANDAL,0F

030EE80E00CALLCHANG(031F)

031180E30ANDBL,F0

0314B90400MOVCX,4

0317D2EBSHRBL,CL

031988D8MOVAL,BL

031BE80100CALLCHANG(031F)

031EF4HLT

031F3C09CHANG:

CMPAL,09

03217602JBEAD30(0325)

03230407ADDAL,07

03250430AD30:

ADDAL,30

03278805MOV[DI],AL

032947INCDI

032AC3RET

运行结果:

[1020]=______[1021]=______

思考:

NOP是空操作指令,若在ADDAL,07后面,加一条NOP,结果会如何

5、搜索字符串结束标志,统计搜索的字符个数

用E命令在DS:

1000开始的单元中存放若干个ASCII字符,如:

30,31,32……39,0D。

(0D作为字符串结束标志),

调试运行下面程序

CS:

01008D3E0010LEADI,[1000]

0104B200MOVDL,0

0106B00DMOVAL,0D

0108AEAGAIN:

SCASB;书P150,AL减去[DI],INCDI

01097404JEDONE(010F)

010BFEC2INCDL

010DEBF9JMPAGAIN(0108)

010F8D1E2010DONE:

LEABX,[1020]

01138817MOV[BX],DL

0115F4HLT

运行结果:

___________单元,该单元的值是___________搜索的字符个数存放在.

AL=__________BX=__________DL=__________

思考:

把SCASB换成通用指令,如何改

6、编制一个将N个带符号的正、负数分开的源程序。

设N=10,用E命令在DS:

1000-1009单元存放10个数(1字节):

01,02,03,04,06,FF,80,81,06,07

将该数据块正、负数分开,正数放在1010为首地址的单元中,负数放在1020为首地址的单元中。

参考程序:

CS:

0300BE0010MOVSI,1000

0303BF1010MOVDI,1010

0306BB2010MOVBX,1020

0309B90A00MOVCX,000A

030CACG1:

LODSB;书P150,[SI]送给AL;INCSI

AL,80020DA880TEST

MINUS(0314)JNZ030F7503

;INCDI,AL送给[DI];书P1500311AASTOSB

JMPAGAIN(0319)0312EB05

BX,DI0314887DFMINUS:

XCHG

STOSBAA0316

BX,DI87DFXCHG0317

CX49AGAIN:

DEC0319

G1(030C)JNZ030A75F0

HLT031CF4

运行结果:

[1014]=_____[1013]=_____[1010]=_______[1011]=______[1012]=______

[1022]=_____[1021]=_____[1015]=_______[1016]=______[1020]=______

),程序能更简洁吗思考:

二条XCHG作用是什么如果不用STOSB(功能见书P150

个ASCII字符进行偶校验的源程序。

7、编制一个将NASCII字符单元放1000—10078个设N=8,用E命令在DS:

,44,42,434131,32,33,34,参考程序:

SI,[1000]LEACS:

04008D360010

BX,[1010]LEA04048D1E1010

CX,8MOV0408B90800

AGAIN:

LODSB040BAC

ANDAL,AL040C20C0

NEXT(0417)JPE7A07040E

AL,80OR04100C80

MOV[BX],AL04128807

BXINC041443

LP1(041A)EB030415JMP

[BX],ALMOVNEXT:

88070417

041943INCBX

DEC041ALP1:

49CX

AGAIN(040B)041BJNZ75EE

HLTF4041D

运行结果:

1000—1007单元内容:

___________________________________________

1010—1017单元内容:

___________________________________________

改上述程序进行奇校验,写出运行结果:

1000—1007单元内容:

___________________________________________

1010—1017单元内容:

___________________________________________

8、找出无序的有符号数中的最小值和最大值

用E命令在DS:

1000—100A中存放11个数:

0A,80,84,82,83,81,01,02,05,04,03,其中0A为数列的个数。

调试运行下面程序:

CS:

02008D1E0010LEABX,[1000]

02048D361010LEASI,[1010]

02088D3E2010LEADI,[1020]

020CB500MOVCH,0

020E8A0FMOVCL,[BX]

021049DECCX,

021143INCBX

02128A07MOVAL,[BX]

02148804MOV[SI],AL

02168805MOV[DI],AL

021843INCBX

02198A07AGAIN:

MOVAL,[BX]

021B3A04CMPAL,[SI]

021D740CJENEXT(022B)

021F7F04JGGET(0225)

02218804MOV[SI],AL

0223EB06JMPNEXT(022B)

02253A05GET:

CMPAL,[DI]

02277C02JLNEXT(022B)

02298805MOV[DI],AL

022B43NEXT:

INCBX

022C49DECCX

022D75EAJNZAGAIN(0219)

022FF4HLT

运行结果:

[1010]=____________[1020]=____________

若求无符号数中的最小值和最大值,请修改并调试运行程序。

PC微机原理实验二

目的:

掌握8088汇编语言程序的编辑、宏汇编、连接及运行的操作步骤,进一步掌一、握编制源程序的格式,了解编辑程序EDIT、宏汇编MASM、联机程序LINK的功能,熟悉具有扩展名.ASM、.OBJ、.LST、.EXE等文件查询。

要求:

在DOS环境下,用EDIT文件编辑***.ASM源程序并存盘,用MASM二、文件汇编无误,用LINK文件连接无误,然后在DOS下运行***.EXE文件,用DEBUG文件检查运行结果。

最后写出程序运行结果。

运行以下程序()后,检测结果是否按从小到大的次序(ASCII码值)。

排序算法可以参考教科书P114例4.3.10。

显示一串字符可以参考教科书P146例4.3.19。

例如要显示BUF1中的字符,可以这样写:

MOVDX,OFFSETBUF1

MOVAH,9

INT21H;(AH)=9显示一串字符,首地址:

DS:

DX(书P146)

源程序如下:

NAME:

STACKSEGMENTSTACK

DW256DUP()

TOPLABELWORD

STACKENDS

DATASEGMENT

BUF1DB43H,47H,46H,41H,42H,30H,31H,32H,33H,34H,'$'

BUF2DB0DH,0AH,'$';使光标回车换行(参书P147)

DATAENDS

CODESEGMENT

ASSUMECS,CODE,DS:

DATA,SS:

STACK

START:

MOVAX,DATA

MOVDS,AX

MOVAX,STACK

MOVSS,AX

MOVSP,OFFSETTOP;前几句几乎是固定格式

MOVDX,OFFSETBUF1

MOVAH,9

INT21H;显示BUF1中未排序的原始数据

MOVDX,OFFSETBUF2

MOVAH,9

INT21H;使光标回车换行(参考书P147)

;因为BUF1MOVCX,10是10个字节

;下面是排序算法的主体部分;SI指向DATBUF最后一单元加MOVSI,CX1

;BL中置标志BL,0FFH0FFHMOV

;(BL)不为LOOPA:

CMPBL,0FFH0FFH则转DONE

DONEJNZ

MOVBL,00

DECCX;外循环修正CX

DONEJZ

;SI,CX---堆栈SIPUSH

;PUSHCX

LOOPB:

DECSI;内循环修正指针

MOVAL,[SI]

CMPAL,[SI-1]

JAELA

XCHGAL,[SI-1]

MOV[SI],AL

MOVBL,0FFH

LA:

LOOPLOOPB

POPCX

POPSI

JMPLOOPA

DONE:

MOVDX,OFFSETBUF1;

MOVAH,9;

INT21H;显示BUF1中已经排序的有序数据

MOVCX,LENGTHDATBUF

;-----------------------------------------------------------

MOVAH,4CH

INT21H;返回DOS

;---------------------------------------------------------

CODEENDS

ENDSTART

思考:

(1)如果要求程序执行后,显示

Pleaseenterstring:

142AFC7回车;(当场输入原始数据)

1247ACF;(排序后的结果)

该如何修改程序

(2)实验一的第3题“编制一个3字节压缩BCD加法源程序”改写成标准汇编

例如,至少写成这样:

A+B=C

INPUTA=;输入被加数

;输入加数INPUTB=

RESULT=;计算的和

提示:

显示程序可以参考书P146

PC微机原理实验三

机发声程序)PC(一.目的:

了解8254定时器、8255可编程外围接口芯片的工作原理,掌握对这些芯片的编程方法

二.要求:

根据参考例子,自己编写一个简单的曲子。

注:

可以参考书P400“扬声器驱动原理逻辑图”

PC机上的大多数输入/输出(I/O)都是由8255可编程序外围接口芯片管理的。

它包括三个8位寄存器,两个用于输入功能,一个用于输出功能。

输入寄存器分配的I/O端口号为60H和62H,输出寄存器分配的I/O端口号为61H。

输出寄存器中的两位来选择扬声器的驱动方式,当输出寄存器(I/O端口61H)的第0位为l时,控制8254定时器来驱动扬声器,当第l位为l时,扬声器的门电路接通,并一直保持到位1变为0时关闭。

连接到扬声器上的是8254的2号定时器,它实际上是一个振荡电路,此电路向扬声器发送指定频率的脉冲,当输出端口61H控制扬声器为接通状态时,就发出了一定频率的声音。

PC机内的R0MBIOS中有个BEEP子程序,它能根据BL中给出的时间计数值控制8254定时器,产生持续时间为1个或几个0.5秒,频率为896Hz的声音,这个子程序的用途是当“加电自测系统发现硬件错误后,由ERROR—BEEP处理程序调用BEEP子程序,使扬声器发出“嘟嘟''的信号。

BL中的时间计数值由ERROR—BEEP程序设置为533H,BEEP子程序将此计数值送给8254的定时器2来产生896Hz的声音,然后BEEP又将AL的第0位和第l位置1,并把AL的值送到8255的输出寄存器(1/O端口61H),使扬声器接通发出声音。

实际上BEEP是一个很好的通用发声程序,我们可以利用并修改BEEP,使其产生任一频

率的声音。

为此我们需要做两点修改,首先,BEEP程序只能产生896Hz的声音,我们的通用发声程序应能产生任一频率的声音。

其次,BEEP产生声音的持续时间(音长)只能是0.5秒的倍数,我们希望声音的持续时间易于调整,例如可以是l0ms的倍数。

我们知道BEEP是将计数值533H送给定时器2产生896Hz的声音的,那么产生其它频率

声音的时间计数值应为:

533H×896÷给定频率=l23280H÷给定频率

假定发声的频率存放在D1寄存器中,下面的指令在AX中得到送往定时器.2的计数值:

MOVDX,l2H

MOVAX,533H*896

DⅣDI

10ms的延迟时间可以简单地通过执行循环指令取得:

WAIT:

MOVCX.2801

LOOPDELAY:

DELAY.

注意:

这个时间是在老的8086上运行的时间,现代“奔腾”要快得多,必须调整!

如果要产生与l0ms成倍数的延迟时间,可在BX寄存器中放入倍数。

例如要产生l秒的持续

时间,则在BX中放入100,以控制LOOP指令执行100×2801次,也就是10ms的100倍。

指令

如下:

MOVBX,100

WAIT:

MOVCX,2801

DELAY:

LOOPDELAY

DECBX

JNZWAIT

这样我们就能在修改后的BEEP程序的基础上编写一个任一频率(由Dl指定)和任一持续时

间(由CX和BX指定)的通用发声程序。

它包括三个步骤:

1.在2号定时器中的43端口送一个特定的数OB6H(101101lOB),此数对定时器的方式寄存器进行初始化,使定时器2准备接收计时常数。

2.在2号定时器中的42H端口装入一个l6位的计时常数(533H×896/频率),以建立将

要产生的声音频率。

3.把输出端口61H的0、1两位置1,发出声音。

下面举例说明8253计数器2产生一定频率的方波并送至扬声器发音的程序

例:

欲使8253的计数器2产生600Hz的方波,经滤波后送至扬声器发音,当按下任一键时声音停止。

试编写此程序。

8253的端口地址为40H~43H,8255A的端口地址为60H~63H。

解:

计数器2的时钟输入:

T2=t/f2=t/1.19MHz≈840ns

方波发生器OUT2的输出周期为:

1/600Hz≈m

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 小学作文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1