南邮通达微机实验报告

多的不说,少的不唠,直接上报告!!!

实 验 报 告一

(2023  / 2024  学年 第   学期)

课程名称

微型计算机原理与接口技术

实验名称

汇编语言语法实验

指导单位

计算机教学中心

实验目的:

掌握汇编语言源程序的编辑,汇编,目标文件的链接和可执行文件的调试执行全过程;掌握文本编辑软件,MASM,LINK和DEBUG的使用方法一级汇编语言的语法规则。

实验要求

掌握文本编辑软件,MASM,LINK和DEBUG的使用方法一级汇编语言的语法规则。

实验环境(实验设备)

硬件:微型计算机

软件:Windows 操作系统、汇编语言开发工具MASM或TASM

实验原理及内容

中文五号宋体,英文五号Times new roman字体,1.25倍行距

说明:这部分内容主要包括:

1、给出源代码,并加上注释;

2、给出测试数据及运行结果、实验相关结论等。

项目一:显示五行hello

1.源代码及注释

 ;FILENAME: EXA121.ASM
.486   ; 告诉编译器使用 486 指令集

DATA SEGMENT USE16  ; 数据段开始
    MESG DB 'HELLO'  ; 存储字符串'HELLO'
    DB 0,0,0   ; 储存3个0
DATA ENDS  ; 数据段结束

CODE SEGMENT USE16  ; 代码段开始
    ASSUME CS:CODE,DS:DATA  ; 设置代码和数据段寄存器的关系

BEG:
    MOV AX,DATA  ; 将数据段地址加载到寄存器 AX
    MOV DS,AX    ; 将数据段地址存入 DS 段寄存器
    MOV ES,AX    ; 将数据段地址存入 ES 段寄存器

    MOV CX,5     ; 将计数器寄存器 CX 设置为 5
LL1:
    MOV MESG+5,0DH  ; 将 MESG 数据的第5个位置为回车符
    MOV MESG+6,0AH  ; 将 MESG 数据的第6个位置为换行符
    MOV MESG+7,'$'  ; 将 MESG 数据的第7个位置为'$'
    CALL DISP       ; 调用 DISP 过程
    MOV MESG+5,0    ; 将 MESG 数据的第5个位置清零
    MOV MESG+6,0    ; 将 MESG 数据的第6个位置清零
    MOV MESG+7,0    ; 将 MESG 数据的第7个位置清零
    LOOP LL1        ; 循环,直到 CX 寄存器为 0
    MOV AH,4CH      ; 将系统调用号存入 AH 寄存器
    INT 21H         ; 调用 DOS 功能,结束程序

DISP PROC         ; 定义过程 DISP
    MOV AH,9      ; 将功能号存入 AH 寄存器
    MOV DX,OFFSET MESG ; 将 MESG 数据的偏移地址存入 DX 寄存器
    INT 21H       ; 调用 DOS 功能,显示 MESG 中的内容
    RET           ; 从过程 DISP 返回
DISP ENDP         ; DISP 过程结束

CODE ENDS         ; 代码段结束
END BEG           ; 程序结束   

最终结果

(该程序的主要功能是将字符串'HELLO'循环打印5次,并在每次打印后换行。)

项目二:正确执行在屏幕上显示25+9=34

  1. 源代码及注释
;FILENAME:EXA121.ASM
.486                       ; 指定使用的微处理器型号

DATA      SEGMENT   USE16  ; 数据段定义
SUM       DB        ?,?    ; 定义两个字节的数据空间
MESG      DB        '25+9='; 定义字符串 '25+9='
          DB        0,0,'$'; 分隔符和字符串终止符
N        DB        9      ; 定义一个字节的数据空间,初始值为9
N2        DB        25; ; 定义一个字节的数据空间,初始值为25
DATA      ENDS             ; 数据段结束

CODE      SEGMENT   USE16  ; 代码段定义
          ASSUME    CS:CODE, DS:DATA  ; 段寄存器赋值

BEG:      MOV       AX,       DATA  ; 将数据段地址加载到寄存器AX
          MOV       DS,       AX    ; 将AX中的数据段地址传送到段寄存器DS
          MOV       BX,       OFFSET SUM  ; 将SUM的偏移地址加载到BX
          MOV       AH,       N1    ; 将N1的值加载到AH
          MOV       AL,       N2    ; 将N2的值加载到AL
          ADD       AH,       AL    ; 将AH和AL的值相加
          MOV       [BX],     AH    ; 将结果存储到SUM的第一个字节
          CALL      CHANG           ; 调用CHANG子程序
          MOV       AH,       9     ; 设置功能号为9(显示字符串)
          MOV       DX,       OFFSET MESG  ; 将MESG的偏移地址加载到DX
          INT       21H             ; 调用21H中断显示结果
          MOV       AH,       4CH   ; 设置功能号为4CH(终止程序)
          INT       21H             ; 执行21H中断
CHANG    PROC                    ; 定义子过程CHANG
LAST:     CMP       BYTE PTR[BX],10  ; 比较BX指向的数据和10
          JC        NEXT             ; 小于10则跳转到NEXT
          SUB       BYTE  PTR[BX],10 ; 大于等于10则减去10
          INC       BYTE  PTR[BX+7]  ; BX+7指向的数据加1
          JMP       LAST             ; 跳转到LAST标签
NEXT:     MOV       AH,SUM           ; 将SUM的值加载到AH
          ADD       [BX+8],AH       ; 将AH的值加到BX+8指向的数据
          ADD       BYTE PTR[BX+7],30H  ; BX+7指向的数据加上30H
          ADD       BYTE PTR[BX+8],30H  ; BX+8指向的数据加上30H
          RET                     ; 返回调用CHANG的指令处
CHANG    ENDP                     ; 结束子过程CHANG
CODE      ENDS                     ; 代码段结束
          END       BEG           ; 程序结束标签
  1. 最终结果

正确执行在屏幕上显示25+9=34

四、实验小结(包括问题和解决方法心得体会、意见与建议等)

中文五号宋体,英文五号Times new roman字体,1.25倍行距

说明:这部分内容主要包括:在编程、调试或测试过程中遇到的问题及解决方法、本次实验的心得体会、进一步改进的设想等。

  • 实验中遇到的主要问题及解决方法

汇编语言的指令理解:初学者可能会遇到对汇编语言指令不熟悉的问题,需要花时间理解每个指令的作用和语法。

调试过程中的错误:编写汇编程序时,常常会出现语法错误或逻辑错误,需要通过调试程序找出问题所在并进行修复。

  • 实验心得

加深对计算机底层工作原理的理解:通过编写汇编程序,能够更深入地了解计算机的底层工作原理,包括寄存器,内存和指令等方面。

良好的编程习惯:在实验过程中,需要注意编写清晰、易懂的注释以及规范的代码格式,这有助于提高代码的可读性和可维护性。

调试技能的提升:经过一系列的实验,可以提升自己的调试技能,包括寻找bug、修复错误和优化程序等能力。

实 验 报 告二

(2023  / 2024  学年 第   学期)

课程名称

微型计算机原理与接口技术

实验名称

流光发生器的设计

指导单位

计算机教学中心

实验目的:

学习8254的引脚和结构,掌握8254初始化编程,运用定时/计数器8254的知识,设计流光发生器。

实验要求

在开放式微机实验装置上完成相应硬件电路连接;编写程序实现:8254的三个计数器输出不同周期的信号,控制发光二极管,达到流光效果。

实验环境(实验设备)

硬件:微型计算机

软件:Windows 操作系统、汇编语言开发工具MASM或TASM

实验原理及内容

中文五号宋体,英文五号Times new roman字体,1.25倍行距

说明:这部分内容主要包括:

1、给出源代码,并加上注释;

2、给出测试数据及运行结果、实验相关结论等。

1.源代码及注释

.MODEL SMALL
.486
CODE SEGMENT USE16
     ASSUME CS:CODE
BEG: JMP START
CCONPORT  EQU 213H      ;控制口地址
CCONBIT1  EQU 00010110B ; _0号计数器初始化控制字
CCONBIT2  EQU 01010110B ; _1号计数器初始化控制字
CCONBIT3  EQU 10010110B ; _2号计数器初始化控制字
CDPORT1   EQU 210H      ; _0号计数器口地址 
CDPORT2   EQU 211H      ; _1号计数器口地址 
CDPORT3   EQU 212H      ; _2号计数器口地址
         ;初值自己设置
CHDBIT1   EQU 00H      ;计数器0初值_f=1.193182MHZ_OUT=900HZ_
CHDBIT2   EQU 250      ;计数器1初值_OUT=40HZ
CHDBIT3   EQU 100      ;计数器2初值_OUT=10HZ
START:    NOP              ;启动延时
          MOV DX,CCONPORT  ;写入控制字_计数器0
          MOV AL,CCONBIT1
          OUT DX,AL
          MOV DX,CDPORT1  ;写入初值_计数器0
          MOV AL,CHDBIT1   
          OUT DX,AL
          
          MOV DX,CCONPORT  ;写入控制字_计数器1
          MOV AL,CCONBIT2
          OUT DX,AL
                           ;写入初值_计数器1
          MOV DX,CDPORT2  
          MOV AL,CHDBIT2 
          OUT DX,AL
          
          MOV DX,CCONPORT  ;写入控制字_计数器2
          MOV AL,CCONBIT3
          OUT DX,AL
                             ;写入初值_计数器2
          MOV DX,CDPORT3
          MOV AL,CHDBIT3   
          OUT DX,AL
WT:       NOP
          JMP WT
		  
CODE      ENDS
          END BEG
  1. 硬件电路连接

  1. 最终结果

(左边的红灯频率很快,为40Hz;中间的绿灯频率较慢,为10Hz;右边黄灯常亮)

实验小结(包括问题和解决方法心得体会、意见与建议等)

中文五号宋体,英文五号Times new roman字体,1.25倍行距

说明:这部分内容主要包括:在编程、调试或测试过程中遇到的问题及解决方法、本次实验的心得体会、进一步改进的设想等。

(一)实验中遇到的主要问题及解决方法

1.未考虑到8254内部的计数器是16位,将十进制数误当成二进制的放到  EAX中,正确的输入为 MOV AX,VALUE1 OUT DX,AL MOV AL,AH OUT DX,AL

2.要正确设置读/写方式,先读低8位后读高8位。

3. 程序运行后,红绿黄LED灯仅有黄灯闪烁,红绿灯处于熄灭状态。

解决方案:重启试验箱,并正确供电后,红绿黄灯以预想方式闪烁。

4.编程过程中,要使用NOP 语句,避免运行时间过短。

(二)实验心得

通过这次实验,我掌握了运用8254的知识,在开放式微机实验装置上完成相应硬件电路连接,并编写程序,设计流光发生器达到流光效果。实验中遇到不理解的地方也在同学的帮助下顺利解决,受益匪浅。

实 验 报 告三

(2023  / 2024  学年 第   学期)

课程名称

微型计算机原理与接口技术

实验名称

串口通信实验

指导单位

计算机教学中心

实验目的:

通过实验掌握汇编语言编写串口通信程序的能力,了解串口发送和接收数据的过程。

实验要求

实现串口初始化,包括设置波特率、数据位、停止位等参数。

发送和接收串口数据,可以通过串口发送和接收终端进行通信。

实现回车时显示输出缓冲区的内容。

实验环境(实验设备)

硬件:微型计算机

软件:Windows 操作系统、汇编语言开发工具MASM或TASM

实验原理及内容

中文五号宋体,英文五号Times new roman字体,1.25倍行距

说明:这部分内容主要包括:

1、给出源代码,并加上注释;

2、给出测试数据及运行结果、实验相关结论等。

1.源代码及注释

.MODEL SMALL    ; 指定使用的内存模型

.DATA       SEGMENT    USE16   ; 数据段定义
BUF         DB         30      DUP(?)  ; 定义一个包含30个元素的字节数组
.DATA       ENDS                   ; 数据段结束

.CODE        SEGMENT    USE16   ; 代码段定义
ASSUME      CS:CODE,DS:DATA  ; 设置代码段寄存器和数据段寄存器

START:      MOV   AX,DATA   ; 将数据段地址加载到寄存器AX
            MOV   DS,AX   ; 将AX中的数据段地址传送到段寄存器DS
            CALL  I8250  ; 调用子程序I8250进行串口初始化
            MOV   BX, OFFSET  BUF   ; 将BUF的偏移地址加载到BX

SEND:       MOV   DX,3FDH   ; 将串口发送缓冲区的端口地址加载到DX
            IN    AL,DX   ; 从DX指定的端口读取数据到AL
            TEST  AL,20H   ; 测试AL和20H进行按位与操作
            JZ    SEND   ; 如果结果为0,跳转到SEND标签
            MOV   DX,3F8H   ; 将串口数据端口地址加载到DX
            MOV   AH,1   ; 设置功能号为1(输出字符)
            INT   21H   ; 调用21H中断
            CMP   AL,0DH   ; 比较AL和回车符(0DH)
            JZ    COUT   ; 如果相等,跳转到COUT标签
            OUT   DX,AL   ; 将AL中的数据发送到DX指定的端口

RECE:       MOV   DX,3FDH   ; 将串口发送缓冲区的端口地址加载到DX
            IN    AL,DX   ; 从DX指定的端口读取数据到AL
            TEST  AL,01H   ; 测试AL和01H进行按位与操作
            JZ    RECE   ; 如果结果为0,跳转到RECE标签
            MOV   DX,3F8H   ; 将串口数据端口地址加载到DX
            IN    AL,DX   ; 从DX指定的端口读取数据到AL
            AND   AL,01111111B   ; 将AL和01111111B进行按位与操作
            CMP   AL,03H   ; 比较AL和03H
            JZ    EXIT   ; 如果相等,跳转到EXIT标签
            MOV   [BX],AL   ; 将AL的值存储到BX指向的地址处
            INC   BX   ; BX加1
            JMP   SEND   ; 无条件跳转到SEND标签

COUT:       MOV   AH,2   ; 设置功能号为2(光标定位)
            MOV   DL,0AH   ; 设置DL为换行符(0AH)
            INT   21H   ; 调用21H中断
            MOV   BYTE  PTR [BX+1],'$'   ; 将'$'写入BX+1的地址处
            MOV   AH,09H   ; 设置功能号为9(显示字符串)
            MOV   DX,OFFSET  BUF   ; 将BUF的偏移地址加载到DX
            INT   21H   ; 调用21H中断

EXIT:       MOV   AH,4CH   ; 设置功能号为4CH(终止程序)
            INT   21H   ; 调用21H中断

I8250       PROC   ; I8250子程序定义
            MOV   DX,3FBH   ; 将串口中断使能寄存器的端口地址加载到DX
            MOV   AL,80H   ; 设置AL为80H
            OUT   DX,AL   ; 将AL中的数据发送到DX指定的端口
            MOV   DX,3F9H   ; 将串口中断屏蔽寄存器的端口地址加载到DX
            MOV   AL,0   ; 设置AL为0
            OUT   DX,AL   ; 将AL中的数据发送到DX指定的端口
            MOV   DX,3F8H   ; 将串口数据端口地址加载到DX
            MOV   AL,30H   ; 设置AL为30H
            OUT   DX,AL   ; 将AL中的数据发送到DX指定的端口
            MOV   DX,3FBH   ; 将串口中断使能寄存器的端口地址加载到DX
            MOV   AL,0AH   ; 设置AL为0AH
            OUT   DX,AL   ; 将AL中的数据发送到DX指定的端口
            MOV   DX,3F9H   ; 将串口中断屏蔽寄存器的端口地址加载到DX
            MOV   AL,0   ; 设置AL为0
            OUT   DX,AL   ; 将AL中的数据发送到DX指定的端口
            MOV   DX,3FCH   ; 将串口线控寄存器的端口地址加载到DX
            MOV   AL,10H   ; 设置AL为10H
            OUT   DX,AL   ; 将AL中的数据发送到DX指定的端口
            RET   ; 返回

I8250       ENDP   ; I8250子程序结束

.CODE       END   START   ; 代码段结束

2.最终结果

这是一个用于实现串口通信的汇编程序,通过串口发送和接收数据。程序首先进行串口初始化,然后通过串口发送和接收数据,并在接收到回车时会显示输出缓冲区的内容。最后,使用功能码为4CH的中断结束程序。

实验小结(包括问题和解决方法心得体会、意见与建议等)

中文五号宋体,英文五号Times new roman字体,1.25倍行距

说明:这部分内容主要包括:在编程、调试或测试过程中遇到的问题及解决方法、本次实验的心得体会、进一步改进的设想等。

  • 实验中遇到的主要问题及解决方法

在实验中,主要遇到了以下问题:

串口初始化参数的设置:需要按照具体的串口规格手册设置正确的波特率、数据位、停止位等参数。

解决方法:查阅相应的串口规格手册或参考资料,根据项目所需的通信速率等因素设置参数。

串口数据发送和接收逻辑:需要确保发送和接收的数据按照协议进行处理,以确保正确的通信。

解决方法:参考资料中的串口通信协议,确保发送和接收的数据遵循协议要求。

调试过程中的串口数据处理:需要通过数据读写操作进行调试,确保能够正常发送和接收数据。

解决方法:加入调试输出语句,逐步检查发送和接收的数据,找出问题并进行修正。

实验心得

加深对计算机底层工作原理的理解:通过编写汇编程序,能够更深入地了解计算机的底层工作原理,包括寄存器,内存和指令等方面。

良好的编程习惯:在实验过程中,需要注意编写清晰、易懂的注释以及规范的代码格式,这有助于提高代码的可读性和可维护性。

调试技能的提升:经过一系列的实验,可以提升自己的调试技能,包括寻找bug、修复错误和优化程序等能力。

此次实验通过编写串口通信程序,加深了对串口通信原理的理解,掌握了串口初始化和数据发送接收的基本操作。在调试过程中,遇到了一些问题,通过查阅资料、调试和尝试不断优化程序,最终顺利完成了串口通信实验,对汇编语言的应用有了更深入的认识。

  • 23
    点赞
  • 71
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

高教百科

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值