微型计算机原理与接口技术
实验报告
实验名称:
实验一 INTEL88 软件实验
实验二 8259A 硬件中断实验
实验三 可编程定时器/计数器 8253 实验
实验四 并行接口 8255A 输入输出实验
实验五 A/D 转换实验
实验六 D/A 转换实验
班
学
姓
级:
号:
名:
指导老师:
王俊宏
实验一 INTEL88 软件实验
(一) 两个多位十进制数相减实验
1.实验要求
将两个多位十进制数相减,要求被减数,减数均以 ASCII 码形式按顺序存放在以 DATAI
和 DATA2 为首的 5 个内存单元中(低位在前),并且先后在数码管上显示出来,相减的结果转
化为 ASCII 码送回 DATA。
2.实验目的
1.学习数据传送和算术运算指令的用法。
2.熟悉在 PC 机上建立、汇编、链接、调试和运行汇编语言程序的过程。
3.程序说明:
开始
调用子程序 LEDSHOW 显示被减数和减数
被减数和减数转换成十六进制数
设置计数值
清除最低进位位
带进位减
结果送 RESULT
N
调整偏移量
计数值-1=0
Y
调用子程序 LEDSHOW 显示结果
结束
4.源程序清单及执行结果:
DATA SEGMENT
DATA1 DB 33H,39H,31H,37H,38H ;第一个数据(作为被减数)
DATA2 DB 36H,35H,30H,38H,32H ;第二个数据(作为减数)
MES1 DB '-','$'
MES2 DB '=','$'
DATA ENDS
STACK SEGMENT ;堆栈段
STA DB 20 DUP(?)
TOP EQU 20
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA
START: MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV AX,STACK
MOV SS,AX
MOV AX,TOP
MOV SP,AX
MOV SI,OFFSET DATA1
MOV BX,05
CALL DISPL ;显示被减数
MOV AH,09H
LEA DX,MES1
INT 21H
MOV SI,OFFSET DATA2
MOV BX,05 ;显示减数
CALL DISPL
MOV AH,09H
LEA DX,MES2
INT 21H
MOV SI,OFFSET DATA1
MOV DI,OFFSET DATA2
CALL SUBA ;减法运算
MOV SI,OFFSET DATA1
MOV BX,05 ;显示结果
CALL DISPL
MOV DL,0DH
MOV AH,02H
INT 21H
MOV DL,0AH
MOV AH,02H
INT 21H
INT 21H
MOV AX,4C00H
INT 21H
DISPL PROC NEAR ;显示子功能
DSI: MOV AH,02
MOV DL,[SI+BX-1] ;显示字符串中一字符
INT 21H DEC BX ;修改偏移量
JNZ DSI RET
DISPL ENDP
SUBA PROC NEAR
MOV DX,SI
MOV BP,DI
MOV BX,05
SU1: SUB BYTE PTR[SI+BX-1],30H
SUB BYTE PTR[DI+BX-1],30H
DEC BX ;将 ASCII 码表示的数字串
JNZ SU1 ;转化为十六进制的数字串
MOV SI,DX
MOV DI,BP
MOV CX,05 ;包括进位,共 5 位
CLC ;清进单位
SU2: MOV AL,[SI]
MOV BL,[DI]
SBB AL,BL ;带进位相减
AAS ;非组合 BCD 码的减法调整
MOV [SI],AL ;结果送被减数区
I NC SI
INC DI ;指向下一位
LOOP SU2 ;循环
MOV SI,DX
MOV DI,BP
MOV BX,05
SU3: ADD BYTE PTR [SI+BX-1],30H
ADD BYTE PTR [DI+BX-1],30H
DEC BX ;十六进制的数字串转化 ASCII 码表示的数字串
JNZ SU3
RET
SUBA ENDP
LED
DB
DB
DB
DB
DB
DB
DB
DB
45 DUP(00H)
40H,80H,00H
;减号,点号字型码
3FH,06H,5BH,4FH
;0-3 字型码
66H,6DH,7DH,07H ;4-7 字型码
7FH,6FH
;8-9 字型码
7 DUP(00H)
77H,7CH,39H,5EH
;A-D 字型码
79H,71H,7DH,76H
;E-H 字型码
DB
DB
DB
DB
0FH
; I 字型码
7 DUP(00H)
67H,50H,6DH
;Q-S 字型码
11 DUP(00H),08H
;"_"字型码
LEDSHOW
ENDP
DELAY
PROC
;延时子程序
AX
CX
PUSH
PUSH
PUSHF
MOV AL, 0AH
DELAY1:MOV
CX, 0FFFFH
DELAY2:NOP
LOOP
DELAY2
DEC AL
JNZ
DELAY1
POPF
POP
POP
RET
CX
AX
DELAY
ENDP
OVER:
NOP
HLT
CODE ENDS
END START
;执行结果:(按显示顺序)64345
44621
19724
(二)两个数相乘的实验
1.实验要求:
实现十进制数的乘法,被乘数和乘数均以 ASCII 码形式存放在内存中,并先后显示到数码管
上,乘法结果在数码管上显示出来。
2.实验目的:
掌握乘法指令和循环指令的用法。
3.程序说明:
开 始
乘 数 → B L
B L 的 数 转 化 为 十 六 进 制 数
S I 指 向 乘 数
D I 指 向 结 果 区 ( 预 清 0 )
设 置 计 数 值
被 乘 数 [ S I ] 单 元 与 B L 相 乘
A A M 调 整
结 果 → [ D I ]
D I + 1 指 向 下 一 单 元 , 进 位 → [ D I ]
N
计 数 值 - 1 = 0
Y
显 示 结 果
结 束
4.源程序清单及执行结果:
N
CODE
EQU 4
START:
SEGMENT
ASSUME
PUSH
POP
LEA
CS:CODE,DS:CODE
CS
DS
SI,DATA1