华工微机原理实验四子程序设计实验报告
- 格式:docx
- 大小:221.27 KB
- 文档页数:9
微机原理与技术实验四: 子程序结构实验四:子程序设计一、实验目的:掌握子程序结构, 熟悉汇编上机环•='二、实验内容: 设有数组SCORE存放学生的成绩(0-100分),编写一个子程序统计0~59分、60〜69分、70〜79分、80〜89分、90〜100分的人数,并分别存放到SCOREE. SCORED、SCOREC、SCORERSCOREA 单元中。
编写一个主程序与之配合使用。
二、实验步骤:1、在“轻松汇编”环境下编写、编译和生成程2、进入DEBUG界面,运行程序,观察SCOREE、SCORED> SCOREC、SCORED> SCOREA变量的值是否正确:在DEBUG下运行程序:F9键观察多个变量值:“Data” 9 “Add Watch” 今“输入变量1"“Data” 9 “Add Watch”今“输入变量2”DATA SEGMENTSCOREDB 80,78,45,81,90,72,60,75SCOREE DBSCORED DBSCOREC DBSCORED DBSCOREA DBDATA ENDSSTCK SEGMENTDB 10 DUP(?)STCK ENDSCODE SEGMENTASSUMECS:CODE,DS:DATA,SS:STCKSTART:;以下为子程序COUNT PROC补全程序RET COUNT ENDP CODE ENDSMOV INTAH ,4CH 21H五、实验小结说明:实验报告要包涵上述五项DATA SEGMENTSCORE DB 80,7&45,81,90,72,60,75SCOREE DB 0SCORED DB 0SCOREC DB 0SCORER DB 0SCOREA DB 0DATA ENDSSTCK SEGMENTDB 10 DUP(?)STCK ENDSCODE SEGMENTASSUMECS:CODE,DS:DATA,SS:STCKSTART:MOV AX,DATAMOV DS,AXLEA SI,SCOREMOV CX,8Al: CALLINCCOUNT SIDEC CXCMP CX,OJNZ AlMOV AH,4CHINT 21HCOUNT PROCMOV AL,[SI]CMP AL,90JNB A2CMP AL,80JNB A3CMP ALJOJNB A4CMP AL,60JNB A5INC SCOREERETA2: INC SCOREARETA3: INC SCORERRETA4: INCRETA5: INCRETCOUNT ENDP CODE ENDSEND SCOREC SCOREDSTART。
微机原理实验报告班 级:2012级电子科学与技术卓工班级电子科学与技术卓工班姓 名: 黄中一黄中一 学 号: 201236460273序 号:评阅分数:评阅分数:实验一一、实验目的1、学会如何建立汇编源文件ASM2、学会调用MASM 宏汇编程序对源文件进行汇编,获得目标程序宏汇编程序对源文件进行汇编,获得目标程序 OBJ 及LST 列表文件列表文件3、学会调用LINK 连接程序汇编后的目标文件OBJ 连接成可执行的文件连接成可执行的文件EXE 4、学会使用DEBUG 调试程序把可执行文件装入内存并调试运行,用D 命令显示目标程序,用U 命令对可执行文件反汇编,用G 命令运行调试。
命令运行调试。
二、实验设备装有MASM 软件的IBM PC 机三、实验内容1、汇编程序对源程序进行编译,生成扩展名为OBJ 的目标文件;连接程序是将目标程序和库文件进行连接、定位,生成扩展名为EXE 的可执行文件;调试程序是对目标文件进行调试,验证它的正确性。
是对目标文件进行调试,验证它的正确性。
2、DEBUG 程序各种命令的使用方法程序各种命令的使用方法功能功能命令格式命令格式 使用说明使用说明显示内存单元内容显示内存单元内容D 地址地址从指定地址开始显示40H 个字节或80H 个字节个字节 修改内存单元内容修改内存单元内容 E 地址地址先显示地址和单元内容等待输入修改的内容输入修改的内容检查和修改寄检查和修改寄存器的内容存器的内容R 显示全部寄存器和标志位及下条指令单元十六进制数码和反汇编格式和反汇编格式反汇编反汇编U 地址地址从指定地址开始反汇编16个或32个字节个字节 汇编汇编 A 地址地址从指定地址直接输入语句并从指定指定汇编装入内存从指定指定汇编装入内存跟踪跟踪 T =地址=地址 从指定地址开始逐条跟踪指令运行运行 G =地址=地址无断点,执行正在调试的指令执行正在调试的指令 退出退出Q退出DEBUG 返回DOS3、实验过程①、在edit 环境,写字板,记事本等中输入源程序。
实验报告课程名称:《微机原理》实验第 3次实验实验名称:宏命令与子程序的区别实验时间: 2015 年 10 月 13 日实验地点: XXXXXX组号__________学号: XXXX姓名: XXX指导老师: XX评定成绩:___________微机原理实验4南京大学工程管理学院一、实验设备:计算机二、实验用时:4小时三、实验内容:1.单步运行实例函数 NO3_Mpy_8 ,了解单字节无符号数乘法的实现方法。
2.编写子程序 Mpy_16 ,实现双字节无符号数乘法。
自行定义变量,其中:ACCALO ; 存放乘数低8 位ACCAHI ; 存放乘数高8 位ACCBLO ; 存放被乘数低 8 位和乘积第16~ 23位ACCBHI ; 存放被乘数高8 位和乘积第24~31位ACCCLO ; 存放乘积第0~7位ACCCHI ; 存放乘积第8~ 15位编写 Main 主程序,使用乘数0x4015 和被乘数 0x3321 对编写的子程序进行测试,结果应为0x0CCC71B5。
3.编写宏命令 Mpy_16 ,实现单字节无符号数乘法。
编写 Main 主程序调用宏命令并对运算结果进行测试。
4.使用反汇编工具 Disassembly Listing 单步运行程序,观察子程序与宏命令的差异。
四、实验报告要求:1.程序框图和源程序清单。
2.分析宏扩展过程,说明宏与子程序的差别。
五、实验结果:1、程序框图(1)子程序 Mpy_16子程序调用初始化循环计数器TEMP将乘数 ACCBHI 、ACCBLO 复制到 MDHI 、MDLO中ACCBHI 、 ACCBLO 、ACCCHI 、 ACCCLO 清零MDHI 、 MDLO 算数右移一位,最低位进入CC=1?否是ACCAHI 、 ACCBHI 、ACCALO 、 ACCBLO 分别相加,结果放入ACCBHI 、 ACCBLO 中ACCCHI 、 ACCCLO 带进位位右移,最低位放入CACCBHI 、 ACCBLO 带进位位右移,最低位放入C中中TEMP=TEMP-1否TEMP=0?是子程序返回(2)宏命令 Mpy_16开始初始化循环计数器TEMP将乘数 ACCBHI 、ACCBLO 复制到 MDHI 、MDLO中ACCBHI 、 ACCBLO 、ACCCHI 、 ACCCLO 清零MDHI 、 MDLO 算数右移一位,最低位进入CC=1?否是ACCAHI 、 ACCBHI 、ACCALO 、 ACCBLO 分别相加,结果放入ACCBHI 、 ACCBLO 中ACCCHI ACCBHI 、 ACCCLO 、ACCBLO带进位位右移,最低位放入带进位位右移,最低位放入中中CC TEMP=TEMP-1否TEMP=0?是结束2、源程序清单(1)子程序 Mpy_16list p=16f877A; list directive to define processor#include <p16f877A.inc> ;processor specific variable definitions__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_OFF & _HS_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFFACCALO EQU0x20 ;存放加数低 8 位ACCAHI EQU0x21 ;存放加数高8 位ACCBLO EQU0x22 ;存放被加数低8 位ACCBHI EQU0x23 ;存放被加数高 8 位ACCCLO EQU 0x24;ACCCHI EQU 0x25;MDLO EQU 0x26;MDHI EQU 0x27;TEMP EQU0x28 ;临时寄存器;双字节加法子程序,入口地址 ACCB+ ACCA,出口地址 ACCORG0x0000;复位入口地址nop;兼容ICD调试工具,必须加nopgoto Main;跳转至Main函数MainMOVLW 0x15;MOVWF ACCALO;MOVLW 0x40;MOVWF ACCAHI;MOVLW 0x21;MOVWF ACCBLO;MOVLW 0x33;MOVWF ACCBHI;CALL MPY_16;NOP;GOTO $;ORG 0x0100MPY_16CALL SETUP;MLOOPBCF STATUS, C;清进位位RRF MDHI; MD右移RRF MDLO;BTFSC STATUS, C;判断是否需要相加CALL Add_16;加乘数至MB RRF ACCBHI;右移部分乘积RRF RRF RRF ACCBLO; ACCCHI; ACCCLO;DECFSZ GOTO RETURN TEMPMLOOP;;;乘法完成否?否,继续求乘积子程序返回SETUPMOVLW.16;初始化TEMP 寄存器MOVWF TEMPMOVF ACCBLO, W;乘数送MDMOVWF MDLO;MOVF ACCBHI,W;MOVWF MDHI;CLRF ACCBLO;清MBCLRF ACCBHI;CLRF ACCCLO;清MCCLRF ACCCHI;RETURN;子程序返回Add_16MOVF ACCALO, w ;ACCB和ACCA低半字节相加ADDWF ACCBLO , f ;BTFSC STATUS, C;有进位否?INCF ACCBHI;有,ACCB高字节加1,再加ACCAHIMOVF ADDWF ACCAHI, wACCBHI, f; ACCA;、ACCB高半字节相加RETURN;子程序返回END;(2)宏命令 Mpy_16list p=16f877A; list directive to define processor#include <p16f877A.inc> ;processor specific variable definitions__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_OFF & _HS_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFFMPY_16macro ACCALO1,ACCAHI1,ACCBLO1,ACCBHI1,ACCCLO1,ACCCHI1,MDHI1,MDLO1 ,TEMP1;SETUPACCALO1,ACCAHI1,ACCBLO1,ACCBHI1,ACCCLO1,ACCCHI1,MDHI1,MDLO1 ,TEMP1;MLOOPBCF STATUS, C;清进位位RRF MDHI1; MD右移RRF MDLO1;BTFSS STATUS, C;判断是否需要相加GOTO LOOP;Add_16ACCALO1,ACCAHI1,ACCBLO1,ACCBHI1,ACCCLO1,ACCCHI1,MDHI1,MDLO1 ,TEMP1;加乘数至MBLOOPRRF ACCBHI1;右移部分乘积RRF ACCBLO1;RRF ACCCHI1;RRF ACCCLO1;DECFSZ TEMP1;乘法完成否?GOTO MLOOP;否,继续求乘积ENDM;子程序返回SETUP macroACCALO2,ACCAHI2,ACCBLO2,ACCBHI2,ACCCLO2,ACCCHI2,MDHI2,MDLO2 ,TEMP2;MOVLW .16;初始化TEMP寄存器MOVWF TEMP2MOVF ACCBLO2, W;乘数送MDMOVWF MDLO2;MOVF ACCBHI2,W;MOVWF MDHI2;CLRF ACCBLO2;清MBCLRF ACCBHI2;CLRF ACCCLO2;清MCCLRF ACCCHI2;ENDM;子程序返回Add_16 macroACCALO3,ACCAHI3,ACCBLO3,ACCBHI3,ACCCLO3,ACCCHI3,MDHI3,MDLO3 ,TEMP3;MOVF ADDWF ACCALO3, w ;ACCBACCBLO3 , f ;和 ACCA低半字节相加BTFSC STATUS, C;有进位否?INCF ACCBHI3;有,ACCB高字节加1,再加ACCAHIMOVF ADDWF ACCAHI3, w; ACCAACCBHI3, f ;、ACCB高半字节相加ENDM;子程序返回ACCALO EQU0x20 ;存放加数低 8 位ACCAHI EQU0x21 ;存放加数高 8 位ACCBLO EQU0x22 ;存放被加数低8 位ACCBHI EQU0x23 ;存放被加数高8 位ACCCLO EQU0x24;ACCCHI EQU0x25;MDLO EQU 0x26;MDHI EQU 0x27;TEMP EQU 0x28 ;临时寄存器;双字节加法子程序,入口地址 ACCB+ ACCA,出口地址 ACC ORG0x0000;复位入口地址nop;兼容ICD 调试工具,必须加nop goto Main;跳转至Main函数MainMOVLW 0x15;MOVWF ACCALO;MOVLW 0x40;MOVWF ACCAHI;MOVLW 0x21;MOVWF ACCBLO;MOVLW 0x33;MOVWF ACCBHI;MPY_16ACCALO,ACCAHI,ACCBLO,ACCBHI,ACCCLO,ACCCHI,MDHI,MDLO,TEMP; NOP;GOTO $;END;3、程序运行结果截图(1)子程序 Mpy_16子程序运行结果(2)宏命令 Mpy_16宏指令运行结果4、分析宏扩展过程,说明宏与子程序的差别(1)子程序 Mpy_16 的反汇编结果子程序的反汇编代码1子程序的反汇编代码2(2)宏命令 Mpy_16 的反汇编结果00000000NOP00012802GOTO 0x200023015MOVLW 0x15000300A0MOVWF 0x2000043040MOVLW 0x40000500A1MOVWF 0x2100063021MOVLW 0x21000700A2MOVWF 0x2200083033MOVLW 0x33000900A3MOVWF 0x23000A3010MOVLW 0x10000B00A8MOVWF 0x28000C0822MOVF 0x22, W000D00A6MOVWF 0x26000E0823MOVF 0x23, W000F00A7MOVWF 0x27001001A2CLRF 0x22001101A3CLRF 0x23001201A4CLRF 0x24001301A5CLRF 0x2500141003BCF 0x3, 000150CA7RRF 0x27, F00160CA6RRF 0x26, F00171C03BTFSS 0x3, 00018281F GOTO 0x1f00190820MOVF 0x20, W001A07A2ADDWF 0x22, F001B1803BTFSC 0x3, 0001C0AA3INCF 0x23, F001D0821MOVF 0x21, W001E07A3ADDWF 0x23, F001F0CA3RRF 0x23, F00200CA2RRF 0x22, F00210CA5RRF 0x25, F00220CA4RRF 0x24, F00230BA8DECFSZ 0x28, F00242814GOTO 0x1400250000NOP00262826GOTO 0x2620072394CALL 0x394(3)宏扩展过程宏扩展只是用原来宏定义中的若干条汇编指令代替程序中的“一条”宏指令插入到此宏指令位置处,进行直接替换功能。
微机原理实验报告概述:微机原理是计算机科学与技术专业中的一门重要课程,通过实验学习,可以加深对计算机内部运行原理的理解,提高软硬件的开发和调试能力。
本实验报告将介绍我对微机原理实验的学习和思考。
实验一:二进制转换实验在这个实验中,我首先了解了二进制数的概念以及其和十进制数的转换方法。
通过实际操作,我加深了对计算机内部数据表示方式的理解。
这对于后续学习计算机系统结构和编程语言至关重要。
实验二:逻辑门电路实验逻辑门电路是计算机硬件的基础组成部分,通过实验,我学会了使用逻辑门芯片构建各种逻辑电路,并能够通过真值表分析和验证逻辑电路的正确性。
这对于理解计算机内部的数据处理和控制逻辑有着直接的帮助。
实验三:运算器设计实验在这个实验中,我通过学习和设计算术逻辑单元(ALU),了解了计算机的算术操作过程,并能够通过运算器实现基本算术运算。
这对于理解计算机内部数据的处理和计算机指令的执行有着重要的意义。
实验四:存储器与外设实验存储器是计算机系统的重要组成部分,通过实验,我深入了解了存储器的类型、组织结构和访问方式,并通过外设与存储器的交互,实践了计算机系统的输入和输出过程。
实验五:微处理器实验微处理器是计算机系统中最核心的部件,通过实验,我学习了微处理器的基本运行原理,能够通过汇编语言编写程序,并通过微处理器执行程序实现特定的功能。
这个实验为我今后学习计算机体系结构和操作系统打下了坚实的基础。
实验总结:通过这几个实验,我深入了解了微机原理课程的实践内容和相关知识。
实验的过程中,我不仅学会了使用仪器设备和工具,还培养了自己的动手能力和团队合作精神。
通过不断的实践,我对计算机内部结构和运行原理有了更深刻的理解,也提高了我的问题解决能力和创新思维。
未来展望:微机原理实验的学习只是计算机科学与技术专业中的一小部分。
我希望在今后的学习过程中能加深对计算机体系结构、操作系统、编程语言等方面的学习,并不断深入钻研,成为一名优秀的计算机科学与技术专业人才。
滨江学院微机原理综合实验实验报告学生姓名学号专业信息工程班级2016级二O一八年十二月三十日微机原理综合实验实验一利用DEBUG调试程序调试程序段1、实验目的1)熟悉DEBUG有关命令的使用方法。
2)利用DEBUG掌握有关指令的功能。
3)利用DEBUG运行简单的程序段。
2、实验内容1)进入和退出DEBUG程序。
2)学会DEBUG中的D命令、E命令、R命令、T命令、A命令、G命令等的使用。
对于U命令、N命令、W命令等,也应试一下。
3)利用DEBUG,验证乘法、除法、加法、减法、带进位加、带借位减、堆栈操作指令、串操作指令的功能。
3、实验准备1)仔细阅读有关DEBUG命令的内容,对有关命令,都要事先准备好使用的例子。
2)作为例子,准备用A命令,输入在显示器上显示字符“S”的系统调用程序段。
3)阅读将AX左移9位的程序段。
4、实验步骤1)在DOS提示符下,进入DEBUG程序。
2)在DOS目录下启动DEBUG。
3)详细记录每一步所用的命令,以及查看结果的方法和具体结果。
5、实验报告要求1)如何启动和退出DEBUG程序。
2)整理每个DEBUG命令使用的方法,实际示例及执行结果。
3)启动DEBUG后,要装入某一个.EXE文件,应通过什么方法实现?实验结果:实验二分支程序实验1、实验目的1)掌握分支程序的设计方法。
2)掌握利用DEBUG修改参数、检查结果的方法。
3)掌握汇编语言源程序的编辑、汇编、连接及调试过程。
2、实验内容1)编写一个程序,显示AL寄存器中的两位十六进制数2)编写一个程序,判别键盘上输入的字符;若是1-9字符,则显示之;若为A-Z 或a-z字符,均显示“c”;若是回车字符<CR>(其ASCII码为0DH),则结束程序,若为其它字符则不显示,继续等待新的字符输入。
3、实验准备1)编写实验内容要求的两个程序。
2)写出调试以上程序,即修改程序参数,检查结果的操作方法。
3)熟悉源程序汇编、连接命令的使用方法即要回答的内容。
目录软件实验部分:实验一清零程序实验二拆字程序实验三拼字程序实验四数据区传送子程序实验五数据排序实验实验六查找相同数个数实验七无符号双字节快速乘法子程序实验八多分支程序实验九脉冲计数(定时/计数器实验)实验十电脑时钟(定时器、中断综合实验)硬件实验部分:实验一 P1口亮灯实验实验二 P1口转弯灯实验实验三 P3.3口输入,P1口输出实验四工业顺序控制实验五继电器控制实验六 8255控制交通灯实验七 LED16×16点阵显示实验实验八串并转换实验实验九 A/D转换实验实验十 D/A转换实验十一电子音响实验十二步进电机控制实验十三 8032串行口应用实验㈠——双机通信实验十四小直流电机调速实验软件实验部分本节共编了十个软件实验,通过这些实验程序的调试,使学生熟悉MCS-51的指令系统,了解程序设计过程,掌握汇编语言设计方法以及如何使用实验系统提供的调试手段来排除程序错误。
本节提供的软件实验,涉及外部数据存储器扩展寻址操作,因此需按下图连接实验线路。
1.将存储器单元的D0—D7总线接口用8芯扁平线与数据总线单元D0—D7的任一接口相连,存储器单元的A0—A7地址接口与地址总线单元(低8)A0—A7的任一接口相连,存储器单元的A8—A12地址接口与地址总线单元(高8)A8—A12的任一接口相连。
注意外部扩充的数据区的有效范围。
2.存储器单元的WE/PGM插孔与六位LED左下方的IOWE插孔相连。
3.存储器单元的OE插孔与六位LED左下方的IORD插孔相连。
4.存储器单元的CS1插孔与六位LED右下方的IOWE插孔相连。
实验一清零程序一、实验目的掌握汇编语言设计和调试方法,熟悉键盘操作。
二、实验内容把2000H-20FFH的内容清零三、程序框图四、实验步骤用连续或单步方式运行程序,检查2000-20FF中执行程序前后的内容变化。
五、思考假使把2000H-20FFH中的内容改成FF,如何修改程序。
微机原理的实验报告一、实验目的本实验旨在深入理解微机原理的相关知识,并通过实践操作,掌握微机原理的实验方法与技巧。
二、实验内容1. 搭建微机实验系统:根据实验所需,搭建适当的微机实验系统,包括各种硬件设备的连接与设置。
2. 硬件接口的实验:通过连接不同的硬件接口,进行实验操作,学习硬件接口的使用方法和原理。
3. 程序设计与调试实验:使用相应的汇编语言或高级语言,编写程序并进行调试,观察程序的执行结果。
4. 中断实验:通过调用不同的中断服务例程,进行实验操作,学习中断的使用原理和应用场景。
三、实验步骤与结果1. 实验步骤:(1) 搭建微机实验系统:按照实验指导书的要求,连接各种硬件设备,确保能够正常工作。
(2) 硬件接口的实验:选择一个硬件接口,例如并行口,通过编写相应的程序,实现读取和输出数据的功能。
观察实验现象并记录。
(3) 程序设计与调试实验:根据实验要求,选择适当的编程语言,编写相应的程序,并进行调试。
观察程序的执行结果,并记录相关数据。
(4) 中断实验:选择一个中断服务例程,例如键盘中断,通过编写相应的程序,实现对键盘输入的响应。
观察实验现象并记录相关数据。
2. 实验结果:(1) 硬件接口的实验结果:通过编写程序并连接硬件接口,成功读取和输出数据,实现了相应的功能。
(2) 程序设计与调试实验结果:编写的程序能够正确执行,并得到了预期的结果。
(3) 中断实验结果:编写的程序能够响应相应的中断信号,并实现了对键盘输入的处理。
四、实验分析与讨论1. 实验分析:通过本次实验,我们深入了解了微机原理的相关知识,并通过实践操作,掌握了微机原理的实验方法和技巧。
2. 实验讨论:在实验过程中,我们遇到了一些困难和问题,例如硬件接口的连接和调试,程序的编写和调试等。
但通过彼此的合作与讨论,我们最终解决了这些问题,并成功完成了实验。
五、实验总结通过本次实验,我们对微机原理有了更深入的理解,并通过实践操作,掌握了微机原理的实验方法和技巧。
实验名称:汇编语言程序设计实验日期:2023年3月10日实验地点:计算机实验室实验者:张三一、实验目的1. 熟悉汇编语言的基本语法和指令系统。
2. 掌握汇编语言程序设计的基本方法。
3. 通过实验,加深对微机原理的理解。
二、实验内容本次实验主要涉及以下内容:1. 数据传送指令的应用2. 算术运算指令的应用3. 控制转移指令的应用4. 子程序设计三、实验步骤1. 编写一个简单的程序,实现以下功能:(1)将数据0x1234存入寄存器AX;(2)将数据0x5678存入寄存器BX;(3)计算AX和BX的乘积,并将结果存入寄存器DX;(4)将乘积的高16位和低16位分别存入寄存器CX和AX。
2. 编写一个程序,实现以下功能:(1)将数据0x1A2B3C4D存入内存单元[0x1000];(2)从内存单元[0x1000]开始,读取连续4个字节的数据;3. 编写一个程序,实现以下功能:(1)定义一个子程序,实现两个整数的加法运算;(2)在主程序中调用该子程序,实现两个整数的加法运算。
四、实验结果与分析1. 数据传送指令的应用(1)将数据0x1234存入寄存器AX;MOV AX, 0x1234(2)将数据0x5678存入寄存器BX;MOV BX, 0x5678(3)计算AX和BX的乘积,并将结果存入寄存器DX;MUL BX(4)将乘积的高16位和低16位分别存入寄存器CX和AX; MOV CX, DXMOV AX, DX2. 算术运算指令的应用(1)将数据0x1A2B3C4D存入内存单元[0x1000];MOV [0x1000], 0x1A2B3C4D(2)从内存单元[0x1000]开始,读取连续4个字节的数据; MOV AX, [0x1000]MOV BX, [0x1000+2]MOV CX, [0x1000+4]MOV DX, [0x1000+6]MOV AH, 0x0EINT 0x103. 控制转移指令的应用(1)定义一个子程序,实现两个整数的加法运算;ADD procedure:ADD AX, BXRET(2)在主程序中调用该子程序,实现两个整数的加法运算;MOV AX, 0x1MOV BX, 0x2CALL ADDMOV CX, AX五、实验心得通过本次实验,我深刻理解了汇编语言的基本语法和指令系统,掌握了汇编语言程序设计的基本方法。
微机原理综合实验报告随着计算机技术的不断发展,微机已经成为了我们日常工作和生活中不可或缺的一部分。
为了更好地了解微机的工作原理和实践应用,我们进行了微机原理的综合实验,本文将对此次实验进行详细的讲解和总结。
一、实验目的本次实验的主要目的是通过搭建计算机系统的全部硬件及连接,熟悉和掌握微机的工作原理和实际应用,实践操作模拟简单的计算机应用程序等。
二、实验步骤1.准备工作:搭建计算机实验系统所需的硬件和软件,包括主板、处理器、硬盘、内存、显示器等,同时,将各部件连接起来。
2.开机自检:按下计算机开机键后进行自检,检查各部件是否正常工作。
3.进入BIOS:进入BIOS设置,为系统配置提供支持。
4.安装操作系统:安装Windows操作系统5.应用程序:安装并应用简单的计算机应用程序,如表格制作、文档编辑等。
三、实验结果分析通过本次实验,我们深入了解了微机的硬件构成和软件运行原理,加深了对微机工作原理的认识。
在实践操作中,我们对计算机系统在实际应用中的硬件和软件环境有了深刻的认识和了解。
四、实验中遇到的问题及解决方法在实验中,我们遇到了一些问题,如计算机开机时无法启动、操作系统无法正常安装、硬件连接不正确等。
这些问题的出现主要是由于我们操作时没有细心和认真,没有按照实验指导书的步骤操作。
针对这些问题,我们仔细检查操作过程中的每一个步骤,重新进行操作,直至问题得到解决。
五、结论通过本次实验,我们深刻了解了微机的硬件构成和软件运行原理,了解了微机在实际应用中的硬件和软件环境。
同时,我们还掌握了微机应用的基本技能,如软件安装、简单文件的制作和编辑等。
通过实验的过程,我们深入体验了计算机系统的基本构成及实践应用,并发现并解决了其中存在的问题和疑问,从而加深了对计算机系统的理解和认识,为今后我们的进一步学习和实践打下了坚实的基础。
华南理工大学微机原实验四:子程序设计一.实验目的1、学习子程序的定义和调用方法。
2、掌握子程序、子程序嵌套的结构。
3、掌握子程序的程序设计、编制及调试方法。
二.实验内容程序采用菜单式选择,可接收用户输入的命令(1~5),各命令如下:按1键完成字符串小写字母变大写字母用户输入一由英文大小写字母或数字0~9组成的字符串(以回车结束),程序逐个检查字符串中各字符,将原串中小写字母变成大写字母,其它字符不变,并在屏幕上显示。
用户按任一键,重做,按ESC键,返回主菜单。
按2键完成找最大值(二选一)1、接收用户输入的可显示字符串(以回车结束),程序将其中ASCII码值最大的字符显示出来。
2、接收用户输入若干无符号8位数(以空格或逗号为分隔符,以回车结束),程序将其中最大的数显示出来。
用户按任一键,重做,按ESC键,返回主菜单。
按3键完成排序(二选一)1、接收用户输入的可显示字符串,以回车结束。
程序按ASCII码值大小由大到小排序并输出显示。
2、接收用户输入若干个有符号8位数(以空格逗号为分隔符,以回车结束)。
程序将其中最大的数显示出来。
用户按任一键,重做,按ESC键,返回主菜单。
按4键显示时间首先提示用户对时,即用户输入时,分,秒(以空格或冒号分隔,以回车结束),然后,在屏幕上不断显示时间,格式为:××(时):××(分):××(秒),最好定点显示。
用户按任一键,重新对时,按ESC键,返回主菜单。
按5键,结束程序运行,返回系统提示符。
三.程序与流程图主程序的简略流程子程序一的简略流程图子程序二的简略流程图子程序三的简略流程图子程序4,显示时间流程图四、源程序代码DATA SEGMENTORG9999HMENU DB0DH,0AH,'Programed by Deng Tengfei Class Electronic Material Grade 09',0DH,0AH,;菜单DB'Please input1~5to choose service',0DH,0AH,DB'1:Convert a small letter to a big letter',0DH,0AH,DB'2:Seek the bigest number',0DH,0AH,DB'3:Put the character string in order',0DH,0AH,DB'4:Set time and check time',0DH,0AH,DB'5:End the program$'MEG0DB'Please choose function$';提示信息MEG0~MEG8MEG1DB'You have choose the function1.',0DH,0AH,'Please input the character string you want to convert:$'MEG2DB'You have choose the function2.',0DH,0AH,'Please input the character string:$'MEG3DB'You have choose the function3.',0DH,0AH,'Please input the character string you want to sort$'MEG4DB'You have choose the function4.',0DH,0AH,'Please input the time you want to set in format like:xx:xx:xx$'MEG5DB'The program is end$'MEG6DB'Sorry.you have chosen a undefined function.Please input a correct function number$' MEG7DB'Fail to set time$'MEG8DB'Press any key to do again or press the ESC key to return to the main menu$'FLAG DB-1;冒泡排序中使用的标志DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATAMAIN PROC NEAR;主程序MOV AX,DATAMOV DS,AXCIN:LEA DX,MENU;输出提示信息MOV AH,09HINT21HCALL ENT;输出回车换行LEA DX,MEG0MOV AH,09HINT21HCALL ENTMOV AH,01HINT21HCMP AL,30H;判断功能号JLE EORCMP AL,31HJE F1CMP AL,32HJE F2CMP AL,33HJE F3CMP AL,34HJE F4CMP AL,35HJE F5EOR:CALL ENTLEA DX,MEG6;输出出错信息MOV AH,09HINT21HJMP CINF1:CALL ENT;功能1LEA DX,MEG1MOV AH,09HINT21HCALL ENTCALL FUN1;调用子程序1MOV AH,01HINT21HCMP AL,1BHJNE F1JMP CINF2:CALL ENT;功能2LEA DX,MEG2MOV AH,09HINT21HCALL ENTCALL FUN2;调用子程序2MOV AH,01HINT21HCMP AL,1BHJNE F2JMP CINF3:CALL ENT;功能3LEA DX,MEG3MOV AH,09HINT21HCALL ENTCALL FUN3;调用子程序3MOV AH,01HINT21HCMP AL,1BHJNE F3JMP CINF4:CALL ENT;功能4LEA DX,MEG4MOV AH,09HINT21HCALL ENTCALL FUN4;调用子程序4MOV AH,01HINT21HCMP AL,1BHJNE F4JMP CINF5:MOV AH,4CH;功能5,终止程序INT21HFUN1PROC NEAR;子程序1PUSH AXPUSH CXPUSH DXPUSH SIMOV AH,0AH;字符串输入INT21HCALL ENTMOV SI,DXINC SIMOV CL,[SI];设定循环次数MOV CH,0JIK:INC SIMOV AL,[SI]CMP AL,0DH;判断字符ASCII码JE KLCMP AL,61HJB JKCMP AL,7AHJA JKSUB AL,20H;小写转大写JK:MOV DL,AL;输出字符MOV AH,02HINT21HLOOP JIKCALL ENTLEA DX,MEG8MOV AH,09HINT21HKL:POP SIPOP DXPOP CXPOP AXRETFUN1ENDPFUN2PROC NEAR;子程序2PUSH AXPUSH CXPUSH DXPUSH SIMOV AH,0AHINT21HCALL ENTMOV SI,DXINC SIMOV CL,[SI]MOV CH,0INC SIMOV AL,[SI]FH:INC SI;循环比较CMP AL,[SI]JA FGMOV AL,[SI]FG:LOOP FHMOV DL,ALMOV AH,02HINT21HCALL ENTLEA DX,MEG8MOV AH,09HINT21HPOP SIPOP DXPOP CXPOP AXRETFUN2ENDPFUN3PROC NEAR;子程序3PUSH AXPUSH BXPUSH CXPUSH DXPUSH SIPUSH DIMOV AH,0AHINT21HCALL ENTMOV SI,DXINC SIMOV BL,[SI]MOV BH,0INC SIMOV DI,SILP1:CMP FLAG,0;根据标志判断JE LP3DEC BX;检查循环次数CMP BX,0JE LP3MOV CX,BXMOV SI,DIMOV FLAG,0LP2:MOV AL,[SI];前后比较CMP AL,[SI+1]JLE NEXTXCHG AL,[SI+1]MOV[SI],ALMOV FLAG,0FFHNEXT:INC SILOOP LP2;内循环继续JMP LP1;退出内循环LP3:DEC DI;重新设定循环次数MOV CL,[DI]MOV CH,0LP4:INC DI;循环输出字符MOV DL,[DI]MOV AH,02HINT21HLOOP LP4CALL ENTLEA DX,MEG8MOV AH,09HINT21HPOP DIPOP SIPOP DXPOP CXPOP BXPOP AXRETFUN3ENDPFUN4PROC NEAR;子程序4PUSH AXPUSH BXPUSH CXPUSH DXCALL CROT;调用子程序CROTMOV CH,AL;装入入口参数MOV AH,01HINT21HCALL CROTMOV CL,ALMOV AH,01HINT21HCALL CROTMOV DH,ALMOV DL,0CALL ENTMOV AH,2DH;调DOS中断置时间INT21HCMP AL,0FFHJE FALPRT:PUSH DX;输出时间MOV AL,CHMOV AH,0MOV BL,0AHDIV BLADD AL,30HADD AH,30HMOV DL,ALMOV DH,AHMOV AH,02HINT21HMOV DL,DHINT21HMOV DL,3AHINT21HMOV AL,CLMOV AH,0DIV BLADD AL,30HADD AH,30HMOV DL,ALMOV DH,AHMOV AH,02HINT21HMOV DL,DHINT21HMOV DL,3AHINT21HPOP DXMOV AL,DHMOV AH,0DIV BLADD AL,30HADD AH,30HMOV DL,ALMOV DH,AHMOV AH,02HINT21HMOV DL,DHINT21HMOV AH,2CH;调DOS中断取时间INT21HMOV AL,0AH;写入OCW3OUT20H,ALNOP;延时NOPNOPNOPNOPNOPNOPNOPNOPNOPNOPNOPIN AL,20H;读取IRRAND AL,02HJNE MKCALL COV;调子程序COVJMP PRTFAL:LEA DX,MEG7MOV AH,09HINT21HMK:CALL ENTMOV AH,01HINT21HLEA DX,MEG8MOV AH,09HINT21HPOP DXPOP CXPOP BXPOP AXRETFUN4ENDPCROT PROC NEAR;子程序CROT,完成ASCII码转换成两位十进制数PUSH BXPUSH CXPUSH DXMOV BL,0;初始化BL和BHMOV BH,0AHMOV DX,02H;设循环次数GET:MOV AH,01HINT21HSUB AL,30HCMP AL,0JB FALCMP AL,09HJA FALXCHG AL,BLMUL BHADD AL,BLXCHG AL,BLDEC DXCMP DX,0JNE GETMOV AL,BLPOP DXPOP CXPOP BXRET CROT ENDPCOV PROC;格式控制,使光标回到上个制表位PUSH AXPUSH CXPUSH DXMOV CX,08HMOV AH,02HMOV DL,08HREC:INT21HLOOP RECPOP DXPOP CXPOP AXRETCOV ENDPENT PROC;格式控制,输出回车换行MOV DL,0DHMOV AH,02HINT21HMOV DL,0AHMOV AH,02HINT21HRETENT ENDPMAIN ENDPCODE ENDSEND MAI五、程序调试及运行结果:主菜单1、功能一(小写字母转大写字母):2、功能二(找出ASCII码最大的字符):3、功能三(按ASCII码把字符从大到小排列):4、功能四(显示跳动的时间):5、功能五(退出程序):如果是错误的输入,提示如下:六、实验心得通过这个实验,基本掌握了子程序的调用方法,子程序可以单独设计,主程序做好了,可以嵌套具体功能的子程序实现需求,这个实验子程序可以分开调试,子程序决定具体功能,主程序是一个框架,这点有种化大为小的思想,告诉我们一个复杂功能的程序,可以分模块,按功能,一部分一部分地实现,最后嵌套,进行最后调试。
2019年微机原理软件实验报告学院:信息与通信工程学院班级:2019211122姓名:李济汉学号:10210737班内序号:20目录实验二分支、循环程序设计 (4)一、实验目的 (4)二、实验内容 (4)三、程序流程图 (4)四、实验原理 (5)五、实验源程序 (5)1、必做题 (5)2、选做题 (7)六、实验运行结果 (10)七、思考题.............................................................................. 错误!未定义书签。
八、实验总结、问题分析、心得体会 (11)实验三代码转换程序设计............... 错误!未定义书签。
一、实验目的 (12)二、实验内容 (12)三、程序流程图与程序模块图 (12)四、实验原理 (13)五、实验源程序 (13)六、实验运行结果 (15)七、思考题.............................................................................. 错误!未定义书签。
八、实验总结、问题分析、心得体会 (16)实验四子程序设计 (18)一、实验目的 (18)二、实验内容 (18)三、程序流程图与程序模块图 (18)四、实验原理 (20)五、实验源程序 (20)六、实验运行结果 (25)七、思考题 (26)八、实验总结、问题分析、心得体会 (27)实验五中断程序设计 (28)一、实验目的 (28)二、实验内容 (28)三、程序流程图 (29)四、实验原理 (29)五、实验源程序 (30)六、实验运行结果 (34)七、思考题 (34)八、实验总结、问题分析、心得体会 (35)实验二分支及循环程序设计一、实验目的1、开始独立进行汇编语言程序设计;2、掌握基本分支,循环程序设计;3、掌握最简单的 DOS 功能调用。
二、实验内容1、安排一个数据区,内存有若干个正数,负数和零.每类数的个数都不超过 9;2、编写一个程序统计数据区中正数,负数和零的个数;3、将统计结果在屏幕上显示。
微机原理实验报告一、实验目的本实验旨在通过实际操控和操作微型计算机,深入了解微机系统的组成和工作原理,加深对计算机硬件结构以及基本操作的理解,培养实际动手能力。
二、实验内容1.熟悉微机系统组成部分:主机、显示器、键盘等。
2.掌握微机系统的基本操作:开机、关机、复位、重启等。
3.了解微机系统的工作原理:运行机制、输入输出等。
4.实践运用微机系统进行一些简单的应用操作。
三、实验步骤1.开机操作:按下主机电源按钮,等待主机启动。
2.系统自检:主机启动后会进行自检操作,检查硬件是否正常。
如果发现问题,主机会发出蜂鸣声。
3.输入输出设备准备:连接好显示器和键盘,并检查是否正常连接。
4.系统登录:按照屏幕上的提示,输入用户名和密码进行系统登录。
5.系统操作:根据实验要求,进行相应的系统操作。
6.关机操作:在操作完成后,选择关机选项进行关机。
四、实验结果与分析通过本次实验,我掌握了微机系统的基本操作,并对其工作原理有了更深入的了解。
通过实际操作,我可以熟练地开机、关机、复位等操作,并可以进行一些简单的应用操作。
同时,我也了解到了微机系统由主机、显示器、键盘等多个组成部分组成,不同组成部分的协作工作实现了系统的正常运行。
五、实验心得通过本次实验,我对微机系统的组成和工作原理有了更深入的了解。
这对我后续学习计算机原理和操作系统提供了基础。
在实验过程中,我也发现了一些问题,比如操作系统选择界面的选择问题,我没有选择正确的操作系统,导致后续实验操作遇到一些困难。
这些问题提醒我在实际操作中需要格外注意,仔细阅读提示并选择正确的操作选项。
总结来说,本次实验对我深入理解微机系统的组成和工作原理提供了良好的机会。
通过实际操控和操作微型计算机,我对计算机硬件结构以及基本操作有了更直观的认识,掌握了一些基本操作技能。
在未来的学习和应用中,我将更加注重细节,提高自己的操作技能,并不断深入学习和了解更多关于微机系统的知识。
信息与通信工程学院微机原理软件实验报告班级:姓名:班内序号:学号:日期:2012年11月实验一 DEBUG地使用一、实验目地:1.掌握汇编程序地编辑,编译,连接和执行地全过程。
2.学习和掌握用DEBUG调试程序地方法.二、实验内容:1.用编辑软件,输入以下汇编语言源程序:DAT SEGMENTA DB 20 。
(自定)B DB 15 。
(自定)Y DB 3 DUP(0)Z DB 0,0DAT ENDSSTA SEGMENT STACKDW 50 DUP(?)STA ENDSCOD SEGMENTASSUME CS:COD,DS:DATSTAR PROC FARPUSH DSXOR AX,AXPUSH AXMOV AX,DATMOV DS,AXMOV AX,STAMOV SS,AXMOV AL,AMOV Z,ALMOV Z+1,ALCALL SUB1MOV AL,BMOV Z,ALMOV Z+1,ALCALL SUB1MOV AL,AMOV Z,ALMOV AL,BMOV Z+1,ALCALL SUB1ADD WORD PTR Y,AXADC BYTE PTR[Y+2],0RETSTAR ENDPSUB1 PROCMOV AL,ZMOV AH,Z+1MUL AHADD WORD PTR Y,AXADC BYTE PTR[Y+2],0RETSUB1 ENDPCOD ENDSEND STAR2.通过编译,连接形成可执行文件.3.用 DEBUG 将可执行文件调入,并进行调试.(1)用 D 命令观察数据区在内存中地具体内容,记录单元 A 和 B 地具体地址.(2)用 U 命令对目标代码反汇编,观察反汇编后地结果.注意发现源程序地起始位置, 并记录这个起始地址.(3)用 T 命令作单步跟踪调试.比较每条指令执行后地结果和原来地理解是否一致.得出程序运行地结果:它们是写在什么单元,具体内容是什么。
并判断结果是否正确.(4)在子程序 SUB1 地入口处设一断点,用 G 命令执行程序. 在断点处观察堆栈地内容,比较堆栈地内容和程序返回地址是否一致.(5)用 E 命令修改单元 A,B 地内容,重新执行程序,并记录结果.(6)用 M 命令和 A 命令对程序进行修改: 将主程序中最后两条指令 (ADD 和ADC) 修改为一条 CALL SUB1 指令,重新执行程序.(7)退出 DEBUG.4.重新使用编辑软件,把源程序最后一句中地 STAR 去掉.再次生成可执行文件,并用 DEBUG 调入内存.当使用 U 命令时,显示地结果与前一次(未加 STAR) 地结果有何不同?三、预习题:1.熟悉常用地 DEBUG 命令.2.阅读并分析程序地功能.3.若 SS=2000H,SP=FFFFH, 向堆栈中压入 4 字节数据后,如何用 D 命令显示压入堆栈地内容?答:使用debug 指令“d 2000:0000”即可显示压入堆栈地内容,这是因为SP+1 会溢出,变成0000.四、实验过程如上图,通过masm和link命令程序编译连接成功.进入debug中,用u命令查看反编译结果.得出A地地址为:0B88:0000,值为1BH,即十进制地27D;B地地址为:0B88:0001,值为33,即十进制地51D. Y地偏移地址为0002H,Z地偏移地址为0005H.DATA段基地址为0B88H.SUB1子程序段入口地址为003F.如上图所示,用E命令将A和B地值由1EH,33H改为10H,20H,通过d命令重新查看A,B地数值,发现改变成功.通过U命令查看反汇编结果,在CALL SUB1即CALL 003F处设置一个断点,单步调试.上图为用t命令单步运行结果,执行SUB1之后返回主程序时CS为0B88,IP为001A,压入堆栈地IP值已经弹出,CS,IP已经指向下一条指令.上图为用用 M 命令和 A 命令对程序进行修改: 将主程序中最后两条指令 (ADD 和ADC) 修改为一条 CALL SUB1 指令,重新执行程序.如上图所示,将源代码中最后一句END STAR改成EDN,发现编译连接均可通过,但是DEBUG时出现了严重地错误,没有END STAR语句,编译器将不知道代码段地入口地址是多少,导致从数据段开始译码,后续译码全部紊乱.END STAR地作用是指示编译器程序结束,同时告诉编译器程序执行时代码段地入口地址.五、实验总结本次实验我初步了解了汇编语言地调试过程.实验之前我还觉得汇编语言过于抽象,难以看懂.实验中我使用-t与-d相结合地方法,逐步调试并查看该步对寄存器及内存地影响,终于对汇编语言有了入门地认识.实验中应注意以下几点:在debug 过程中,任何存储器单元都无法用标号来识别,要使用它们,只能使用物理地址调用.使用u 指令修改asm 代码时要对照反汇编地结果,若要删去某条指令,可以找到那条指令在代码段地偏移地址,再用u 指令将其修改为NOP(从该指令开始到下一条指令开始地地址-1 处).可以结合r 指令、t 指令、已经用g 指令设置断点来诊断问题.实验二分支、循环程序设计一、实验目地1.开始独立进行汇编语言程序设计;2.掌握基本分支,循环程序设计;3.掌握最简单地 DOS 功能调用.二、实验内容1.安排一个数据区,内存有若干个正数,负数和零.每类数地个数都不超过 9.2.编写一个程序统计数据区中正数,负数和零地个数.3.将统计结果在屏幕上显示.4.(扩展题)统计出正奇数、正偶数,负奇数、负偶数以及零地个数.三、预习思考1. 十进制数 0 ~ 9 所对应地 ASCII 码是什么?如何将十进制数 0 ~ 9 在屏幕上显示出来?答:0~9分别对应ASCII码地30H~39H.欲将十进制数0~9显示在屏幕上,只需要用二进制数0~9分别加上30H即可.2. 如何检验一个数为正,为负或为零?你能举出多少种不同地方法?答:方法有多种,现举出两种.一是直接用CMP命令和0比较,然后用JZ 等命令进行判断;二是和0相比是否相等,然后用该数(假设为8位)和10000000相与,取出符号位判断,可区分正负.其余方法大同小异,核心地思想是要么直接和0相比,要么使用逻辑或移位运算,取出符号为进行判断.四、实验流程图五、实验源代码DATA SEGMENTBUFF DB -1,-4,0,1,2,3,4,-1,-2,-3,-4,-5,-8,-10COUNT EQU $-BUFFCOUNT1 DB 0 。
微机原理宏指令及子程序设计实验:宏指令和子程序的区别微机原理宏指令及子程序设计实验:宏指令和子程序的区别西安邮电学院微机原理实验报告题目:宏指令及子程序设计实验院系名称:班级:学生姓名:学号(8位):指导教师:2.5 宏令及子程序设计实验2.5.1 实验目的1、熟悉宏指令、宏定义、宏调用以及宏展开的概念;掌握宏指令的定义与调用的方法。
2、掌握子程序的定义、调用以及调用程序与子程序之间参数的传递方法。
3、了解宏指令与子程序的异同以及各自的适用场合。
2.5.2 实验预习要求1、复习宏指令的定义与调用方法。
2、复习过子程序的定义与调用方法。
3、根据“2.5.3 实验内容”中给出的流程图和程序框架编写源程序,以便上机调试。
4、从“2.5.4 实验习题”中任选一道题目,编写源程序,以便上机调试。
2.5.3 实验内容从键盘输入10个无符号十进制数(小于256),将其转换为二进制数并存放在NUM 字节型变量中,找出其中的最大数,并将找出的最大数在屏幕上显示出来。
要求:① 在屏幕上显示字符串提示信息的功能由宏指令DSTRING 实现;② 将键盘输入的十进制数转换成二进制数由子程序DTOB 实现;③ 在N 个无符号字节型二进制数中找出最大数的功能由子程序FMAX 实现;④ 将一个无符号字节型二进制数转换为十进制数并在屏幕上显示的功能由子程序BTOAD 实现。
程序运行结果如右图所示。
1、编程指导(1)显示提示信息的宏指令DSTRING 的编写宏指令通常用于在程序中需要反复使用但所需指令条数又不是很多的情形;而对于需要经常使用且需要较多指令才能完成的功能通常通过子程序调用来实现。
这是因为,从执行速度上看,由于子程序调用涉及到保护断点的操作,因此,子程序调用比宏调用执行时间相对要稍长一些;但从生成的可执行文件的大小方面考虑,子程序调用生成的文件要小一些。
读者在进行汇编语言程序设计时,应综合考虑两者的利弊,以便进行合理选择。
微机原理实验报告实验目的,通过本次实验,掌握微机原理的基本知识,了解微机系统的组成和工作原理,掌握微机系统的组装和调试方法。
实验一,微机系统组成及工作原理。
1.1 微机系统的组成。
微机系统由中央处理器(CPU)、内存、输入设备、输出设备和外部设备等组成。
其中,CPU是微机系统的核心部件,负责控制整个系统的运行。
1.2 微机系统的工作原理。
微机系统的工作原理是通过CPU对内存中的指令进行解释和执行,从而实现各种功能。
CPU通过总线与内存、输入输出设备进行数据传输和控制信号的交换,实现对整个系统的控制和管理。
实验二,微机系统的组装和调试。
2.1 微机系统的组装。
在组装微机系统时,首先要选择合适的主板、CPU、内存、硬盘等配件,然后按照正确的安装顺序和方法进行组装。
组装完成后,还需连接电源、显示器、键盘、鼠标等外部设备。
2.2 微机系统的调试。
组装完成后,需要对微机系统进行调试,检查各个部件是否连接正确,是否能够正常工作。
通过BIOS设置和操作系统的安装,完成对微机系统的调试和配置。
实验三,微机系统的应用。
3.1 微机系统的应用领域。
微机系统广泛应用于各个领域,如办公、教育、科研、娱乐等。
在办公领域,微机系统可以用于文字处理、表格制作、图像处理等;在教育领域,微机系统可以用于多媒体教学、网络教学等。
3.2 微机系统的发展趋势。
随着科技的不断发展,微机系统也在不断更新换代,性能不断提升,体积不断缩小,功耗不断降低。
未来,微机系统将更加智能化、便携化,成为人们生活、工作不可或缺的一部分。
结论,通过本次实验,我对微机原理有了更深入的了解,掌握了微机系统的组成和工作原理,了解了微机系统的组装和调试方法,对微机系统的应用和发展趋势也有了一定的认识。
这对我今后的学习和工作将有很大的帮助。
实验报告课程名称:《微机原理》实验第3次实验实验名称:宏命令与子程序的区别实验时间:2015年10月13日实验地点:XXXXXX组号__________学号:XXXX姓名:XXX指导老师:XX 评定成绩:___________微机原理实验4南京大学工程管理学院一、实验设备:计算机二、实验用时:4小时三、实验内容:1.单步运行实例函数NO3_Mpy_8,了解单字节无符号数乘法的实现方法。
2.编写子程序Mpy_16,实现双字节无符号数乘法。
自行定义变量,其中:ACCALO ;存放乘数低8 位ACCAHI ;存放乘数高8 位ACCBLO ;存放被乘数低8 位和乘积第16~23 位ACCBHI ;存放被乘数高8 位和乘积第24~31 位ACCCLO ;存放乘积第0~7 位ACCCHI ;存放乘积第8~15 位编写Main主程序,使用乘数0x4015和被乘数0x3321对编写的子程序进行测试,结果应为0x0CCC71B5。
3.编写宏命令Mpy_16,实现单字节无符号数乘法。
编写Main 主程序调用宏命令并对运算结果进行测试。
4.使用反汇编工具Disassembly Listing单步运行程序,观察子程序与宏命令的差异。
四、实验报告要求:1. 程序框图和源程序清单。
2. 分析宏扩展过程,说明宏与子程序的差别。
五、实验结果: 1、程序框图 (1)子程序Mpy_16否是子程序调用初始化循环计数器TEMP将乘数ACCBHI 、ACCBLO 复制到MDHI 、MDLO中ACCAHI 、ACCBHI 、ACCALO 、ACCBLO 分别相加,结果放入ACCBHI 、ACCBLO 中ACCBHI 、ACCBLO 、ACCCHI 、ACCCLO 清零 MDHI 、MDLO 算数右移一位,最低位进入C C=1?否是(2)宏命令Mpy_16ACCBHI 、ACCBLO 带进位位右移,最低位放入C中 ACCCHI 、ACCCLO 带进位位右移,最低位放入C 中TEMP=TEMP-1TEMP=0?子程序返回开始初始化循环计数器TEMP将乘数ACCBHI 、ACCBLO 复制到MDHI 、MDLO中ACCBHI 、ACCBLO 、ACCCHI 、ACCCLO 清零否是否是2、源程序清单 (1)子程序Mpy_16list p=16f877A ; list directive to define processorACCBHI 、ACCBLO 带进位位右移,最低位放入C中 ACCAHI 、ACCBHI 、ACCALO 、ACCBLO 分别相加,结果放入ACCBHI 、ACCBLO 中ACCCHI 、ACCCLO 带进位位右移,最低位放入C 中 MDHI 、MDLO 算数右移一位,最低位进入CTEMP=TEMP-1C=1?TEMP=0?结束#include <p16f877A.inc> ; processor specific variable definitions__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_OFF & _HS_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFFACCALO EQU 0x20 ;存放加数低8位ACCAHI EQU 0x21 ;存放加数高8位ACCBLO EQU 0x22 ;存放被加数低8位ACCBHI EQU 0x23 ;存放被加数高8位ACCCLO EQU 0x24;ACCCHI EQU 0x25;MDLO EQU 0x26;MDHI EQU 0x27;TEMP EQU 0x28 ;临时寄存器; 双字节加法子程序,入口地址ACCB + ACCA,出口地址ACC ORG 0x0000 ; 复位入口地址nop ; 兼容ICD调试工具,必须加nop goto Main ; 跳转至Main函数MainMOVLW 0x15;MOVWF ACCALO;MOVLW 0x40;MOVWF ACCAHI;MOVLW 0x21;MOVWF ACCBLO;MOVLW 0x33;MOVWF ACCBHI;CALL MPY_16;NOP;GOTO $;ORG 0x0100MPY_16CALL SETUP ;MLOOPBCF STATUS, C ; 清进位位RRF MDHI ; MD 右移 RRF MDLO;BTFSC STATUS, C ;判断是否需要相加CALL Add_16 ; 加乘数至 MB RRF ACCBHI ; 右移部分乘积RRF ACCBLO;RRF ACCCHI;RRF ACCCLO;DECFSZ TEMP ; 乘法完成否?GOTO MLOOP ; 否,继续求乘积RETURN ; 子程序返回SETUPMOVLW .16 ;初始化 TEMP 寄存器MOVWF TEMPMOVF ACCBLO, W ; 乘数送MDMOVWF MDLO;MOVF ACCBHI,W;MOVWF MDHI;CLRF ACCBLO ; 清 MBCLRF ACCBHI;CLRF ACCCLO ;清 MCCLRF ACCCHI;RETURN ;子程序返回Add_16MOVF ACCALO, w ;ACCB和ACCA低半字节相加ADDWF ACCBLO , f ;BTFSC STATUS, C ;有进位否?INCF ACCBHI;有,ACCB高字节加1,再加ACCAHI MOVF ACCAHI, w ; ACCA、ACCB高半字节相加ADDWF ACCBHI, f ;RETURN ;子程序返回END;(2)宏命令Mpy_16list p=16f877A ; list directive to define processor #include <p16f877A.inc> ; processor specific variable definitions__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_OFF & _HS_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFFMPY_16 macro ACCALO1,ACCAHI1,ACCBLO1,ACCBHI1,ACCCLO1,ACCCHI1,MDHI1,MDLO1,TEMP1;SETUPACCALO1,ACCAHI1,ACCBLO1,ACCBHI1,ACCCLO1,ACCCHI1,MDHI1,MDLO1,TEMP1 ;MLOOPBCF STATUS, C ; 清进位位RRF MDHI1 ; MD 右移RRF MDLO1;BTFSS STATUS, C ;判断是否需要相加GOTO LOOP;Add_16ACCALO1,ACCAHI1,ACCBLO1,ACCBHI1,ACCCLO1,ACCCHI1,MDHI1,MDLO1 ,TEMP1 ; 加乘数至 MBLOOPRRF ACCBHI1 ; 右移部分乘积RRF ACCBLO1;RRF ACCCHI1;RRF ACCCLO1;DECFSZ TEMP1 ; 乘法完成否?GOTO MLOOP ; 否,继续求乘积ENDM ; 子程序返回SETUP macro ACCALO2,ACCAHI2,ACCBLO2,ACCBHI2,ACCCLO2,ACCCHI2,MDHI2,MDLO2 ,TEMP2;MOVLW .16 ;初始化 TEMP 寄存器MOVWF TEMP2MOVF ACCBLO2, W ; 乘数送MDMOVWF MDLO2;MOVF ACCBHI2,W;MOVWF MDHI2;CLRF ACCBLO2 ; 清 MBCLRF ACCBHI2;CLRF ACCCLO2 ;清 MCCLRF ACCCHI2;ENDM ;子程序返回Add_16 macro ACCALO3,ACCAHI3,ACCBLO3,ACCBHI3,ACCCLO3,ACCCHI3,MDHI3,MDLO3,TEMP3;MOVF ACCALO3, w ;ACCB和ACCA低半字节相加ADDWF ACCBLO3 , f ;BTFSC STATUS, C ;有进位否?INCF ACCBHI3;有,ACCB高字节加1,再加ACCAHI MOVF ACCAHI3, w ; ACCA、ACCB高半字节相加ADDWF ACCBHI3, f ;ENDM ;子程序返回ACCALO EQU 0x20 ;存放加数低8位ACCAHI EQU 0x21 ;存放加数高8位ACCBLO EQU 0x22 ;存放被加数低8位ACCBHI EQU 0x23 ;存放被加数高8位ACCCLO EQU 0x24;ACCCHI EQU 0x25;MDLO EQU 0x26;MDHI EQU 0x27;TEMP EQU 0x28 ;临时寄存器; 双字节加法子程序,入口地址ACCB + ACCA,出口地址ACC ORG 0x0000 ; 复位入口地址nop ; 兼容ICD调试工具,必须加nop goto Main ; 跳转至Main函数MainMOVLW 0x15;MOVWF ACCALO;MOVLW 0x40;MOVWF ACCAHI;MOVLW 0x21;MOVWF ACCBLO;MOVLW 0x33;MOVWF ACCBHI;MPY_16ACCALO,ACCAHI,ACCBLO,ACCBHI,ACCCLO,ACCCHI,MDHI,MDLO,TEMP; NOP;GOTO $;END;3、程序运行结果截图(1)子程序Mpy_16子程序运行结果(2)宏命令Mpy_16宏指令运行结果4、分析宏扩展过程,说明宏与子程序的差别(1)子程序Mpy_16的反汇编结果子程序的反汇编代码1子程序的反汇编代码2(2)宏命令Mpy_16的反汇编结果0000 0000 NOP0001 2802 GOTO 0x20002 3015 MOVLW 0x150003 00A0 MOVWF 0x200004 3040 MOVLW 0x400005 00A1 MOVWF 0x210006 3021 MOVLW 0x210007 00A2 MOVWF 0x220008 3033 MOVLW 0x330009 00A3 MOVWF 0x23000A 3010 MOVLW 0x10000B 00A8 MOVWF 0x28000C 0822 MOVF 0x22, W000D 00A6 MOVWF 0x26000E 0823 MOVF 0x23, W000F 00A7 MOVWF 0x270010 01A2 CLRF 0x220011 01A3 CLRF 0x230012 01A4 CLRF 0x240013 01A5 CLRF 0x250014 1003 BCF 0x3, 00015 0CA7 RRF 0x27, F0016 0CA6 RRF 0x26, F0017 1C03 BTFSS 0x3, 00018 281F GOTO 0x1f0019 0820 MOVF 0x20, W001A 07A2 ADDWF 0x22, F001B 1803 BTFSC 0x3, 0001C 0AA3 INCF 0x23, F001D 0821 MOVF 0x21, W001E 07A3 ADDWF 0x23, F001F 0CA3 RRF 0x23, F0020 0CA2 RRF 0x22, F0021 0CA5 RRF 0x25, F0022 0CA4 RRF 0x24, F0023 0BA8 DECFSZ 0x28, F0024 2814 GOTO 0x140025 0000 NOP0026 2826 GOTO 0x262007 2394 CALL 0x394(3)宏扩展过程宏扩展只是用原来宏定义中的若干条汇编指令代替程序中的“一条”宏指令插入到此宏指令位置处,进行直接替换功能。
实验4 字符及字符串的输入和输出一、实验任务及实验目的1、熟悉如何进行字符及字符串的输入输出。
2、掌握简单的dos系统功能调用3、熟悉在pc上建立、汇编、链接、调试和运行8086汇编语言的全过程二、实验内容、过程及实验现象记录1、assume cs:cseg,ds:dsegdseg segment;数据段dseg endcseg segmentmain proc farmov ax,dsegmov ds,ax;主程序mov ax,4c00hint 21hmain endpcseg endsend main2、(1)AL=35,是字符5的ACSCII码(2)分别是41、42、43、44,是A、B、C、D的ASCII码3、(1)是04h,它表示实际输入的字符个数。
(2)从DS:1002H开始的内存区域中的内容分别是5、4、3、2和回车键ASCII码。
其中没有字符“1”的ASCII码,因为实际长度只有4位,其中有一位是回车键,所以没有字符“1”的ASCII码。
(1)显示了。
(2)和第一题是一样的,屏幕都显示了对应的字符。
(3)屏幕都没有显示。
0ah是回车键的ASCII码,对应无显示。
(4)没有输出,有‘哔’的一声5、org 100hmov ax, 3int 10hmov ax, 1003hmov bx, 0int 10hmov ax, 0b800hmov ds, axmov [02h], 'H'mov [04h], 'e'mov [06h], 'l'mov [08h], 'l'mov [0ah], 'o'mov [0ch], ','mov [0eh], 'W'mov [10h], 'o'mov [12h], 'r'mov [14h], 'l'mov [16h], 'd'mov [18h], '!'mov cx, 12mov di, 03hret7、codes segmentassume cs:codesstart:mov ch,20hmov bl,6lll:mov bh,16ll:mov dl,chmov ah,2int 21hinc chdec bhjnz llmov dl,0ahint 21hmov dl,0dhint 21hdec bljnz lllmov ah,4chint 21hcodes endsend start三、实验结果及总结通过此次实验,我熟悉了如何进行字符及字符串的输入输出,掌握了简单的DOS系统功能调用,学到了不少知识。
微机原理及接口技术实验报告班级:光094-2姓名:....学号:20091350429实验一熟悉宏汇编程序及debug一.实验目的1.学习并掌握汇编语言指令寻址方式2.熟悉在PC机上用DEBUG调试和运行汇编语言指令的过程。
二.实验内容根据给定寄存器内容及存储单元内容,运行给定指令,观察记录运行结果1、给定的寄存器内容及存储单元内容(DS)=2000H,(SI)=0002H,(BX)=0100H(20100H)=1H,(20101H)=34H,(20102H)=56H,(20103H)=78H,(21200H)=2AH,(21201H)=4CH,(21202H)=0B7H,(21203H)=65H2、指令(1)M OV AX,1200H(2)M OV AX,BX(3)M OV AX,[1200H](4)M OV AX,[BX](5)M OV AX,1100H[BX](6)M OV AX,[BX][SI](7)M OV AX,1100H[BX][SI]四.调试步骤1.运行DEBUG。
2.用A命令汇编指令(1)3.按给定寄存器和存储单元内容修改寄存器和存储单元内容。
4.单步运行指令,查看结果5.重复上述步骤,调试指令(2)——(7)指令寻址方式源操作数有效地址源操作数物理地址指令运行结果(AX)1 立即寻址 0100 20100 12002 寄存器寻址 0103 20103 01003 直接寻址 1200 21200 4c2a4 寄存器间接寻址0100 20100 34125 寄存器相对寻址1200 21200 4c2a6 基址变址寻址 0102 20102 78567 相对基址变址寻址1202 21202 65b7 六.思考题1、汇编语言指令有哪些寻址方式?用于寻址的寄存器有哪些?立即数寻址、直接寻址,寄存器寻址,寄存器间接寻址,寄存器相对寻址,基址变址寻址,基址变址相对寻址。
对于16位数据,寄存器可以是AX,BX,CX,DX,SI,DI,SP,BP; 对于8位数据,寄存器可以是AH,AL,BH,BL,CH,CL,DH,DL实验二寻址方式练习及多字节运算程序一.实验目的1.学习并掌握数据传送指令和算术运算指令2.熟悉在PC机上编辑、汇编、连接、调试与运行汇编语言程序的过程。
微机原理实验报告
一、实验目的
本次实验的主要目的是了解微机原理、学习微机的基础知识、技能和操作方法,还有熟悉微机实验室的使用方法。
二、实验过程
在实验室中,我们首先进行了掌握微处理器的基本指令集和编程技巧的实验。
通过对微处理器的学习,我们了解到了微处理器的组成结构和工作原理,同时也了解了微处理器的基础指令集,包括数据的传送、算术、逻辑、分支、循环指令等等。
接着我们进行了CPU总线实验。
通过对CPU总线的学习,我们了解了CPU读写内部和外部存储器的方法和原理。
同时,我们学习了编写程序来控制CPU读写存储器等。
最后,我们进行了8255并行接口控制实验。
通过学习并实践8255并行接口控制实验,我们了解了接口及其编程。
三、实验结果
在实验中,我们成功地掌握了微处理器的基本指令集和编程技巧,了解了微处理器的组成结构和工作原理,同时掌握了CPU总
线实验和8255并行接口控制实验。
在实验中不仅增长了专业知识,而且也培养了我们的实验能力,并进一步增强了我们的实践能力。
四、实验心得
通过这次实验,我们意识到,要想成为一名优秀的计算机专业
人才,必须首先打牢微机原理的基础,通过大量的实践和实验,
来应用理论知识,深入了解计算机底层的数据处理方式以及处理
器和存储器的工作原理。
只有这样才能够在日后工作中运用自如,并且在以后的学习和研究中更具备竞争力。
在以后的学习中,我将持续学习和实践,不断探索和发现,提
升自身的能力,为未来的发展做好充分的准备。
华南理工大学微机原实验四:子程序设计一.实验目的1、学习子程序的定义和调用方法。
2、掌握子程序、子程序嵌套的结构。
3、掌握子程序的程序设计、编制及调试方法。
二.实验内容程序采用菜单式选择,可接收用户输入的命令(1~5),各命令如下:按1键完成字符串小写字母变大写字母用户输入一由英文大小写字母或数字0~9组成的字符串(以回车结束),程序逐个检查字符串中各字符,将原串中小写字母变成大写字母,其它字符不变,并在屏幕上显示。
用户按任一键,重做,按ESC键,返回主菜单。
按2键完成找最大值(二选一)1、接收用户输入的可显示字符串(以回车结束),程序将其中ASCII码值最大的字符显示出来。
2、接收用户输入若干无符号8位数(以空格或逗号为分隔符,以回车结束),程序将其中最大的数显示出来。
用户按任一键,重做,按ESC键,返回主菜单。
按3键完成排序(二选一)1、接收用户输入的可显示字符串,以回车结束。
程序按ASCII码值大小由大到小排序并输出显示。
2、接收用户输入若干个有符号8位数(以空格逗号为分隔符,以回车结束)。
程序将其中最大的数显示出来。
用户按任一键,重做,按ESC键,返回主菜单。
按4键显示时间首先提示用户对时,即用户输入时,分,秒(以空格或冒号分隔,以回车结束),然后,在屏幕上不断显示时间,格式为:××(时):××(分):××(秒),最好定点显示。
用户按任一键,重新对时,按ESC键,返回主菜单。
按5键,结束程序运行,返回系统提示符。
三.程序与流程图主程序的简略流程子程序一的简略流程图子程序二的简略流程图子程序三的简略流程图子程序4,显示时间流程图四、源程序代码DATA SEGMENTORG 9999HMENU DB 0DH,0AH,'Programed by Deng Tengfei Class Electronic Material Grade 09',0DH,0AH, ;菜单DB 'Please input 1~5 to choose service',0DH,0AH,DB '1: Convert a small letter to a big letter' ,0DH,0AH,DB '2: Seek the bigest number',0DH,0AH,DB '3: Put the character string in order' ,0DH,0AH,DB '4: Set time and check time',0DH,0AH,DB '5: End the program$'MEG0 DB ' Please choose function$' ;提示信息MEG0~MEG8MEG1 DB 'You have choose the function 1.',0DH,0AH,'Please input the character string you want to convert:$'MEG2 DB 'You have choose the function 2.',0DH,0AH,'Please input the character string:$'MEG3 DB 'You have choose the function 3.',0DH,0AH,'Please input the character string you want to sort$'MEG4 DB 'You have choose the function 4.',0DH,0AH,'Please input the time you want to set in format like:xx:xx:xx$'MEG5 DB 'The program is end$'MEG6 DB 'Sorry.you have chosen a undefined function .Please input a correct function number$' MEG7 DB 'Fail to set time$'MEG8 DB 'Press any key to do again or press the ESC key to return to the main menu$ 'FLAG DB -1 ;冒泡排序中使用的标志DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATAMAIN PROC NEAR ;主程序MOV AX,DATAMOV DS,AXCIN: LEA DX,MENU ;输出提示信息MOV AH,09HINT 21HCALL ENT ;输出回车换行LEA DX,MEG0MOV AH,09HINT 21HCALL ENTMOV AH,01HINT 21HCMP AL,30H ;判断功能号JLE EORCMP AL,31HJE F1CMP AL,32HJE F2CMP AL,33HJE F3CMP AL,34HJE F4CMP AL,35HJE F5EOR: CALL ENTLEA DX,MEG6 ;输出出错信息MOV AH,09HINT 21HJMP CINF1: CALL ENT ;功能1LEA DX,MEG1MOV AH,09HINT 21HCALL ENTCALL FUN1 ;调用子程序1MOV AH,01HINT 21HCMP AL,1BHJNE F1JMP CINF2: CALL ENT ;功能2LEA DX,MEG2MOV AH,09HINT 21HCALL ENTCALL FUN2 ;调用子程序2MOV AH,01HINT 21HCMP AL,1BHJNE F2JMP CINF3: CALL ENT ;功能3LEA DX,MEG3MOV AH,09HINT 21HCALL ENTCALL FUN3 ;调用子程序3MOV AH,01HINT 21HCMP AL,1BHJNE F3JMP CINF4: CALL ENT ;功能4LEA DX,MEG4MOV AH,09HINT 21HCALL ENTCALL FUN4 ;调用子程序4MOV AH,01HINT 21HCMP AL,1BHJNE F4JMP CINF5: MOV AH,4CH ;功能5,终止程序INT 21HFUN1 PROC NEAR ;子程序1PUSH AXPUSH CXPUSH DXPUSH SIMOV AH,0AH ;字符串输入INT 21HCALL ENTMOV SI,DXINC SIMOV CL,[SI] ;设定循环次数MOV CH,0JIK: INC SIMOV AL,[SI]CMP AL,0DH ;判断字符ASCII码JE KLCMP AL,61HJB JKCMP AL,7AHJA JKSUB AL,20H ;小写转大写JK: MOV DL,AL ;输出字符MOV AH,02HINT 21HLOOP JIKCALL ENTLEA DX,MEG8MOV AH,09HINT 21HKL: POP SIPOP DXPOP CXPOP AXRETFUN1 ENDPFUN2 PROC NEAR ;子程序2PUSH AXPUSH CXPUSH DXPUSH SIMOV AH,0AHINT 21HCALL ENTMOV SI,DXINC SIMOV CL,[SI]MOV CH,0INC SIMOV AL,[SI]FH: INC SI ;循环比较CMP AL,[SI]JA FGMOV AL,[SI]FG: LOOP FHMOV DL,ALMOV AH,02HINT 21HCALL ENTLEA DX,MEG8MOV AH,09HINT 21HPOP SIPOP DXPOP CXPOP AXRETFUN2 ENDPFUN3 PROC NEAR ;子程序3PUSH AXPUSH BXPUSH CXPUSH DXPUSH SIPUSH DIMOV AH,0AHINT 21HCALL ENTMOV SI,DXINC SIMOV BL,[SI]MOV BH,0INC SIMOV DI,SILP1: CMP FLAG,0 ;根据标志判断JE LP3DEC BX ;检查循环次数CMP BX,0JE LP3MOV CX,BXMOV SI,DIMOV FLAG,0LP2: MOV AL,[SI] ;前后比较CMP AL,[SI+1]JLE NEXTXCHG AL,[SI+1]MOV [SI],ALMOV FLAG,0FFHNEXT:INC SILOOP LP2 ;内循环继续JMP LP1 ;退出内循环LP3: DEC DI ;重新设定循环次数MOV CL,[DI]MOV CH,0LP4: INC DI ;循环输出字符MOV DL,[DI]MOV AH,02HINT 21HLOOP LP4CALL ENTLEA DX,MEG8MOV AH,09HINT 21HPOP DIPOP SIPOP DXPOP CXPOP BXPOP AXRETFUN3 ENDPFUN4 PROC NEAR ;子程序4PUSH AXPUSH BXPUSH CXPUSH DXCALL CROT ;调用子程序CROTMOV CH,AL ;装入入口参数MOV AH,01HINT 21HCALL CROTMOV CL,ALMOV AH,01HINT 21HCALL CROTMOV DH,ALMOV DL,0CALL ENTMOV AH,2DH ;调DOS中断置时间INT 21HCMP AL,0FFHJE FALPRT: PUSH DX ;输出时间MOV AL,CHMOV AH,0MOV BL,0AHDIV BLADD AL,30HADD AH,30HMOV DL,ALMOV DH,AHMOV AH,02HINT 21HMOV DL,DHINT 21HMOV DL,3AHINT 21HMOV AL,CLMOV AH,0DIV BLADD AL,30HADD AH,30HMOV DL,ALMOV DH,AHMOV AH,02HINT 21HMOV DL,DHINT 21HMOV DL,3AHINT 21HPOP DXMOV AL,DHMOV AH,0DIV BLADD AL,30HADD AH,30HMOV DL,ALMOV DH,AHMOV AH,02HINT 21HMOV DL,DHINT 21HMOV AH,2CH ;调DOS中断取时间INT 21HMOV AL,0AH ;写入OCW3OUT 20H,ALNOP ;延时NOPNOPNOPNOPNOPNOPNOPNOPNOPNOPNOPIN AL,20H ;读取IRRAND AL,02HJNE MKCALL COV ;调子程序COVJMP PRTFAL: LEA DX,MEG7MOV AH,09HINT 21HMK: CALL ENTMOV AH,01HINT 21HLEA DX,MEG8MOV AH,09HINT 21HPOP DXPOP CXPOP BXPOP AXRETFUN4 ENDPCROT PROC NEAR ;子程序CROT ,完成ASCII 码转换成两位十进制数PUSH BX PUSH CX PUSH DXMOV BL,0 ;初始化BL 和BH MOV BH,0AHMOV DX,02H ;设循环次数 GET: MOV AH,01H INT 21HSUB AL,30H CMP AL,0 JB FAL CMP AL,09H JA FAL XCHG AL,BL MUL BH ADD AL,BL XCHG AL,BL DEC DX CMP DX,0 JNE GET MOV AL,BL POP DX POP CX POP BX RETCROT ENDPCOV PROC ;格式控制,使光标回到上个制表位PUSH AX PUSH CX PUSH DX MOV CX,08H MOV AH,02H MOV DL,08H REC: INT 21H LOOP REC POP DX POP CX POP AX RETCOV ENDPENT PROC ;格式控制,输出回车换行 MOV DL,0DH MOV AH,02H INT 21HMOV DL,0AH MOV AH,02H INT 21H RET ENT ENDP MAIN ENDP CODE ENDS END MAI五、程序调试及运行结果:主菜单1、功能一(小写字母转大写字母):2、功能二(找出ASCII 码最大的字符):3、功能三(按ASCII码把字符从大到小排列):4、功能四(显示跳动的时间):5、功能五(退出程序):如果是错误的输入,提示如下:六、实验心得通过这个实验,基本掌握了子程序的调用方法,子程序可以单独设计,主程序做好了,可以嵌套具体功能的子程序实现需求,这个实验子程序可以分开调试,子程序决定具体功能,主程序是一个框架,这点有种化大为小的思想,告诉我们一个复杂功能的程序,可以分模块,按功能,一部分一部分地实现,最后嵌套,进行最后调试。