多的不说,少的不唠,直接上报告!!!
实 验 报 告一
(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
- 源代码及注释
;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 ; 程序结束标签
- 最终结果
(正确执行在屏幕上显示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
- 硬件电路连接
- 最终结果
(左边的红灯频率很快,为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、修复错误和优化程序等能力。
此次实验通过编写串口通信程序,加深了对串口通信原理的理解,掌握了串口初始化和数据发送接收的基本操作。在调试过程中,遇到了一些问题,通过查阅资料、调试和尝试不断优化程序,最终顺利完成了串口通信实验,对汇编语言的应用有了更深入的认识。