微机原理考试编程.docx

上传人:b****0 文档编号:17153564 上传时间:2023-07-22 格式:DOCX 页数:19 大小:173.10KB
下载 相关 举报
微机原理考试编程.docx_第1页
第1页 / 共19页
微机原理考试编程.docx_第2页
第2页 / 共19页
微机原理考试编程.docx_第3页
第3页 / 共19页
微机原理考试编程.docx_第4页
第4页 / 共19页
微机原理考试编程.docx_第5页
第5页 / 共19页
微机原理考试编程.docx_第6页
第6页 / 共19页
微机原理考试编程.docx_第7页
第7页 / 共19页
微机原理考试编程.docx_第8页
第8页 / 共19页
微机原理考试编程.docx_第9页
第9页 / 共19页
微机原理考试编程.docx_第10页
第10页 / 共19页
微机原理考试编程.docx_第11页
第11页 / 共19页
微机原理考试编程.docx_第12页
第12页 / 共19页
微机原理考试编程.docx_第13页
第13页 / 共19页
微机原理考试编程.docx_第14页
第14页 / 共19页
微机原理考试编程.docx_第15页
第15页 / 共19页
微机原理考试编程.docx_第16页
第16页 / 共19页
微机原理考试编程.docx_第17页
第17页 / 共19页
微机原理考试编程.docx_第18页
第18页 / 共19页
微机原理考试编程.docx_第19页
第19页 / 共19页
亲,该文档总共19页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

微机原理考试编程.docx

《微机原理考试编程.docx》由会员分享,可在线阅读,更多相关《微机原理考试编程.docx(19页珍藏版)》请在冰点文库上搜索。

微机原理考试编程.docx

微机原理考试编程

第6章16位微机原理及其程序设计实验

本章主要介绍汇编语言程序设计,通过实验来学习80X86的指令系统、寻址方式以及程序的设计方法,同时掌握联机软件的使用。

6.1系统认识实验

6.1.1实验目的

掌握TD系列微机原理及接口技术教学实验系统的操作,熟悉Wmd86联机集成开发调试软件的操作环境。

6.1.2实验设备

PC机一台,TD-PITE实验装置一套。

6.1.3实验内容

编写实验程序,将00H~0FH共16个数写入内存3000H开始的连续16个存储单元中。

图6.4程序编辑界面

5.点击

,编译文件,若程序编译无误,则可以继续点击

进行链接,链接无误后方可以加载程序。

编译、链接后输出如图6.5所示的输出信息。

图6.5编译输出信息界面

6.连接PC与实验系统的通讯电缆,打开实验系统电源。

7.编译、链接都正确并且上下位机通讯成功后,就可以下载程序,联机调试了。

可以通过端口列表中的“端口测试”来检查通讯是否正常。

点击

下载程序。

为编译、链接、下载组合按钮,通过该按钮可以将编译、链接、下载一次完成。

下载成功后,在输出区的结果窗中会显示“加载成功!

”,表示程序已正确下载。

起始运行语句下会有一条绿色的背景。

如图2.6所示。

图2.6加载成功显示界面

8.将输出区切换到调试窗口,使用D0000:

3000命令查看内存3000H起始地址的数据,如图6.7所示。

存储器在初始状态时,默认数据为CC。

图6.7内存地址单元数据显示

9.点击按钮

运行程序,待程序运行停止后,通过D0000:

3000命令来观察程序运行结果。

如图6.8所示。

图6.8运行程序后数据变化显示

10.也可以通过设置断点,断点显示如图6.9所示,然后运行程序,当遇到断点时程序会停下来,然后观察数据。

可以使用E0000:

3000来改变该地址单元的数据,如图6.10所示,输入11后,按“空格”键,可以接着输入第二个数,如22,结束输入按“回车”键。

图6.9断点设置显示图6.10修改内存单元数据显示界面

实验例程文件名为Wmd861.asm。

6.1.5操作练习

编写程序,将内存3500H单元开始的8个数据复制到3600H单元开始的数据区中。

通过调试验证程序功能,使用E命令修改3500H单元开始的数据,运行程序后使用D命令查看3600H单元开始的数据。

6.2运算类编程实验

6.2.1实验目的

1.掌握使用运算类指令编程及调试方法。

2.掌握运算类指令对各状态标志位的影响及其测试方法。

3.学习使用软件监视变量的方法。

6.2.2实验设备

PC机一台,TD-PITE实验装置一套。

6.2.3实验内容及步骤

80X86指令系统提供了实现加、减、乘、除运算的基本指令,可对表6.2所示的数据类型进行算术运算。

表6.2数据类型算术运算表

数制

二进制

BCD码

带符号

无符号

组合

非组合

运算符

+、-、×、÷

+、-

+、-、×、÷

操作数

字节、字、多精度

字节(二位数字)

字节(一位数字)

1.二进制双精度加法运算

计算X+Y=Z,将结果Z存入某存储单元。

实验程序参考如下。

本实验是双精度(2个16位,即32位)加法运算,编程时可利用累加器AX,先求低16位的和,并将运算结果存入低地址存储单元,然后求高16位的和,将结果存入高地址存储单元中。

由于低16运算后可能向高位产生进位,因此高16位运算时使用ADC指令,这样在低16位相加运算有进位时,高位相加会加上CF中的1。

实验程序清单(例程文件名为:

A3-1.ASM)

SSTACKSEGMENTSTACK

DW64DUP(?

SSTACKENDS

PUBLICXH,XL,YH,YL,ZH,ZL;设置全局变量

DATASEGMENT

XLDW?

;X低位

XHDW?

;X高位

YLDW?

;Y低位

YHDW?

;Y高位

ZLDW?

;Z低位

ZHDW?

;Z高位

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVAX,XL

ADDAX,YL;X低位加Y低位

MOVZL,AX;低位和存到Z的低位

MOVAX,XH

ADCAX,YH;高位带进位加

MOVZH,AX;存高位结果

JMPSTART;在此行设置断点,以观察变量值

CODEENDS

ENDSTART

实验步骤

(1)编写程序,经编译、链接无误后装入系统。

(2)程序装载完成后,点击‘变量区’标签将观察窗切换到变量监视窗口。

(3)点击

,将变量XH,XL,YH,YL,ZH,ZL添加到变量监视窗中,然后修改XH,XL,YH,YL的值,如图6.13所示,修改XH为0015,XL为65A0,YH为0021,YL为B79E。

(4)在JMPSTART语句行设置断点,然后运行程序。

(5)当程序遇到断点后停止运行,查看变量监视窗口,计算结果ZH为0037,ZL为1D3E。

(6)修改XH,XL,YH和YL的值,再次运行程序,观察实验结果,反复测试几组数据,验证程序的功能。

图6.13变量监视窗口

2.十进制的BCD码减法运算

计算X-Y=Z,其中X、Y、Z为BCD码。

实验程序参考例程。

实验程序清单(例程文件名为A3-2.ASM)

SSTACKSEGMENTSTACK

DW64DUP(?

SSTACKENDS

PUBLICX,Y,Z;定义全局变量

DATASEGMENT

XDW?

YDW?

ZDW?

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVAH,00H

SAHF

MOVCX,0002H

MOVSI,OFFSETX

MOVDI,OFFSETZ

A1:

MOVAL,[SI]

SBBAL,[SI+02H]

DAS

PUSHF

ANDAL,0FH

POPF

MOV[DI],AL

INCDI

INCSI

LOOPA1

JMPSTART;设置断点,以方便观察变量。

CODEENDS

ENDSTART

实验步骤

(1)输入程序,编译、链接无误后装入系统。

(2)点击

将变量X,Y,Z添加到变量监视窗中,并为X,Y赋值,假定存入40与12的BCD码,即X为0400,Y为0102。

(3)在JMPSTART语句行设置断点,然后运行程序。

(4)程序遇到断点后停止运行,观察变量监视窗,Z应为0208。

(5)重新修改X与Y的值,运行程序,观察结果,反复测试几次,验证程序正确性。

3.乘法运算

实现十进制数的乘法运算,被乘数与乘数均以BCD码的形式存放在内存中,乘数为1位,被乘数为5位,结果为6位。

实验程序参考例程。

实验程序清单(例程文件名为A3-3.ASM)

SSTACKSEGMENTSTACK

DW64DUP(?

SSTACKENDS

DATASEGMENT

DATA1DB5DUP(?

);被乘数

DATA2DB?

;乘数

RESULTDB6DUP(?

);计算结果

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

CALLINIT;初始化目标地址单元为0

MOVSI,OFFSETDATA2

MOVBL,[SI]

ANDBL,0FH;得到乘数

CMPBL,09H

JNCERROR

MOVSI,OFFSETDATA1

MOVDI,OFFSETRESULT

MOVCX,0005H

A1:

MOVAL,[SI+04H]

ANDAL,0FH

CMPAL,09H

JNCERROR

DECSI

MULBL

AAM;乘法调整指令

ADDAL,[DI+05H]

AAA

MOV[DI+05H],AL

DECDI

MOV[DI+05H],AH

LOOPA1

A2:

MOVAX,4C00H

INT21H;程序终止

;===将RESULT所指内存单元清零===

INIT:

MOVSI,OFFSETRESULT

MOVCX,0003H

MOVAX,0000H

A3:

MOV[SI],AX

INCSI

INCSI

LOOPA3

RET

;===错误处理===

ERROR:

MOVSI,OFFSETRESULT;若输入数据不符合要求则RESULT所指向内存单元全部写入E

MOVCX,0003H

MOVAX,0EEEEH

A4:

MOV[SI],AX

INCSI

INCSI

LOOPA4

JMPA2

CODEENDS

ENDSTART

实验步骤

(1)编写程序,编译、链接无误后装入系统。

(2)查看寄存器窗口获得CS的值,使用U命令可得到数据段段地址DS,然后通过E命令为被乘数及乘数赋值,如被乘数:

0102030405,乘数:

01,方法同实验内容1。

(3)运行程序,待程序运行停止。

(4)通过D命令查看计算结果,应为:

000102030405;当在为被乘数和乘数赋值时,如果一个数的低4位大于9,则查看计算结果将全部显示为E。

(5)反复测试几组数据,验证程序的正确性。

6.3循环程序设计实验

6.3.1实验目的

1.加深对循环结构的理解。

2.掌握循环结构程序设计的方法以及调试方法。

6.3.2实验设备

PC机一台,TD-PITE实验装置一套。

6.3.3实验内容及步骤

1.计算S=1+2×3+3×4+4×5+…+N(N+1),直到N(N+1)项大于200为止。

编写实验程序,计算上式的结果,参考流程图如图6.16所示。

实验程序清单(例程文件名为:

A5-1.ASM)

SSTACKSEGMENTSTACK

DW64DUP(?

SSTACKENDS

CODESEGMENT

ASSUMECS:

CODE

START:

MOVDX,0001H

MOVBL,02H

A1:

MOVAL,BL

INCBL

MULBL

ADDDX,AX;结果存于DX中

CMPAX,00C8H;判断N(N+1)与200的大小

JNAA1

MOVAX,4C00H

INT21H;程序终止

CODEENDS

ENDSTART

实验步骤

(1)编写实验程序,编译、链接无误后装入系统。

图6.16程序流程图

(2)运行程序,待程序运行停止。

(3)运算结果存储在寄存器DX中,查看结果是否正确。

(4)可以改变N(N+1)的条件来验证程序功能是否正确,但要注意,结果若大于0FFFFH将产生数据溢出。

2.求某数据区内负数的个数

设数据区的第一单元存放区内单元数据的个数,从第二单元开始存放数据,在区内最后一个单元存放结果。

为统计数据区内负数的个数,需要逐个判断区内的每一个数据,然后将所有数据中凡是符号位为1的数据的个数累加起来,即得到区内所包含负数的个数。

实验程序流程图如图6.17所示。

实验程序清单(例程文件名为:

A5-2.ASM)

SSTACKSEGMENTSTACK

DW64DUP(?

SSTACKENDS

CODESEGMENT

ASSUMECS:

CODE

START:

MOVDI,3000H;数据区首地址

MOVCL,[DI];取数据个数

XORCH,CH

MOVBL,CH

INCDI;指向第一个数据

A1:

MOVAL,[DI]

TESTAL,80H;检查数据首位是否为1

JEA2

INCBL;负数个数加1

A2:

INCDI

LOOPA1

MOV[DI],BL;保存结果

MOVAX,4C00H

INT21H;程序终止

CODEENDS

ENDSTART

实验步骤

(1)按实验流程编写实验程序。

(2)编译、链接无误后装入系统。

(3)键入E3000,输入数据如下:

3000=06(数据个数)

3001=12

3002=88

3003=82

3004=90

3005=22

3006=33图6.17程序流程图

(4)先运行程序,待程序运行停止。

(5)查看3007内存单元或寄存器BL中的内容,结果应为03。

(6)可以进行反复测试来验证程序的正确性。

6.4静态存储器扩展实验

6.4.1实验目的

1.了解存储器扩展的方法和存储器的读/写。

2.掌握CPU对16位存储器的访问方法。

6.4.2实验设备

PC机一台,TD-PITE实验装置一套,示波器一台。

6.4.3实验内容

编写实验程序,将0000H~000FH共16个数写入SRAM的从0000H起始的一段空间中,然后通过系统命令查看该存储空间,检测写入数据是否正确。

6.4.4实验原理

存储器是用来存储信息的部件,是计算机的重要组成部分,静态RAM是由MOS管组成的触发器电路,每个触发器可以存放1位信息。

只要不掉电,所储存的信息就不会丢失。

因此,静态RAM工作稳定,不要外加刷新电路,使用方便。

但一般图8.162256引脚图

SRAM的每一个触发器是由6个晶体管组成,SRAM芯片的集成度不会太高,目前较常用的有6116(2K×8位),6264(8K×8位)和62256(32K×8位)。

本实验平台上选用的是62256,两片组成32K×16位的形式,共64K字节。

62256的外部引脚图如图8.1所示。

本系统采用准32位CPU,具有16位外部数据总线,即D0、D1、…、D15,地址总线为BHE#(#表示该信号低电平有效)、BLE#、A1、A2、…、A20。

存储器分为奇体和偶体,分别由字节允许线BHE#和BLE#选通。

存储器中,从偶地址开始存放的字称为规则字,从奇地址开始存放的字称为非规则字。

处理器访问规则字只需要一个时钟周期,BHE#和BLE#同时有效,从而同时选通存储器奇体和偶体。

处理器访问非规则字却需要两个时钟周期,第一个时钟周期BHE#有效,访问奇字节;第二个时钟周期BLE#有效,访问偶字节。

处理器访问字节只需要一个时钟周期,视其存放单元为奇或偶,而BHE#或BLE#有效,从而选通奇体或偶体。

写规则字和非规则字的简单时序图如图8.2所示。

图8.2写规则字(左)和非规则字(右)简单时序图

实验单元电路图

图8.3SRAM单元电路图

图8.4SRAM实验接线图

实验程序清单(MEM1.ASM)

SSTACKSEGMENTSTACK

DW32DUP(?

SSTACKENDS

CODESEGMENT

STARTPROCFAR

ASSUMECS:

CODE

MOVAX,8000H;存储器扩展空间段地址

MOVDS,AX

AA0:

MOVSI,0000H;数据首地址

MOVCX,0010H

MOVAX,0000H

AA1:

MOV[SI],AX

INCAX

INCSI

INCSI

LOOPAA1

MOVAX,4C00H

INT21H;程序终止

STARTENDP

CODEENDS

ENDSTART

 

6.4.5实验步骤

(注:

本章实验选择16位寄存器)

1.实验接线图如图8.4所示,按图接线。

2.编写实验程序,经编译、链接无误后装入系统。

3.先运行程序,待程序运行停止。

8.通过D命令查看写入存储器中的数据:

D8000:

0000回车,即可看到存储器中的数据,应为0000、0001、0002、…、000F共16个字。

5.改变实验程序,按非规则字写存储器,观察实验结果。

6.改变实验程序,按字节方式写存储器,观察实验现象。

7.将实验程序改为死循环程序,分别按规则字与非规则字的方式写存储器,并使用示波器观察WR#信号的波形,分析实验现象,掌握16位外部数据总线的操作方法。

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

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2