实训2 程序规范化与调试能力
实验报告程序调试

实验报告程序调试实验报告:程序调试摘要:本实验报告旨在介绍程序调试的基本概念和方法。
通过实验,我们探讨了常见的程序错误类型以及调试工具和技巧。
通过本实验的学习,我们可以更好地理解程序调试的重要性,并掌握一些实用的调试技巧,以提高程序开发的效率和质量。
引言:在软件开发过程中,程序调试是非常重要的一环。
程序调试是指在程序编写完成后,通过对程序的运行状态进行观察和分析,找出程序中存在的错误并加以修正的过程。
程序调试不仅可以帮助开发人员发现并解决问题,还可以提高程序的稳定性和性能。
因此,学习和掌握程序调试技巧对于软件开发人员来说至关重要。
材料与方法:本次实验使用了一台配置良好的计算机和一些常见的程序调试工具,如调试器、日志记录工具等。
实验过程中,我们编写了一些包含常见错误的程序,并使用调试工具对这些程序进行调试和修复。
结果与讨论:在实验过程中,我们发现了一些常见的程序错误类型,如语法错误、逻辑错误、内存泄漏等。
通过调试工具的使用,我们成功地找出并修复了这些错误,使程序得以正常运行。
此外,我们还学习了一些实用的调试技巧,如断点调试、日志记录、单步执行等,这些技巧可以帮助我们更快地定位和解决程序中的问题。
结论:通过本次实验,我们深刻认识到了程序调试在软件开发过程中的重要性。
程序调试不仅可以帮助我们发现和解决问题,还可以提高程序的质量和稳定性。
因此,我们应该不断学习和掌握各种调试工具和技巧,以提高程序开发的效率和质量。
希望通过本次实验的学习,我们可以更好地应用程序调试技术,为软件开发工作增添新的动力和信心。
实习过程中的软件开发调试技巧

实习过程中的软件开发调试技巧作为一名软件开发实习生,调试是我们日常工作中不可或缺的一部分。
通过调试,我们可以找到并解决程序中的问题,确保软件的质量。
然而,在调试过程中,我们常常会遇到一些困难和挑战。
下面我将分享一些我在实习过程中学到的调试技巧,希望能对其他实习生有所帮助。
1. 使用调试工具在软件开发中,使用调试工具是必不可少的。
常见的调试工具有断点调试器和日志系统。
使用断点调试器可以让我们在代码中设置断点,以便在执行到该断点时停止程序的运行,这样我们就可以逐步查看代码并调试。
日志系统可以帮助我们记录程序的运行情况,当程序出现问题时,我们可以根据日志来寻找问题所在。
2. 了解常见的错误类型在调试过程中,我们经常会遇到一些常见的错误类型,例如空指针异常、数组越界、类型转换错误等。
了解这些错误的特点和原因,可以帮助我们更快地找到并解决问题。
同时,我们可以利用编程工具提供的静态分析和代码检查功能,来及早发现这些错误。
3. 分而治之当遇到一个大问题时,我们可以考虑将其分解为更小的子问题,然后逐个解决。
这种分而治之的思维方式可以帮助我们更好地理清问题的逻辑关系,提高调试效率。
同时,在解决一个问题时,我们可以通过构建简化的测试场景来缩小问题的范围,这样便于定位和调试。
4. 使用输出语句在调试中,输出语句是一个简单而常用的调试工具。
通过在关键位置插入输出语句,我们可以在程序运行时输出变量的值,以此来判断程序的执行情况。
在调试期间,适当增加输出语句可以帮助我们跟踪程序的执行流程,定位潜在问题。
5. 利用调试日志除了使用输出语句,我们还可以使用调试日志来记录程序的执行信息。
通过在代码中添加日志语句,我们可以实时监控程序的执行流程,并输出关键变量的值。
当程序出现问题时,我们可以通过查看日志来追踪问题的发生原因。
6. 查阅官方文档和开发者论坛当我们遇到一些不熟悉的技术或者库时,官方文档和开发者论坛是我们的好帮手。
官方文档通常提供了详细的使用说明和示例代码,我们可以根据文档来正确调用接口和函数。
程序设计基础的实训报告

一、实训目的本次实训旨在通过实际编写程序,巩固和加深对程序设计基础知识的理解,提高编程能力和解决问题的能力。
通过实训,使学生能够掌握程序设计的基本流程,熟悉常用编程语言和开发工具,具备独立编写程序、调试和优化程序的能力。
二、实训内容1. 编程语言:C语言2. 开发工具:Visual Studio3. 实训任务:(1)编写一个计算两个整数相加的程序;(2)编写一个计算两个整数相减的程序;(3)编写一个计算两个整数相乘的程序;(4)编写一个计算两个整数相除的程序,要求考虑除数为0的情况;(5)编写一个计算阶乘的程序;(6)编写一个冒泡排序的程序,对一组整数进行排序;(7)编写一个插入排序的程序,对一组整数进行排序;(8)编写一个选择排序的程序,对一组整数进行排序。
三、实训过程1. 编写计算两个整数相加的程序```c#include <stdio.h>int main() {int a, b, sum;printf("请输入两个整数:");scanf("%d %d", &a, &b);sum = a + b;printf("两数之和为:%d\n", sum); return 0;}```2. 编写计算两个整数相减的程序```c#include <stdio.h>int main() {int a, b, sub;printf("请输入两个整数:");scanf("%d %d", &a, &b);sub = a - b;printf("两数之差为:%d\n", sub); return 0;}```3. 编写计算两个整数相乘的程序```c#include <stdio.h>int main() {int a, b, mul;printf("请输入两个整数:");scanf("%d %d", &a, &b);mul = a b;printf("两数之积为:%d\n", mul);return 0;}```4. 编写计算两个整数相除的程序,考虑除数为0的情况```c#include <stdio.h>int main() {int a, b, div;printf("请输入两个整数:");scanf("%d %d", &a, &b);if (b == 0) {printf("除数不能为0\n");} else {div = a / b;printf("两数之商为:%d\n", div);}return 0;}```5. 编写计算阶乘的程序```c#include <stdio.h>int factorial(int n) {if (n == 0) {return 1;} else {return n factorial(n - 1);}}int main() {int n;printf("请输入一个整数:");scanf("%d", &n);printf("%d的阶乘为:%d\n", n, factorial(n)); return 0;}```6. 编写冒泡排序的程序```c#include <stdio.h>void bubbleSort(int arr[], int n) {int i, j, temp;for (i = 0; i < n - 1; i++) {for (j = 0; j < n - i - 1; j++) { if (arr[j] > arr[j + 1]) {temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}}int main() {int arr[] = {5, 3, 8, 6, 2};int n = sizeof(arr) / sizeof(arr[0]); int i;bubbleSort(arr, n);printf("排序后的数组:");for (i = 0; i < n; i++) {printf("%d ", arr[i]);}printf("\n");return 0;}```7. 编写插入排序的程序```c#include <stdio.h>void insertionSort(int arr[], int n) {int i, j, key;for (i = 1; i < n; i++) {key = arr[i];j = i - 1;while (j >= 0 && arr[j] > key) { arr[j + 1] = arr[j];j--;}arr[j + 1] = key;}}int main() {int arr[] = {5, 3, 8, 6, 2};int n = sizeof(arr) / sizeof(arr[0]); int i;insertionSort(arr, n);printf("排序后的数组:");for (i = 0; i < n; i++) {printf("%d ", arr[i]);}printf("\n");return 0;}```8. 编写选择排序的程序```c#include <stdio.h>void selectionSort(int arr[], int n) { int i, j, min_idx, temp;for (i = 0; i < n - 1; i++) {min_idx = i;for (j = i + 1; j < n; j++) {if (arr[j] < arr[min_idx]) { min_idx = j;}}temp = arr[min_idx];arr[min_idx] = arr[i];arr[i] = temp;}}int main() {int arr[] = {5, 3, 8, 6, 2};int n = sizeof(arr) / sizeof(arr[0]);int i;selectionSort(arr, n);printf("排序后的数组:");for (i = 0; i < n; i++) {printf("%d ", arr[i]);}printf("\n");return 0;}```四、实训心得通过本次实训,我深刻体会到了程序设计的重要性。
C语言程序设计实训报告

C语言程序设计实训报告一、实训背景介绍本次实训是为了提高学生的C语言编程能力,培养学生解决实际问题的能力,加强学生的动手能力和团队合作能力。
实训内容主要包括C语言的基础知识和常用库函数的使用,以及通过编写实际的小项目来巩固所学知识。
二、实训过程及成果1.实训过程本次实训总共经历了三个阶段:知识学习、编程实践和项目开发。
(1)知识学习阶段:在这个阶段,我们通过教材和课堂上的讲解学习了C语言的基本语法、数据类型、运算符、流程控制语句等基础知识,并学习了常用库函数的使用。
(2)编程实践阶段:在这个阶段,我们通过一系列的编程练习来巩固所学知识。
通过编写简单的程序,我们学会了如何使用C语言的基本语法和常用库函数来解决实际问题。
(3)项目开发阶段:在这个阶段,我们分小组进行项目开发。
每个小组由3-5名学生组成,负责编写一个小型的C语言项目。
项目的内容可以是游戏、学生管理系统、图书管理系统等等。
我们需要在规定的时间内完成项目的需求分析、设计、编码和测试工作,并提交最终的项目成果。
2.实训成果通过本次实训,我掌握了C语言的基本语法和常用库函数的使用,并且通过实际的编程练习和项目开发锻炼了自己的编程能力和解决实际问题的能力。
在项目开发的过程中,我学会了如何进行需求分析和设计,并能够合理地组织代码结构和调试程序。
三、实训心得体会通过这次实训,我深刻地认识到了编程是一项需要耐心和毅力的工作。
在编写代码的过程中,经常会遇到各种各样的问题,需要不断地调试和修改。
同时,编程还需要良好的团队合作能力,只有团队成员之间的密切配合和良好的沟通,才能顺利地完成项目。
通过这次实训,我不仅提高了自己的编程能力,还锻炼了自己的动手能力和团队合作能力。
在以后的学习和工作中,这些经验和能力无疑会给我带来很大的帮助。
我相信,只要持之以恒地继续努力,我一定能够在C语言编程方面有所突破。
四、总结与展望通过这次实训,我对C语言的掌握更加深入,掌握了一些常用的编程技巧和方法。
软件调试实习报告

实习报告:软件调试实习一、实习背景与目的随着信息技术的飞速发展,软件行业已经成为我国经济发展的重要支柱产业。
软件调试作为软件开发过程中的重要环节,对于确保软件质量、提高软件性能具有重要意义。
本次实习旨在通过实际操作,掌握软件调试的基本方法和技术,提高自己在实际项目中解决问题的能力。
二、实习内容与过程1. 实习单位与任务本次实习在一家专业的软件开发公司进行,实习任务是根据提供的测试用例,对一款手机应用软件进行调试,找出并修复其中的bug。
2. 实习过程(1)了解软件背景:在实习开始前,我首先了解了该款手机应用软件的功能、业务流程和应用场景,以便在调试过程中更好地理解软件的运行原理。
(2)学习调试工具:为了能够高效地进行软件调试,我学习了公司常用的调试工具,如Android Studio、Logcat等,并掌握了基本的调试操作。
(3)分析测试用例:在实习过程中,我仔细分析了提供的测试用例,找出其中的关键信息和预期结果,以便在调试过程中进行对比。
(4)进行调试:根据测试用例,我逐个排查软件中的潜在问题,通过断点调试、单步执行等方法,定位到具体的bug所在。
(5)修复bug:在找到bug后,我分析了产生bug的原因,并编写相应的修复代码,经过多次调试和验证,确保bug被成功修复。
(6)撰写调试报告:在实习结束后,我整理了调试过程中的关键步骤和心得体会,撰写了详细的调试报告。
三、实习收获与反思1. 实习收获通过本次实习,我掌握了软件调试的基本方法和技巧,提高了自己在实际项目中解决问题的能力。
同时,我也学会了如何使用调试工具和分析测试用例,为今后的软件开发工作打下了坚实基础。
2. 实习反思在实习过程中,我认识到软件调试不仅需要理论知识,更需要实践经验。
只有通过不断地实践,才能真正掌握调试技巧。
此外,团队协作和沟通能力在软件调试过程中也具有重要意义。
在今后的工作中,我将注重培养自己的团队协作精神和沟通能力,提高自己的综合素质。
软件优化与性能调试实习报告

软件优化与性能调试实习报告一、实习概述在软件开发领域,软件优化与性能调试是一项重要的工作。
优化软件性能可以提升用户体验,增强软件的竞争力。
为了提升自己在这方面的能力,我选择进行软件优化与性能调试的实习。
二、实习目标与挑战1. 实习目标:(1)深入了解软件性能调试的原理和方法;(2)学习分析和定位软件性能问题的工具和技术;(3)掌握常见的性能优化方法和策略;(4)提升编码和调试能力,加强团队合作意识。
2. 实习挑战:在实习期间,我面临了一些挑战,如:(1)学习和掌握大量专业知识,提升技术水平;(2)解决复杂的性能问题,需要不断进行分析和调试;(3)与团队成员合作,提高协作能力。
三、实习内容与方法1. 实习内容:在实习期间,我主要从以下几个方面进行了学习和实践:(1)软件性能调试原理和方法的学习,理解性能问题产生的原因;(2)性能问题分析和定位的工具和技术的学习,如性能分析器、调试工具等;(3)常见的性能问题和优化策略的学习,如代码优化、算法优化等;(4)参与团队的项目开发与调试,解决实际的性能问题。
2. 实习方法:为了达到实习目标,我采取了以下几种方法:(1)阅读相关的技术书籍和文章,了解软件性能调试的基础知识;(2)参加培训课程和研讨会,学习专业的性能分析和调试技术;(3)与导师和团队成员交流,分享经验和解决问题;(4)参与实际项目的开发和调试,锻炼实践能力。
四、实习收获与成果1. 实习收获:(1)对软件性能调试的原理和方法有了更深入的理解;(2)学会使用多种性能分析和调试工具,如性能监控器、代码性能分析工具等;(3)掌握了一些常见的性能优化策略和方法,如并行计算、内存管理优化等;(4)提升了编程和调试能力,熟悉了软件开发流程。
2. 实习成果:在实习期间,我参与了团队的一个项目开发,并负责解决其中的性能问题。
通过对代码的分析和优化,成功提升了程序的性能,并达到了项目要求。
此外,我还参与了团队内的知识分享活动,并与团队成员一起解决了许多性能问题,提高了团队的整体效率。
实验二 简单程序调试

太原工业学院计算机工程系1.判断某一月是什么季节。
(1)编译结果:--------------------Configuration:test1 - Win32Debug--------------------test1.exe - 0 error(s), 0 warning(s)(2)没有错误。
(3)运行结果:2.根据学生成绩判断优良中差。
(1)编译结果:--------------------Configuration: test3- Win32Debug--------------------Compiling...Skipping... (no relevant changes detected)根据学生成绩判断优良中差.cpp根据学生成绩判断优良中差.obj - 0 error(s), 0 warning(s)(2)没有语法错误,但在方法上有问题。
如果成绩在56到59之间,程序也会输出“中”。
修改后解决问题。
(3)运行结果:有问题的程序。
修改后的程序。
3.计算运费。
(1)编译结果:求运费.cppG:\C++\刘翔翔2\test3\求运费.cpp(30) : error C2059: syntax error : ')' Error executing cl.exe.求运费.obj - 1 error(s), 0 warning(s)(2)百分号后面跟了一个括号,致使出现错误。
(3)运行结果:4.计算100以内奇数和。
(1)编译结果:--------------------Configuration: test5 - Win32 Debug--------------------Compiling...Skipping... (no relevant changes detected)计算100以内奇数和.cpp计算100以内奇数和.obj - 0 error(s), 0 warning(s)(2)没有错误。
软件开发岗位实习报告:程序性能调优与优化

软件开发岗位实习报告:程序性能调优与优化一、引言在进行软件开发过程中,提高程序的性能是至关重要的。
无论是在实习还是在实际工作中,程序性能调优都是一个非常重要的任务。
本次报告将重点介绍我在软件开发岗位实习过程中所学到的程序性能调优与优化的相关知识和经验。
二、背景作为一名软件开发岗位的实习生,我参与了一个大型软件项目的开发工作。
该项目是一个线上电商平台,每天处理大量的用户请求和数据交互。
然而,在初始阶段,我们的程序存在一些性能问题,导致系统的响应时间长、占用资源多,给用户带来了很不好的体验。
因此,我们决定对程序进行性能调优与优化,以提高系统的性能。
三、性能测试与分析在开始进行性能调优之前,我们首先需要对程序进行性能测试,并分析测试结果。
通过对程序进行全面的性能测试,我们可以了解当前程序的性能状况,并针对性地进行优化。
我们使用了一系列的性能测试工具来模拟用户请求,如JMeter、ApacheBench等。
在测试过程中,我们记录了各种性能指标,比如系统的响应时间、吞吐量、并发数等。
根据测试结果,我们发现系统的瓶颈主要集中在数据库查询、网络通信和算法复杂度较高的部分。
这些瓶颈导致了系统的性能下降和资源的浪费。
四、性能调优与优化策略基于对性能测试结果的分析,我们制定了以下的性能调优与优化策略:1. 数据库优化针对数据库查询的性能问题,我们采取了如下措施:优化查询语句,包括添加索引、调整查询顺序等;减少不必要的查询和数据传输;对频繁执行的查询进行缓存。
2. 网络通信优化针对网络通信的性能问题,我们采取了如下措施:减少网络请求的次数和数据量;采用异步通信机制,避免阻塞;使用压缩算法减小数据包的大小。
3. 算法优化针对算法复杂度较高的部分,我们优化了算法的实现方式和数据结构的选择,以减少不必要的计算和存储消耗。
同时,我们通过并行计算和分布式部署等技术手段来提高计算效率。
4. 缓存优化为了减少对数据库的频繁访问,我们引入了缓存机制。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实训2 程序规范化与调试能力一、实训目的与要求目的:1、熟悉程序设计规范化原则。
2、掌握程序调试的基本方法。
要求:1)体会规范化程序的优点。
6)掌握观察源程序汇编代码的方法。
2)熟悉程序排版规范化规则。
7)掌握观察和修改寄存器的方法。
3)熟悉程序注释规范化规则。
8)掌握观察和修改存储单元的方法。
4)熟悉程序设计的命名规则。
9)掌握单步调试程序的方法。
5)熟悉程序设计的可维护性原则。
10)掌握全速运行程序的方法。
二、相关知识与技能1、复习C语言课本,了解编程规范化的知识。
2、回顾仿真环境的基本使用方法。
三、实训内容与步骤A.程序规范化能力部分:例2-1:请同学们对比注释尝试解释下面程序ORG 0000HLJMP START//跳转的程序的开始ORG 0030H //程序从0030H开始START:MOV DPTR,#40H//把立即数40H送到DPTRMOV R0 ,#2FH //把2FH送到R0MOV A ,@R0 //把累加器A的内容给寄存器R7MOV R7 , AINC R0TRANS: MOV A , @R0//将以寄存器R0内容为地址的内存单元的内容给累加器AMOVX @DPTR,AINC R0 //寄存器R0的内容加1INC DPTRDJNZ R7 ,TRANS//减1不为0跳转指令,当寄存器R7为0时不跳转SJMP $END从程序的排版规范、注释规范上对上述程序的评价:实训1:排版的规范要求:掌握排版规则操作:在Keil C软件中练习下列左边的源程序,并对照学习右边的规则。
ORG 0000HLJMP STARTORG 0030H用MOV DPTR, #40HMOV R0, #2FH键MOV A, @R0缩MOV R7, A进INC R0并MOV A, @R0对MOVX @DPTR, A齐INC R0INC DPTRDJNZ R7, TRANSSJMP $END规则 1:程序块使用缩进方式,函数和标号使用空格缩进,程序段混合使用TAB 和空格缩进。
缩进的目的是使程序结构清晰,便于阅读和理解。
规则 2:在指令和操作数之间的,使用空格进行间隔,采用这种松散方式编写代码的目的是使代码更加清晰。
规则 3:一行最多写一条语句。
规则 4:变量定义时,保持对齐。
便于阅读和检查内存的使用情况在汇编语言中并不是非常明显的体现排版的规范,但在以后将要用的到C语言编程中,排版规范就体现的非常明显,下面是一段C语言小程序:1、用TAB键缩进,层次关系鲜明,同一层次的对齐,便于阅读理解。
2、一行写一个语句。
main(){int a=4,b=3,c=2,d=1;if(a>b){if(b>c){if(c>d){d=0;c=0;b=0;a=0;}}}}在下面的横线上用汇编或C语言书写一段排版规范的小程序。
实训2:注释的规范要求:掌握注释规则,操作:在Keil C软件中为实训1的程序添加上注释(编译器用“//”或“/*…*/”来区分是否为注释,切勿在程序代码部分输入任何中文状态字符,否则将导致编译时出错,并且这种错误通常很难发现。
)。
规则 1:程序在必要的地方必须有注释,注释要准确、易懂、简洁。
规则 2:注释应与其描述的代码相近,对代码的注释应放在其上方或右方(对单条语句的注释)相邻位置,不可放在下面,如放于上方则需与其上面的代码用空行隔开。
规则3:注释必须要有含金量,含金量很重要。
在下面右边的横线上填上注释:ORG 0000H//跳转到标号为START处运行程序(注释在上方,应与上面代码用空行隔开)LJMP STARTORG 0030H //程序从ROM的0030H单元开始存放(注释在右方)START:MOV DPTR, #40HMOV R0, #2FH /*把2FH存放到寄存器R0中(注释在右方)*/MOV A, @R0MOV R7, A /*把累计器A的内容给寄存器R7(注释在右方)*/INC R0TRANS:MOV A, @R0 // MOVX @DPTR, AINC R0 //INC DPTRDJNZ R7, TRANS /* */SJMP $END //程序结束(注释在右方)对于注释的位置在规则中给出两种,但是在使用中要养成个人习惯,凭个人喜好只使用一种,有助于在编写程序时注释的统一。
注释的含金量:对程序阅读者理解语句起到关键性的作用。
例如如下注释意义不大:MOV DXCE1COUNTER, #00H //将DXCE1COUNTER 赋值为0而如下的注释则给出了额外有用的信息:JNZ PcComm_Err //假如校验出错查看在上面横线上填写的注释,是否含金量较高?实训3:命名规范要求:掌握命名规则,形成个人独特的规范的命名方式操作:在Keil C中练习变量和函数的命名形成缩写的几种技术:1) 去掉所有的不在词头的元音字母。
如screen 写成scrn, primtive 写成prmv。
2) 使用每个单词的头一个或几个字母。
如Channel Activation 写成ChanActiv,ReleaseIndication 写成RelInd。
3) 使用变量名中每个有典型意义的单词。
如Count of Failure 写成FailCnt。
4) 去掉无用的单词后缀 ing, ed 等。
如Paging Request 写成PagReq。
5) 使用标准的或惯用的缩写形式(包括协议文件中出现的缩写形式)。
规则 1:变量命名约定:<前缀> + 主体//注释变量命名要考虑简单、直观、不易混淆。
前缀是可选项,表示变量类型,由于汇编中变量多是单字节变量,所以单字节变量可以不加前缀,对于 bit 和双字节型变量,使用小写的b 和d 作为前缀表示。
主体是必选项,可多个单词(或缩写)合在一起,每个单词首字母大写,其余部分小写。
例如:COM EQU 20H //指令寄存器DAT EQU 21H //数据寄存器CW_Add EQU 0000H //指令口写地址CR_Add EQU 0002H //指令口读地址DW_Add EQU 0001H //数据口写地址DR_Add EQU 0003H //数据口读地址规则 2:函数的命名:单词首字母为大写,其余均为小写。
函数名应以一个动词开头,即函数名应类一个动词断语或祈使句。
例如:Test_Protect, Check_EEPROM, Init_Para规则 3:关键词不可用作变量名、函数名例如:MOV P1 ORL XRL CLR等等。
翻阅书本了解其余的所有关键词。
实训4:可维护性要求:掌握函数的使用、宏定义的使用操作:将以下带子函数调用的程序在Keil C软件中进行断点加单步调试,查看程序调用子函数的过程。
1、宏定义使用:了解宏定义的使用,在汇编语言中宏定义是用EQU或=来实现的,当在一个函数中要使用一个常量或一个端口时我们需要使用宏定义以方便程序的修改和移植。
例如:在程序中需要用到一个常量10,我们在程序首用=来宏定义这个常量:LEN=10ORG 0000H START:MOV A,LEN……MOV P1,LEN……MOV P2,LEN……ENDORG 0000H START:MOV A,10……MOV P1,10……MOV P2,10MOV A,10……END在右边的程序中我们要把常量10改成15时,需要把程序中的每一处10都修改一遍。
在左边的程序中当需要把常量10更改成15时不需要在程序中的每处都修改,只需修改宏定义LEN=15就可以,这样很显眼的体现的宏定义的好处。
端口宏定义用法同常量一样,用关键词EQU来定义,例如:COM EQU P1ORG 0000H START:MOV COM,A……MOV COM,67H……MOV COM,A……ENDORG 0000H START:MOV P1,A……MOV P1,67H……MOV P1,AMOV P1,78H……END同样当需要把端口P1改成P2时,左边的程序只要更改宏定义处即可,而右边的程序需要修改程序所有地方的P1。
2、子程序(函数)使用:规则 1:每个子程序完成单一的功能,不设计多用途面面俱到的子程序。
多功能集于一身的子程序,很可能使子程序的理解、测试、维护等变得困难。
使子程序功能明确化,增加程序可读性,亦可方便维护、测试。
规则 2:每个函数的源程序行数原则上应该少于200 行。
对于消息分流处理函数,完成的功能统一,但由于消息的种类多,可能超过200 行的限制,不属于违反规定。
有重复代码的程序:ORG 0000HSTART:MOV P1,#0FFHMOV P3,#0FFHMOV SP,#30HMOV R7,#08HMOV A,P3 //读按键CPL AMOV P1,AMOV R2,#50L0: MOV R3,#10L1: MOV R4,#125L2: NOPNOPDJNZ R4,L2DJNZ R3,L1DJNZ R2,L0MOV P1,#0FFHMOV R2,#50 L3: MOV R3,#10 L4: MOV R4,#125 L5: NOPNOPDJNZ R4,L5DJNZ R3,L4DJNZ R2,L3LJMP STARTEND把重复代码做成子程序进行调用:ORG 0000HSTART: MOV P1,#0FFHMOV P3,#0FFHMOV SP,#30HMOV R7,#08HMOV A,P3 //读按键CPL AMOV P1,AACALL DELYMOV P1,#0FFHACALL DELYLJMP START DELY:MOV R2,#50L0: MOV R3,#10L1: MOV R4,#125L2: NOPNOPDJNZ R4,L2DJNZ R3,L1DJNZ R2,L0RETENDB.程序调试能力部分:实例5:假定数据串存放在内部RAM从30H开始的连续单元中,数据串长度存放在累加器A中,传送的目的区起址是内部RAM从40H开始的连续单元。
(具体数据在调试中设定)0045H0044H0043H0042H0041H0040H003FH地址地址图2-1源程序清单:行号源程序给出程序注释1 ORG 0000H2 START: MOV DPTR,#40H;3 MOV R0,#30H;4 MOV R7,A;5 TRANS: MOV A,@R0;6 MOVX @DPTR,A;7 INC R0;8 INC DPTR ;9 DJNZ R7,TRANS ;10 SJMP $ ;11 END操作要求:建立工程并输入源程序、对工程进行编译并创建调试目标、进入调试状态。
1、进入调试状态后,系统自动打开反汇编窗口(图2-2),如果看不到,可由【View】→【Disassembly Window】打开,观察源程序的汇编代码,图2-22、 由左侧寄存器窗口,双击累加器A 旁的值至蓝色可编辑状态(图1-13),将累加器A 的值由00H 修改为05H (循环次数5次)。