微机原理实验
Posted 数学小学霸
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了微机原理实验相关的知识,希望对你有一定的参考价值。
微机原理实验
2020
实验五 一个简单的汇编语言程序设计
实验目的
掌握编写汇编语言源程序的一般格式;
掌握汇编语言程序开发的一般过程;
掌握汇编语言程序调试的基本方法;
掌握常用伪指令的使用。
实验设备
PC机一台
实验内容及实验记录
1、在MASM安装目录下,打开记事本,可保存为FILENAME.ASM。注意此处,文件名可自取,建议使用英文字母开头的,只含有数字和英文字母且不超过8个的字符,扩展名为.ASM。
2、打开源文件FILENAME.ASM,输入以下源程序。
NAME HELLO
SSEG SEGMENT STACK ;堆栈段
DB 64 DUP(0)
SSEG ENDS
DSEG SEGMENT ;数据段
MESS DB 'Hello,World!', 0DH, 0AH,'$'
DSEG ENDS
CSEG SEGMENT ;代码段
ASSUME CS:CSEG, DS:DSEG, SS:SSEG, ES:DSEG
MAIN PROC FAR ;远过程
BEGIN: MOV AX, DSEG ;DS,ES段寄存器初始化
MOV DS, AX
MOV ES, AX
MOV AH, 9 ;9号功能调用,显示一字符串
MOV DX, OFFSET MESS ;取待显字符串首地址给DX寄存器
INT 21H ;调用DOS中断服务程序
MOV AX, 4C00H ;4CH号系统功能调用,返回操作系统
INT 21H ;调用DOS中断服务程序
MAIN ENDP
CSEG ENDS
END BEGIN ;汇编结束,程序入口为BEGIN
NAME HELLO
SSEG SEGMENT STACK ;堆栈段
DB 64 DUP(0)
SSEG ENDS
DSEG SEGMENT ;数据段
; MESS DB 'Hello,World!', 0DH, 0AH, '$'
MESS DB 'Hello,World!', 0AH,'$'
DSEG ENDS
CSEG SEGMENT ;代码段
ASSUME CS:CSEG, DS:DSEG, SS:SSEG, ES:DSEG
MAIN PROC FAR ;远过程
BEGIN: MOV AX, DSEG ;DS,ES段寄存器初始化
MOV DS, AX
MOV ES, AX
MOV AH, 9 ;9号功能调用,显示一字符串
MOV DX, OFFSET MESS ;取待显字符串首地址给DX寄存器
INT 21H ;调用DOS中断服务程序
MOV AX, 4C00H ;4CH号系统功能调用,返回操作系统
INT 21H ;调用DOS中断服务程序
MAIN ENDP
CSEG ENDS
END BEGIN ;汇编结束,程序入口为BEGIN
实验思考题
1、思考MESS中的0DH,0AH有何作用,单独使用0AH或0DH运行结果如何,为什么?
0DH, 0AH 表示回车换行。
0D是回车
单独使用0DH
单独使用0AH
2、编程实现在一行中连续显示4个“Hello,World!”每个以空格分开。给出程序代码,并记录实现现象。
.model small
.stack
.data
message db 'Hello,World!', 20h, '$'
; space db ' '
.code
start:
; 初始化
mov ax, @data
mov ds, ax
; 循环次数
mov cx, 04h
again:
; 打印提示信息
mov ah, 09h
mov dx, offset message
int 21h
; 跳到循环
loop again
; 结束程序
mov ax, 4c00h
int 21h
end start
3、编程实现显示20行“Hello, World!”。给出程序代码,并记录实现现象(可以考虑循环结构编程方法)
.model small
.stack
.data
message db 'Hello,World!', 0DH, 0AH, '$'
; space db ' '
.code
start:
; 初始化
mov ax, @data
mov ds, ax
; 循环次数
; 20 = 16 + 4
mov cx, 14h
again:
; 打印提示信息
mov ah, 09h
mov dx, offset message
int 21h
; 跳到循环
loop again
; 结束程序
mov ax, 4c00h
int 21h
end start
4.输入x,显示x ^ 2 + 6
.model small
.stack
.data
xx db ? ; 0 - 9
; dup
; DB 64 DUP (0)
input_message db 0dh, 0ah, 'x='
dis DB 3 DUP (?), '$'
result db 0dh, 0ah, 'x ^ 2 + 6 = $'
.code
start:
; 初始化
mov ax, @data
mov ds, ax
; 打印提示信息
mov ah, 09h
mov dx, offset input_message
int 21h
; 输入
mov ah, 1
int 21h
and al, 0fh
mov xx, al; xx = al;
mov al, xx; al = xx
mul al ; al = al * xx
mov bl, xx ; bl = x * x
; 3 次方
; mul bl ; ax = x * x * x
; 在这里加6
add al, 6
mov bl, 10
div bl ; ax / 10 = al, ah
mov dis + 2, ah
add dis + 2, 30h
mov ah, 0
div bl ; a1 / 10
mov dis + 1, ah
add dis + 1, 30h
mov dis, al
add dis, 30h
; 打印提示信息
mov ah, 09h
mov dx, offset result
int 21h
mov ah, 09h
mov dx, offset result
mov dx, offset dis
int 21h
; 结束程序
mov ax, 4c00h
int 21h
end start
实验六 8255并行口实验
实验目的
掌握8255的工作方式和编程原理。
掌握微机和8255的接口方法。
实验设备
PC机一台、实验箱一台。
实验内容及实验记录
1、完成《实验讲义》中“8255并行口实验”中实验1的内容。
CODE SEGMENT
ASSUME CS:CODE
CON8255 EQU 0FF2BH
PB8255 EQU 0FF29H
; A 是开关
PA8255 EQU 0FF28H
ORG 4200H
start:
mov al, 90h ; 写 8255 控制字
mov dx, CON8255
out dx, al
l0:
mov dx, PA8255 ;读 PA 口
in al, dx
mov dx, PB8255 ;送 PB 口显示
out dx, al
jmp l0
code ends
end start
2、思考题:PB口控制8个灯,首次点亮一个灯,延时1秒,逐次增加1个灯亮,待8个灯全亮后,再逐次熄掉1个灯,直到全熄,周而复始。给出主要程序代码,并记录实现现象。(流水灯)
CODE SEGMENT
ASSUME CS:CODE
; 定义
; PA 是灯
; PB 是按键
CON8255 EQU 0FF2BH
PB8255 EQU 0FF29H
PA8255 EQU 0FF28H
ORG 4200H
START:
MOV AL,90H
MOV DX,CON8255
OUT DX,AL
MOV DX,PB8255
MOV AX,00FFH
L0:
OUT DX,AL
; 翻转
ROL AX,1
; 延时
CALL DELAY
JMP L0
DELAY:
MOV CX,0005H
L2:
MOV BX,8000H
L1:
DEC BX
JNZ L1
LOOP L2
RET
CODE ENDS
END START
3、思考题:将 PC口的高4位接开关,低4位接发光二极管,要求将PC7-PC4接的开关状态送PC3-0上的发光二极管显示。给出主要程序代码,并记录实现现象。
CODE SEGMENT
ASSUME CS:CODE
CON8255 EQU 0FF2BH
PB8255 EQU 0FF29H
PA8255 EQU 0FF28H
; PC7 - PC4 是开关
; PC3 - PC0 是灯
PC8255 EQU 0FF2AH
; 8 9 A 的顺序
ORG 4200H
START:
MOV AL,88H
MOV DX,CON8255
OUT DX,AL
L0:
MOV DX, PC8255
IN AL, DX
; 右移 4 位
SHR AL, 4
; 低 4 位控制
MOV DX, PC8255
OUT DX, AL
JMP L0
CODE ENDS
END START
4、完成《实验讲义》中“8255并行口实验”中实验2的内容。
CODE SEGMENT
ASSUME CS:CODE
CON8255 EQU 0FF2BH
PB8255 EQU 0FF29H
PA8255 EQU 0FF28H
ORG 4300H
START:
MOV AL,80H
MOV DX,CON8255
OUT DX,AL
MOV DX,PA8255
MOV AL,0FEH
L0:
OUT DX,AL
ROL AL,1
CALL DELAY
JMP L0
DELAY:
MOV CX,0005H
L2:
MOV BX,8000H
L1:
DEC BX
JNZ L1
LOOP L2
RET
CODE ENDS
END START
5、思考题:改变灯亮的方向。给出主要程序代码,并记录实现现象。
CODE SEGMENT
ASSUME CS:CODE
CON8255 EQU 0FF2BH
PB8255 EQU 0FF29H
PA8255 EQU 0FF28H
ORG 4200H
START:
MOV AL,80H
MOV DX,CON8255
OUT DX,AL
MOV DX,PB8255
MOV AX,00FFH
L0:
OUT DX,AL
ROR AX,1
CALL DELAY
JMP L0
DELAY:
MOV CX,0005H
L2:
MOV BX,8000H
L1:
DEC BX
JNZ L1
LOOP L2
RET
CODE ENDS
END START
6、思考题:将PA口偶数位的灯与奇数位的灯轮流亮。(给出主要程序代码)
CODE SEGMENT
ASSUME CS:CODE
CON8255 EQU 0FF2BH
PA8255 EQU 0FF28H
PB8255 EQU 0FF29H
PC8255 EQU 0FF2AH
ORG 4300H
START: MOV AL,80H
MOV DX,CON8255
OUT DX,AL
MOV DX,PA8255
MOV AL,0AAH
L0: OUT DX,AL
CALL DELAY
NOT AL
JMP L0
DELAY: MOV CX,0005H
L2: MOV BX,8000H
L1: DEC BX
JNZ L1
LOOP L2
RET
CODE ENDS
END START
实验七 8259中断控制器实验实验目的
实验目的
掌握8259中断控制器的接口方法。
掌握8259中断控制器的应用编程
实验设备
PC机一台、实验箱一台。
实验内容及实验记录
问题1-4
-
设置了08H 0000 1000H
高5位是中断向量号,后3位是给IR3
题目要求是IR3
=> 00001 110 => 2CH
08H => 0000 1000b
ICW2 IR3
00001 011
[IP
CS]占了4位
00001 011 << 4
=> 00101100b = 2CH
段地址 = 初始地址 + 2
[002CH] 中断向量号地址
[002EH] 是段地址 -
OCW1 控制字 屏蔽命令控制字
M7 – M0 哪个是0 就开启哪个
1111 0111
M7 – M4 M3 – M0 -
屏蔽8259中断控制字 屏蔽所有中断
-
OCW2中断结束和优先权循环命令控制字
1、完成《实验讲义》中“8259中断控制器实验”的内容。
CODE SEGMENT
ASSUME CS:CODE
CON8255 EQU 0FF2BH
PB8255 EQU 0FF29H
PA8255 EQU 0FF28H
P8259COM0 EQU 0FF80H
P8259COM1 EQU 0FF81H
INTQ3 EQU INTERRUPT3
ORG 4400H
START:
MOV AL, 80H
MOV DX, CON8255
OUT DX, AL
MOV AX, OFFSET INTERRUPT
MOV DS:[002CH], AX
MOV AX, 0000H
MOV DS:[002EH], AX
MOV AL, 13H
MOV DX, P8259COM0
OUT DX, AL
MOV AL,08H
MOV DX,P8259COM1
OUT DX, AL
MOV AL, 09H
OUT DX, AL
MOV AL, 11110111B
OUT DX, AL
MOV DX, PA8255
MOV AL, 0FFH
OUT DX, AL
MOV AH, 0FFH
MOV CX, 0005H
L1:
CMP CX, 0000H
JNZ L0
MOV DX, P8259COM1
MOV AL, 0FFH
OUT DX, AL
STI
HLT
L0:
STI
JMP L1
INTERRUPT:
SHL AH, 1
MOV AL, AH
MOV DX, PA8255
OUT DX, AL
DEC CX
MOV DX, P8259COM0
MOV AL, 20H
OUT DX, AL
IRET
CODE ENDS
END START
2、思考题:分析在什么条件下转入中断服务程序。
当IF = 1而且 CX != 0
3、思考题:将IR3改为IR1,程序功能不变,程序应作何修改?
CODE SEGMENT
ASSUME CS:CODE
CON8255 EQU 0FF2BH
PB8255 EQU 0FF29H
PA8255 EQU 0FF28H
P8259COM0 EQU 0FF80H
P8259COM1 EQU 0FF81H
INTQ3 EQU INTERRUPT3
ORG 4400H
START:
MOV AL,80H
MOV DX,CON8255
OUT DX,AL
MOV AX,OFFSET INTERRUPT
MOV DS:[0024H],AX
MOV AX,0000H
MOV DS:[0026H],AX
MOV AL,13H
MOV DX,P8259COM0
OUT DX,AL
MOV AL,08H
MOV DX,P8259COM1
OUT DX,AL
MOV AL,09H
OUT DX,AL
MOV AL,11111101B
OUT DX,AL
MOV DX,PA8255
MOV AL,0FFH
OUT DX,AL
MOV AH,0FFH
MOV CX,0005H
L1:
CMP CX,0000H
JNZ L0
MOV DX,P8259COM1
MOV AL,0FFH
OUT DX,AL
STI
HLT
L0:
STI
JMP L1
INTERRUPT:
SHL AH,1
MOV AL,AH
MOV DX,PA8255
OUT DX,AL
DEC CX
MOV DX,P8259COM0
MOV AL,20H
OUT DX,AL
IRET
CODE ENDS
END START
4、思考题:实现初始时PA7连的灯亮,PA6~PA0连的灯熄,每进入一次服务程序使PA口亮的灯右移一位。(给出主要程序代码)
CODE SEGMENT
ASSUME CS:CODE
CON8255 EQU 0FF2BH
PB8255 EQU 0FF29H
PA8255 EQU 0FF28H
P8259COM0 EQU 0FF80H
P8259COM1 EQU 0FF81H
intq3 EQU interrupt3
ORG 4400H
START:
MOV AL,80H
MOV DX,CON8255
OUT DX,AL
MOV AX,OFFSET INTERRUPT
MOV DS:[0024H],AX
MOV AX,0000H
MOV DS:[0026H],AX
MOV AL,13H
MOV DX,P8259COM0
OUT DX,AL
MOV AL,08H
MOV DX,P8259COM1
OUT DX,AL
MOV AL,09H
OUT DX,AL
MOV AL,11111101B
OUT DX,AL
MOV DX,PA8255
MOV AL,07FH
OUT DX,AL
MOV AH,07FH
L1:
STI
JMP L1
INTERRUPT:
ROR AH,1
MOV AL,AH
MOV DX,PA8255
OUT DX,AL
MOV DX,P8259COM0
MOV AL,20H
OUT DX,AL
IRET
CODE ENDS
END START
实验八 定时/计数器8253接口实验
实验目的
掌握微机和8253的接口方法。
掌握8253定时/计数的工作方式和编程原理。
掌握8253,8259、8255三芯片和8088的综合应用。
实验设备
PC机一台、实验箱一台。
实验内容及实验记录
1、完成《实验讲义》中“定时/计数器8253接口实验”中实验1的内容。
CODE SEGMENT
ASSUME CS:CODE
CON8255 EQU 0FF2BH
PB8255 EQU 0FF29H
PA8255 EQU 0FF28H
P8259COM0 EQU 0FF80H
P8259COM1 EQU 0FF81H
P8253CH0 EQU 0040H
P8253CH1 EQU 0041H
P8253CH2 EQU 0042H
P8253COM EQU 0043H
INTQ3 EQU INTREEUP3
ORG 4500H
START:
MOV AL,80H ; 8255初始化
MOV DX,CON8255
OUT DX,AL
MOV AX,OFFSET INTERRUPT
MOV DS:[002CH],AX
MOV AX,0000H
MOV DS:[002EH],AX
MOV AL,13H ; 8259 的 ICW1
MOV DX,P8259COM0
OUT DX,AL
MOV AL,08H ; 8259 的 ICW2
MOV DX,P8259COM1
OUT DX,AL
MOV AL,09H ; ICW4
OUT DX,AL
MOV AL,11110111B ; OCW1
OUT DX,AL
MOV DX,PA8255 ; PA口灯全亮
MOV AL,00H
OUT DX,AL
MOV AH,AL
MOV AL,00010000B ; 8253初始化
MOV DX,P8253COM
OUT DX,AL
L0
; 实验是CH
; 切换半角和全角 shift + 空格
MOV DX,P8253CH2
; MOV DX,P8253CH0
MOV AL,03H
OUT DX,AL
STI
HLT
JMP L0
INTERRUPT:
XOR AH,0FFH
MOV AL,AH
MOV DX,PA8255
OUT DX,AL
MOV DX,P8259COM0
MOV AL,20H
OUT DX,AL
IRET
CODE ENDS
END START
2、思考题:在实验1中,为何通道2的时间常数为3,而实际操作时,需要按下4次按键才进入中断?
P184
第一个CLK输入脉冲只是将预置寄存器的初值送到减1寄存器。
从第二个CLK下降沿,才开始真正开始减1计数
3、完成《实验讲义》中“定时/计数器8253接口实验”中实验2的内容。
CODE SEGMENT
ASSUME CS:CODE
COM8255 EQU 0FF2BH
PB8255 EQU 0FF29H
PA8255 EQU 0FF28H
P8259COM0 EQU 0FF80H
P8259COM1 EQU 0FF81H
P8253CH0 EQU 0040H
P8253CH1 EQU 0041H
P8253CH2 EQU 0042H
P8253COM EQU 0043H
INTQ0 EQU INTREEUP0
ORG 4600H
START:
MOV AX,OFFSET INTERRUPT
MOV DS:[0020H],AX ; 中断入口地址 填入向量表
MOV AX,0000H
MOV DS:[0022H],AX
MOV AL,13H
MOV DX,P8259COM0 ;8259的ICW1
OUT DX,AL
MOV AL,08H ;ICW2
MOV DX,P8259COM1
OUT DX,AL
MOV AL,09H ;ICW4
OUT DX,AL
MOV AL,11111110B ;OCW1
OUT DX,AL
MOV AL,80H ;8255初始化
MOV DX,COM8255
OUT DX,AL
MOV DX,PA8255 ; 点亮8255PA7的灯
MOV AL,01111111B
OUT DX,AL
MOV AH,AL
MOV CX,32H ; 计数50次
MOV AL,00110110B ; 8253初始化
MOV DX,P8253COM
OUT DX,AL
MOV DX,P8253CH0
MOV AL,40H
OUT DX,AL
NOP
MOV AL,9CH
OUT DX,AL
L0:
STI
HLT
JMP L0
INTERRUPT:
DEC CX ; 中断服务程序
JNZ L1
MOV CX,32H
ROR AH,1
MOV AL,AH
MOV DX,PA8255
OUT DX,AL
L1:
MOV DX,P8259COM0
MOV AL,20H
OUT DX,AL
IRET
CODE ENDS
END START
4、思考题:用软件延时1s同样可以使PA口的灯循环右移一位,试比较软件延时1s与硬件定时1s程序编写的区别。
软件定时不精确,不用外接硬件
硬件定时精确,需要外接电路
5.拓展题
CODE SEGMENT
ASSUME CS:CODE
CON8255 EQU 0FF2BH
PB8255 EQU 0FF29H
PA8255 EQU 0FF28H
P8259COM0 EQU 0FF80H
P8259COM1 EQU 0FF81H
P8253CH0 EQU 0040H
P8253CH1 EQU 0041H
P8253CH2 EQU 0042H
P8253COM EQU 0043H
INTQ3 EQU INTREEUP3
ORG 4500H
START:
MOV AL,01110110B ;
MOV DX,P8253COM
OUT DX,AL
MOV DX,P8253CH1
MOV AL,40H
OUT DX,AL
NOP
MOV AL,9CH
OUT DX,AL
MOV AL,00010110B ;
MOV DX,P8253COM
OUT DX,AL
MOV DX,P8253CH0
MOV AL,32H ;
OUT DX,AL
;GATE1,GATE0接+5V
;OUT1接CLK0
;OUT0直接接灯
AGAIN: JMP AGAIN
CODE ENDS
END START
以上是关于微机原理实验的主要内容,如果未能解决你的问题,请参考以下文章