微机原理实验

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

image-20210523164935774

实验思考题

1、思考MESS中的0DH,0AH有何作用,单独使用0AH或0DH运行结果如何,为什么?

0DH, 0AH 表示回车换行。

0D是回车
单独使用0DH

image-20210523165022105

单独使用0AH

image-20210523165029449

2、编程实现在一行中连续显示4个“Hello,World!”每个以空格分开。给出程序代码,并记录实现现象。

image-20210523165037558

.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!”。给出程序代码,并记录实现现象(可以考虑循环结构编程方法)

image-20210523165053242

.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

image-20210523165111142

.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机一台、实验箱一台。

实验内容及实验记录

image-20210523165312742

image-20210523165316438

image-20210523165321249

image-20210523165325247

问题1-4

  1. 设置了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] 是段地址

  2. OCW1 控制字 屏蔽命令控制字
    M7 – M0 哪个是0 就开启哪个
    1111 0111
    M7 – M4 M3 – M0

  3. 屏蔽8259中断控制字 屏蔽所有中断

  4. 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.拓展题

image-20210523165539593

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

以上是关于微机原理实验的主要内容,如果未能解决你的问题,请参考以下文章

微机原理中8086中啥是硬中断,啥是软中断,二者区别在哪

汇编微机原理与接口技术课程设计

微机原理 汇编语言 小舅子考试问我些编程问题,在下实在不会,求各路英雄赐教解困。谢谢!

微机系统知识点整理

微机显示程序实验

微机原理???