微机原理与接口技术
实验报告
实验一显示程序实验
一、实验目的
1. 掌握在PC机上以十六进制形式显示数据的方法;
2. 掌握部分DOS功能调用使用方法;
3. 熟悉Tddebug调试环境和Turbo Debugger的使用。
二、实验所用设备
1. PC微机一台。
三、实验内容
一般来说,程序需要显示输出提示运行的状况和结果,有的还需要将数据区中的内容显示在屏幕上。本实验要求将指定数据区的数据以十六进制数形式显示在屏幕上,并通过DOS功能调用完成一些提示信息的显示。实验中可使用DOS功能调用(INT 21H)。
(1) 显示单个字符输出
入口:AH=02H
调用参数:DL=输出字符
(2) 显示字符串
入口:AH=09H
调用参数:DS:DX=串地址,’$’为结束字符
(3) 键盘输入并回显
入口:AH=01H
返回参数:AL=输出字符
(4) 返回DOS系统
入口:AH=4CH
调用参数:AL=返回码
四、实验步骤
1.运行Tddebug软件,选择Edit菜单,根据实验内容的描述编
写实验程序,本实验显示部分参考实验流程如图1-1示;
2.使用Compile菜单中的Compile和Link对实验程序进行汇
编、连接;
3.使用Rmrun菜单中的Run,运行程序,观察运行结果;
4.使用Rmrun菜单中的Debug,调试程序,观察调试过程中,
数据传输指令执行后,各寄存器及数据区的内容;
5.更改数据区中的数据,考察程序的正确性。
图1-1 显示程序实验流程图
五、程序清单
DATA SEGMENT
MES DB 'laoshihao:', 0AH,0DH,'$' SD DB 'b'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START: MOV AX, DATA
MOV DS, AX
MOV DX, OFFSET MES
MOV AH, 09H
INT 21H
MOV DI, OFFSET SD
MOV AL, DS:[DI]
AND AL, 0F0H
SHR AL,4
CMP AL, 0AH
JB L1
ADD AL, 07H
L1: ADD AL, 30H
MOV DL, AL
MOV AH, 02H
INT 21H
MOV AL, DS:[DI]
AND AL, 0FH
CMP AL, 0AH
JB L2
ADD AL, 07H
L2: ADD AL, 30H
MOV DL, AL
MOV AH, 02H
INT 21H
MOV AX, 4C00H
INT 21H
CODE ENDS
END START
六、实验调试过程
调试过程中出现警告,显示没有使用堆栈段。但是程序编写本身没有使用,因此程序运行相对正常。第一个实验熟悉了轻松汇编软件的操作,为之后的实验打下了基础。
七、实验运行结果
实验二数据传送实验
一、实验目的
1. 熟悉Tddebug调试环境和Turbo Debugger的使用;
2. 掌握与数据有关的不同寻址方式。
二、实验所用设备
1. PC微机一台。
三、实验内容
将数据段中的一个字符串传送到附加段中,并输出附加段中的目标字符串到屏幕上。
实验程序:
DDATA SEGMENT
MSR DB "LAOSHIXINKULE!$"
LEN EQU $- MSR
DDATA ENDS
EXDA SEGMENT
MSD DB LEN DUP(?)
EXDA ENDS
MYSTACK SEGMENT STACK
DW 20 DUP(?)
MYSTACK ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DDATA, ES:EXDA
START: MOV AX, DDATA
MOV DS, AX
MOV AX, EXDA
MOV ES,AX
MOV SI, OFFSET MSR
MOV DI, OFFSET MSD
MOV BX, 0
MOV CX, LEN
NEXT: MOV AL, MSR[BX]
MOV ES:MSD[BX], AL
INC BX
LOOP NEXT
PUSH ES
POP DS
MOV DX, OFFSET MSD
MOV AH, 9
INT 21H
MOV AX, 4C00H
INT 21H
CODE ENDS
END START
四、实验步骤
1.运行Tddebug软件,选择Edit菜单编写实验程序;
2.使用Compile菜单中的Compile和Link对实验程序进行汇编、
连接;
3.使用Rmrun菜单中的Run,运行程序,观察运行结果;
4.使用Rmrun菜单中的Debug,调试程序,观察调试过程中,
数据传输指令执行后,各寄存器及数据区的内容;
5.更改数据区中的数据,考察程序的正确性。
五、实验调试过程
程序中使用了寄存器相对寻址的方式。编译、连接、运行后程序运行正常。
输入的字符显示在屏幕上。
六、实验运行结果
实验三数码转换程序实验
一、实验目的
掌握不同进制数及编码相互转换的程序设计方法。
二、实验所用设备
PC微机一台。
三、实验步骤
1.运行Tddebug软件,选择Edit菜单编写实验程序;
2.使用Compile菜单中的Compile和Link对实验程序进行汇编、
连接;
3.使用Rmrun菜单中的Run,运行程序,观察运行结果;
4.使用Rmrun菜单中的Debug,调试程序,观察调试过程中,
数据传输指令执行后,各寄存器及数据区的内容;
5.更改数据区中的数据,考察程序的正确性。
四、实验内容
计算机输入设备输入的信息一般是由ASCII码或BCD码表示的数据或字符,CPU用二进制数进行计算或其它信息处理,处理结果的输出又必须依照外设的要求变为ASCII码、BCD码或七段显示码等。因此,在应用软件中,各类数制的转换和代码的转换是必不可少的。计算机与外设间的数码转换关系如图3-1所示,数码对应关系如表3-1所示。
图3-1 计算机与外设间的数码转换关系
1.将ASCII码表示的十进制数转换为二进制数
十进制数可以表示为:Dn×10n+Dn-1×10n-1+…+D0×100 =Di×10i 其中Di代表十进制数1、2、3…9、0。
上式可以转换为:
ΣDi×10i=((…(Dn×10+Dn-1)×10)+Dn-2)×10+…+D1)×10+D0 由上式可归纳十进制数转换为二进制的方法:从十进制数的最高位Dn开始作乘10加次位的操作,依次类推,则可求出二进制数结果。
本实验要求将缓冲区中的一个五位十进制数00012的ASCII码转换成二进制数,并将转换结果按位显示在屏幕上。转换过程的参考流程如图3-2所示。
(1)实验流程图
图3-2 十进制ASCII转换为
二进制数参考流程(2)实验程序
DATA SEGMENT
MSR DB "00012"
LEN EQU $-MSR
DATA ENDS
CODE SEGMENT ;
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV SI,OFFSET MSR
MOV CX,LEN-1
MOV AL,DS:[SI]
MOV AH,0
SUB AX,30H
A1: MOV BX,0AH
MUL BX
INC SI
MOV DL,DS:[SI]
MOV DH,0
SUB DX,30H
ADD AX,DX
DEC CX
JNZ A1
MOV CL,16
MOV BX,AX
A2: ROL BX,1
MOV DL,BL
AND DL,01H
ADD DL,30H
MOV AH,2H
INT 21H
DEC CL
JNZ A2
MOV AX,4C00H
INT 21H
CODE ENDS
END START
(3)调试过程
调试过程正常没有出现问题。
(4)实验结果
2.将十进制数的ASCII码转换为BCD码
本实验要求将键盘输入的一个五位十进制数54321的ASC II码存放入数据区中,转换为BCD 码后,并将转换结果按位分别显示于屏幕上。若输入的不是十进制数的ASC II码,则输出“FF”。提示:
一字节ASC II码取其低四位即变为BCD码。转换部分的实验流程参见3-3。
(1)实验流程
图3-3 十进制ASCII转换为
BCD码参考流程
(2)实验程序
DATA SEGMENT
STRING DB 'INPUT:','$'
STRING1 DB 'OUTPUT:','$'
MSR DB 6,?,6 DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
LEA DX,STRING
MOV AH,09H
INT 21H
MOV DX,OFFSET MSR
MOV AH,0AH
INT 21H
MOV DL,0AH
MOV AH, 02H
INT 21H
MOV DL,0DH
MOV AH, 02H
INT 21H
LEA DX,STRING1
MOV AH,09H
INT 21H
MOV CL,[MSR+1]
MOV SI,0002H
MOV BX,OFFSET MSR A1: MOV AL,[BX+SI]
CMP AL,40H
JNC B1
SUB AL,30H
MOV CH,0
PUSH CX
MOV CL,4
MOV DH,AL
SHL DH,CL
A2: ROL DH,1
MOV DL,DH
AND DL,01H
ADD DL,30H
MOV AH,02H
INT 21H
DEC CL
JNZ A2
POP CX
INC SI
DEC CL
JNZ A1
B1: JZ B2
MOV DL,46H
MOV AH,02H
INT 21H
INC SI
DEC CL
JNZ A1
B2: MOV AX,4C00H
INT 21H
CODE ENDS
END START
(3)调试过程
调试过程中在换行显示时遇到了问题,无法换行显示。经过检查发现在显示过程中的换行代码写错了,改正之后程序显示正常。
(4)实验结果
3.将十六进制数的ASCII码转换为十进制数
十六位二进制数的值域为0-65535,最大可转换为五位十进制数。五位十进制数可表示为:
N D =D
4
×104+D
3
×103+D
2
×102+D
1
×10+D
因此,将十六位二进制数转换为五位ASCII码表示的十进制数,
就是求D
1-D
4
,并将它们转化为ASCII码。
本实验要求将缓冲区中存放的000CH的ASCII码转换成十进制数,并将转换结果显示在屏幕上。
(1)实验流程
图3-4 将十六进制数的ASCII码转换为十进制数
(2)实验程序
DATA SEGMENT
MSR DW 000CH
MDR DB 5 DUP(?),'$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV BX,OFFSET MDR
MOV SI,5
MOV AX,[MSR]
A1: DEC SI
MOV DX,0
MOV CX,0AH
DIV CX
ADD DL,30H
MOV [BX+SI],DL
CMP AX,0
JNE A1
JE A3
A2: DEC SI
MOV AL,30H
MOV [BX+SI],AL
CMP SI,0
JNE A2
A3: MOV DX,OFFSET MDR
MOV AH,09H
INT 21H
MOV AX,4C00H
INT 21H
CODE ENDS
END START
(3)调试过程
调试过程中在显示时遇到了问题,无法逐个显示。改为直接显示之后程序显示正常。
(4)实验结果
第17 页
4.BCD码转换为二进制码
本实验要求将四个二位十进制数的BCD码存放在某一内存单元中,转换出的二进制数码存入其后的内存单元中,转换结束,送屏幕显示。
(1)实验流程
第18 页
图3-5 BCD码转换为二进制码
参考流程
(2)实验程序
DATA SEGMENT
MSR DB 03H,02H,03H,05H,07H,06H,07H,08H,4 DUP(?) DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV BX,OFFSET MSR
MOV DI,8
MOV CX,4
MOV DH,0AH
A1: MOV SI,1
MOV AL,[BX+SI]
MUL DH
DEC SI
ADD AL,[BX+SI]
MOV [BX+DI],AL
PUSH CX
第19 页