微机原理及接口技术.docx
- 文档编号:5992492
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:61
- 大小:367.48KB
微机原理及接口技术.docx
《微机原理及接口技术.docx》由会员分享,可在线阅读,更多相关《微机原理及接口技术.docx(61页珍藏版)》请在冰豆网上搜索。
微机原理及接口技术
《汇编与接口技术》课程
实验指导书
西北工业大学软件与微电子学院
第一章软件实模式实验部分
这部分实验只涉及微机原理和汇编语言编程,应用的实验环境为源程序编辑环境、编译、连接和调试程序等。
因为在实模式下的实现环境比较成熟,且容易理解,所以选择西安唐都科教仪器公司的Tddebug集成调试软件,或MASM5.0基于MS-DOS的环境。
我们选择Tddebug集成调试软件。
预备知识Tddebug集成调试软件使用简要说明
Tddebug集成调试软件。
它具有较强的多窗口源语句调试功能。
由于Tddebug是分步操作运行的,各步操作的详细说明或命令的语法结构可查阅相关资料,这里只就Tddebug的调试过程作以简要说明。
在WINDOS系统下选择MSDOS图标指示的Tddebug.exe,点击,在DOS环境下运行进入Tddebug集成操作软件平台,按键Alt-E,EDIT编辑提示信息,首先给出文件名,注意路径最好为D:
/TANGDU/PITA/32子目录下,此时文件名的后缀必须是“.ASM”,给出文件名后。
就可对汇编语言源程序进行编辑了,其编辑环境与WINDOWS环境下的EDIT软件没什么两样。
接着就是汇编、连接和调试了。
1.编辑源程序:
按键Alt-E,(EDIT文件名ASM↙)
说明:
教科书中的伪指令·STARTUP用下列两条指令代替
MOVAX,@DATA
MOVDS,AX
伪指令·EXIT用DOS的21H号功能调用代替
MOVAH,4CH
INT21H
2.汇编源程序:
按键Alt-C选择菜单Compile的编译项
对带·ASM扩展名的汇编语言源程序进行汇编,生成目标文件·OBJ。
若汇编结果出错,继续步骤l,否则继续步骤3
3.连接:
按键Alt-C,子菜单移至LINK项,对第二步生成的目标文件·OBJ进行连接,成功则产生“.EXE”文件。
如果几经修改,则第二、三步可选Alt-C子菜单下的ALLBUILD项,“*.OBJ”和“*.EXE”可一次性建立完成。
4.调试程序:
按键Alt-R使用Rmrun菜单中的Run运行程序,观察运行结果。
5.使用Rmrun菜单中的Debug调试程序,观察调试过程中各个指令执行后CPU各寄存器的数据内容。
各个命令参考Tddebug调试命令表。
6.按键Alt-Q--退出Tddebug集成操作软件平台。
表1Tddebug调试命令表
命令内容
格式
命令说明
Loadfile
lfilename
装载可执行程序
Reloadfde
reload
重新装载当前调试程序
Trace
T[[seg:
]offset]
单步执行一条指令
Step
P[=seg:
offset)
单句执行一条指令
Go
G=[seg:
]offset
执行程序
Gobreak
gb[=[seg:
]offset]
断点执行程序
Setbreakpoint
b
设置断点
Listbreakpointtable
b1
列断点表
Clearbreakpoint
Bcnumber(O,1,2,3)
清除断点
Unassemble
U[[seg:
]offset]
反汇编
Dump
d[[seg:
]offset]
显示存储单元内容
Enter
e(seg:
]offset
修改存储单元
Register
r[regname]
显示/修改寄存器内容
Peek
Peektype(b,w,d)phys_add
从物理地址取数据(字节、字、双字)
Poke
poketypo(b,w,d)phys_addvalue
向物理地址写数据(字节、字、双字)
Cpu
cpu
显示系统寄存器
GDT
gdt
显示全局描述符表
IDT
idt
显示中断描述符表
LDT
ldt
显示局部描述符表
TSS
Tss
显示任务状态段
Quit
q
退出调试状态
实验部分
实验一显示和数据传送程序实验
一.实验目的
1.熟悉Tddebug集成操作软件环境下建立、汇编、链接、调试和运行汇编语言程序的全过程。
2.掌握在PC机上以十六进制数形式显示数据的方法。
3.掌握部分DOS功能调用的使用方法。
4.掌握汇编语言程序结构中数据段、堆栈段、代码段的定义方法及内存分配。
5.学会Tddebug调试程序主要命令的使用方法。
二.实验内容
1.将指定数据区的数据以十六进制数形式显示在屏幕上,并通过DOS功能调用完成一些提示信息的显示。
2.将数据段中的一个字符传送到附加段中,并输出附加段中的目标字符串到屏幕上。
三.实验预习内容
一般来说,有许多程序需要显示运行的状况和结果,有的还需要将数据区中的内容显示在屏幕上。
本实验将指定数据区的数据以16进制数形式显示在屏幕上,并通过DOS功能调用完成一些提示信息的显示。
实验中可使用DOS功能调用(INT21H)。
1.输出单字符
调用号:
02,入口参数:
DL
功能:
将DL的内容显示(DL=待输出字符的ASII码)
MOVDL,‘A’
MOVAH,02
INT21H
程序执行后,在显示器上显示字符A
2.输出字符串
调用号:
09H,入口参数:
DS:
DX(缓冲区首地址)
功能:
将缓冲区内以&结尾的字串显示,&(24H)不显示。
BUFDB‘ABCDEF&’
MOVDX,OFFSETBUF
MOVAH,09H
INT21H
执行结果在显示器上显示ABCDEF
3.在计算机中,各种数据都是以0、1码的形式存储在存储器中,显示出来后往往已经由相应的软件做了加工,变成了人们希望的形式。
存储器是以字节组织在一起的存储器堆,每一个字节由8位二进制数组成,一个十六进制位可对应四个二进制位的16个编码,所以关于二进制转换为十六进制,可以对应四位二进制进行处理,当然得注意高低四位的区分。
4.关于显示,屏幕上出现的应该是可见字符或图形,数字0000转换成十六进制也就是0,屏幕上显示为“0”,即计算机内部输出到屏幕接口寄存器一个关于0的ASCII码“30H”即可。
四.设计程序
参考程序流程和清单
程序清单1
DATASEGMENTMESDB‘Showaashex:
’,0AH,0DH,’$’
SDDB‘a’
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
STARTMOVAX,DATA
MOVDS,AX
MOVDX,OFFSETMES
MOVAH,09H
INT21H
MOVDI,OFFSETSD
MOVAL,DS:
[DI]
ANDAL,0F0H
SHRAL,4
CMPAL,0AH
JBC2
ADDAL,07H
C2:
ADDAL,30H
MOVDL,AL
MOVAH,02H
INT21H
MOVAL,DS:
[DI]
ANDAL,0FH
CMPAL,0AH
JBC3
ADDAL,07H
C3:
ADDAL,30H
MOVDL,AL
MOVAH,02H
INT21H
MOVAX,4C00H
INT21H
CODEENDS
ENDSTART
五.实验环境及设备清单
PC机一台。
六、实验步骤/操作指导
1.运行Tddebug软件,按菜单逐步操作,将自己设计的源程序输入,处理,调试,修改,运行,直至结果与预设计相吻合。
例如:
将“A”的ASCII码送屏幕显示。
查表得“A”的ASCII码是:
41H,对应得二进制是:
01000001B,经转换应在屏幕上显示41H,转换过程应该是将01000001B得高四位0100转换成4,再将4转换成4的ASCII码34H,通过2号功能调用送到屏幕上,显示为4;低四位0001转换成16进制为1,再转换成1的ASCII码31H,通过2号功能调用送到屏幕上,显示为1。
2.利用Compile菜单中的Compile和Link对实验程序进行汇编、连接。
3.利用Rmrunt菜单中的Run运行程序,观察运行结果。
4.使用Rmrun菜单中的Debug调试程序,观察调试过程中数据传输指令执行后,各
寄存器及数据区的内容..
5.更改数据区中的数据,考察程序的正确性。
七.实验报告要求
1.画出有关内容1、2的程序流程框图。
2.列出从进入Tddebug集成环境到完成一个实验内容操作的详细步骤及在内存中看到的实验数据和结果。
3.写出程序清单1、2,作出相应的注释。
4.写出实验中遇到的问题,以及你的对策或解决方法。
八.实验思考题
1.编写源程序为什么要有指令和伪指令?
2.数据传送指令有多种形式,那种指令可隐含指示传送的源在数据段,目标在附加段?
3.什么是初始化?
编程为什么要初始化?
4.能不能给段寄存器进行立即数方式赋值,为什么?
5.若BP=1500H,SI=2500H,DS=2000H,ES=3000H,SS=4000H,假设按16位实模式操作,则指令MOVAL,[BP+SI+4200H],其源操作数地寻址方式为___________,访问内存的物理地址为_________。
实验二数码转换实验
一.实验目的
练习各类数制的转换和代码的转换。
二.实验内容
1.将ASCII码表示的十进制数转换为二进制数
2.将十进制数的ASCII码转换为BCD码
3.将十六进制数的ASCII码转换为十进制数
4.将BCD码转换为二进制码
三.实验预习内容
实验内容说明:
计算机输入设备输入的信息一般是由ASCⅡ码或BCD码表示的数据或字符,CPU一般均用二进制数进行计算或用其他信息进行处理,处理的结果又必须依照外设的要求变为ASCⅡ码、BCD码或七段显示码等。
因此,在应用软件中,各类数制的转换和代码的转换是必不可少的。
计算机数码转换关系如图2所示,数码对应关系如表2所示。
段码
图2-1计算机与外设间的数码转换关系
十进制数可以表示为:
其中Di代表十进制数l、2、3、…、9、0
从十进制数的最高位开始做乘10加次位的操作,依次类推,则可求出二进制的结果。
本实验要求将缓冲区中的一个5位十进制数00012的ASCII码转换成二进制数,并将转换结果按位显示在屏幕上。
2.将十进制数的ASCH码转换为BCD码
本实验要求将键盘输入的一个5位十进制数54321的ASCⅡ码存放在数据区中,转换为BCD码后,将转换结果按位分别显示于屏幕上。
若输入的不是十进制数的ASCⅡ码,则输出“FF”。
提示:
一字节ASCH码取其低4位即变为BCD码。
3.将十六进制数的ASCII码转换为十进制数
十六位二进制数的值域为0~65535,最大可转换为5位十进制数。
五位十进制数可表示为:
ND=D4×104+D3×103+D2×102++Dl×l0+Do
因此,将十六位二进制数转换为5位ASCII码表示的十进制数,就是求D1~D4,并将它们转化为ASCII码。
本实验要求将缓冲区中存放的000CH的ASCII码转换成十进制数,并将转换结果显示在屏幕上。
4.BCD码转换为二进制码本实验要求将4个二位十进制数的BCD码存放在某一内存单元中,转换出的二进制数码存入其后的内存单元中,转换结束,送屏幕显示。
表2-1数码转换对应关系
十六进制数
BCD码
二进制机器码
ASCⅡ码
七段码
共阳
共阴
0
0000
0000
30H
40H
3FH
1
0001
0001
31H
79H
06H
2
0010
0010
32H
24H
5BH
3
0011
0011
33H
30H
4FH
4
0100
0100
34H
19H
66H
5
0101
0101
35H
12
6DH
6
0110
0110
36H
02H
7DH
7
0111
0111
37H
78H
07
8
1000
1000
38H
00H
7FH
9
1001
100l
39H
18
67H
A
1010
41H
08H
77H
B
1011
42H
03H
7CH
C
1100
43H
46
39H
D
1101
44H
21H
5EH
E
1110
45H
06H
79H
F
1111
46H
0EH
71H
四.实验环境及设备清单
PC机一台。
五.设计实验程序
;参考程序流程
图2-3将ASCII码表示的十进制数转换为二进制数
图2-2十进制ASCII码转换为二进制数
六.实验步骤/操作指导
1.运行Tddebug软件,按菜单逐步操作,利用Edit菜单将自己设计的源程序输入计算机。
2.利用Compile菜单中的Compile和Link对实验程序进行汇编、连接。
3.利用Rmrunt菜单中的Run运行程序,观察运行结果。
4.使用Rmrun菜单中的Debug调试程序,观察调试过程中数据传输指令执行后,各寄存器及数据区的内容..
5.更改数据区中的数据,考察程序的正确性。
七.实验报告要求
1.画出有关内容3、4的程序流程框图。
2.列出从进入Tddebug集成环境到完成一个实验内容操作的详细步骤及在内存中看到的实验数据和结果。
3.写出程序清单3、4,作出相应的注释。
4.写出实验中遇到的问题,以及你的对策或解决方法。
八.实验思考题
1.为什么用C语言编程时就没有感到要进行数据转换后才能输出,而编写汇编语言程序却需要进行输出转换?
2.二进制和十六进制之间存在着自然组合关系,怎么转换?
3.要屏幕上可见,为什么要借用2号功能调用输出对应的ASCII码?
4.8086CPU支持处理的数据宽度有________
A.8位B.16位
C.64位D.1位
5.常用的数码转换有几种?
实验三运算类程序和分支程序设计实验
一.实验目的
1.掌握运算类指令编程及调试方法。
2.掌握运算类指令对各状态标志位的影响及测试方浊
3.掌握分支程序的设计方法
4.掌握用组合BCD码表示数据的方法,并熟悉其加、减、乘、除运算。
5.学会Tddebug调试程序主要命令的使用方法。
二.实验内容
1.计算两个数的加减乘除后的结果,并输出到屏幕上。
2.求无符号字节序列中的最大值和最小值。
三.实验预习内容
80x86指令系统提供了实现加、减、乘、除运算的基本指令,可对二进制带符号和无符号的数据、组合BCD码、非组合BCD码类型进行算术运算。
当然,程序有顺序、循环、分支和子程序四种结构形式,分支结构的实现一般依赖与CPU指令系统中的条件转移指令。
1.二进制双精度加法运算
本实验要求计算X+Y=Z,并将结果Z输出到屏幕,其中X=001565AOH.Y=0021879EH。
实验利用累加器AX,先求低16位和,并存入低地址存储单元,肝求高16位和,再存入高地址存储单元。
由于低位和可能向高位有进位,因而高位字相加语句需用ADC指令,则低位相加有进位时,CF=l,高位字相加时同时加上CF中的l。
在80386以上微机中可以直接使用32位寄存器和32位加法指令完成本实验的功能。
2.十进制数的BCD码减法运算
本实验要求计算X-Y=Z,其中,X、Y、Z为BCD码,X=0400H,Y=0102H.
注意BCD码运算的宽度和调整对象,组合BCD码,运算宽度为字节型,调整对象为AL;非组合BCD码,运算宽度为半字节型,而且是针对字节型数据的低半字节,调整对象为AL;
3.乘法运算
本实验要求实现十进制数的乘法,被乘数和乘数均以BCD码形式存放于内存中,被乘数为54320H,乘数为3H,运算结束后将乘积显示在屏幕上。
4.用减奇数实现开平方运算
80x86指令系统中有乘除法指令但没有开平方指令,因此,开平方运算是通过程序来实现的。
用减奇数法可求得近似平方根,获得平方根的整数部分。
我们知道,N个自然数中的奇数之和等于N2。
即
1+3+5=9=32。
1+3+5+7=16=42
1+3+5+7+9+11+13+15=64=82
若要做s的开方运算,就可以从S中逐次减去自然数中的奇数1,3,5,7…,一直进行到被减数为0或被减数不够减下一个自然数的奇数为止,然后统计减去自然数的奇数个数,它就是S的近似平方根。
本实验要求利用减奇法计算0040H的开平方值,并将运算结果显示在屏幕上。
5.本实验要求通过求无符号字节序列中的最大值和最小值来反映其结构形式
实验可以使用BH和BL作为暂存现行的最大值和最小值,且在程序的初始将BH和BL初始化为首字节的内存,然后进入循环操作。
在循环操作中,依次从字节序列中逐个取出一个字节的内容与BH和BL进行比较,若取出的字节内容比BH的内容大或比BL中的内容小,则修改之。
当循环结束操作时,将BH和BL分别送屏幕显示。
四.实验环境及设备清单
PC机一台。
五、实验步骤/操作指导
1.运行Tddebug软件,按菜单逐步操作,利用Edit菜单将自己设计的源程序输入计算机。
2.利用Compile菜单中的Compile和Link对实验程序进行汇编、连接。
3.利用Rmrunt菜单中的Run运行程序,观察运行结果。
4.使用Rmrun菜单中的Debug调试程序,观察调试过程中数据传输指令执行后,各寄存器及数据区的内容..
5.更改数据区中的数据,考察程序的正确性。
六.设计实验程序流程和程序
参考流程:
如图3-1所示
Y
图3-1分支程序实验流程图
七.实验报告要求
1.画出有关内容的程序流程框图。
2.列出从进入Tddebug集成环境到完成一个实验内容操作的详细步骤及在内存中看到的实验数据和结果。
3.写出程序清单,作出相应的注释。
4.写出实验中遇到的问题,以及你的对策或解决方法。
八.实验思考题
1.为什么说计算机既能进行二进制运算又能进行十进制运算?
2.什么运算指令只能进行字节处理,什么运算指令中的参数可以是字节、字、双字等?
3.计算机中常用的BCD码
A.是二进制数
B.是十六进制数
C.是二进制编码的十进制数
D.是不带符号数的二进制形式
4.实现将AL寄存器中的低4位置1的指令为______
A.ANDAL,0FHB.ORAL,0FH
C.TESTAL,0FHD.XORAL,0FH
5.DAA、AAA和AAM的区别是什么?
实验四循环程序设计和子程序设计实验
一.实验目的
1.掌握循环程序的设计方法。
2.掌握子程序的定义调用方法
3.掌握汇编语言程序结构中数据段、堆栈段、代码段的定义方法及内存分配。
4.掌握系统功能调用程序的使用和编写方法。
二.实验内容
1.统计某数据区内负数的个数。
2.将指定数据区的数据搬移到另一个数据区。
3.排序实验。
三.实验预习内容
1.统计内负数的个数实验
本实验要求通过求某数据区内负数的个数来表现循环程序的结构形式。
要求实验程序在数据区中存放一组数据,为统计负数的个数,逐个判断区内的数据,然后将所有数据中凡是符号位为1的数据的个数累由加起来,即得到区内所包含负数的个数。
循环程序设计分为设置循环初始状态、循环体、循环控制条件三部分
(1)设置初始部分:
设置循环次数,地址指针或其它初始状态。
(2)循环体:
包括工作部分和修改部分。
(3)控制部分:
控制循环次数。
循环结构分为单循环和多重循环。
控制方式有多种:
∙计数控制:
事先已知循环次数,每次循环加或减计数,并判定总次数以达到控制循环。
∙条件控制:
事先不知循环次数,在循环时判定某种条件的真假达到控制循环。
∙状态控制:
事先设定二进制位的状态,或由外界干予,测试开关状态,决定循环。
例.(循环控制举例)编程序统计AX寄存器中1的个数。
(采用AX=0?
做为循环的条件)
CODESEGMENT
ASSUMECS:
CODE
START:
MOVCX,0;存1的个数
AGAIN:
TESTAX,0FFFFH
JZB
SALAX,1
JNCA
INCCX
A:
JMPAGAIN
B:
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
数据移动实验
本实验要求将指定数据区的数据搬到另一个数据区,并通过子程序调用的方法,将搬移的数据显示在屏幕上。
通用的数据移动子程序:
调用条件:
(1)BUF1和BUF2同在一数据段中;
(2)调用前DS:
SI指向源数据块;
(3)调用前DS:
SI指向源数据块;
(4)CX为移动块长度(LEN);
(5)DF=0
参考MOVE子程序:
MOVEPROC
CMPSI,DI
JAA2
ADDDI,CX
ADDSI,CX
DECSI
DECDI
STD
A2:
REPMOVSB
RET
MOVEENDP
在汇编程序设计中,用户通常会将常用的具有特定功能的程序段编制成子程序使用。
一般过程定义伪操作的格式如下:
procedurenamePROCAttribute
:
:
procedurenameENDP
其中Attribute是指类型属性,可以是NEAR或FAR,调用程序和过程在同一个代码段中使用NEAR属性,不在同一个代码段中则使用FAR属性。
对于两个数据块分离的情况,数据的传送从数据块的首地址开始,或者从数据块的末地址开始均可。
但对于有部分重叠的情况,则要加以分析,否则重叠部分会因搬移而遭到破坏。
所以搬移过程可以通过以下两个方式完成:
当源数据块首地址>目标块旨地址时,从数据块的首地址开始传送数据;当源数据块首地址<目标块首地址时,从数据块的末地址开始传送数据。
例.(子程序举例)做十进制加法44332211+88776655
DATASEGMENT
ADB11H,22H,33H,44H,00H
BDB55H,66H,77H,88H,00H
SUMDB20DUP(?
)
DATAENDS
STACKSEGMENT
STADB20DUP(?
)
TOPEQULENGTHSTA
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
START:
MOVAX,DATA
MOVDS,AX
MOVES,AXAABPROCNEAR
MOVAX,STACKLODSB
MOVSS,AXADCAL,[BX]
MOVSP,TOPDAA
MOVSI,OFFSETASTOSB
MOVDI,OFFSETSUMINCBX
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 接口 技术