实验四子程序设计实验

合集下载

C语言实验四

C语言实验四
9.打印数字金字塔。
1
1 2 1
1 2 3 2 1
1 2 3 4 3 2 1
·…·
·…·
·…·
1 2 3…8 9 8…3 2 1
对应答案:实验4程序流程控制
1.参考程序
#define PI 3.14159
main()
{
float r,c,s1,s2,v;
printf("Enter r:");
scanf("%f",&r);
exit(0);
}
do
{
printf("%d",x%10);
i++;
x=x/10;
}while(x!=0);
printf("\ni=%d\n",i);
}
5.参考答案
(1)2 2 3 3 4 4 5 5 5 6 6 7 7 7 7
(2)Chi(注意:回车符“↙”也作为一个字符)
(3)x=13
6.分析
方法一:借助最大公约数。两个数的最小公倍数等于这两个数的积除以其最大公约数,这样,可以先利用辗转相除法求出最大公约数,进而求出最小公倍数。
3.先分析下面程序的功能,然后输入一个3位整数进行调试,看一看分析的结果是否正确。
main()
{
int n,x1,x2,x3,y;
printf("Enter n:");
scanf("%3d",&n);
x1=n/100;
x2=n/10%10;
x3=n/100;
y=x3*100+x2*10+x1;
printf("y=%d",y);

子程序设计实验报告

子程序设计实验报告

实验名称:子程序设计实验日期:2023年X月X日实验地点:XX大学计算机实验室实验目的:1. 理解子程序的概念和作用。

2. 掌握子程序的设计方法和调用方式。

3. 学会使用子程序提高程序的可读性和可维护性。

实验内容:一、实验背景子程序是程序设计中常用的一种结构,它可以将一段具有独立功能的代码封装起来,方便在其他程序中调用。

使用子程序可以提高程序的可读性、可维护性和模块化程度。

二、实验环境1. 操作系统:Windows 102. 编译器:Visual Studio 20193. 编程语言:C++三、实验步骤1. 创建一个新的C++项目,命名为“子程序设计”。

2. 在项目中创建一个头文件“Subroutine.h”,用于声明子程序。

3. 在头文件中声明两个子程序:`Add` 和 `Subtract`。

4. 在头文件中定义一个全局变量 `Result`。

5. 在源文件“Subroutine.cpp”中实现头文件中声明的子程序。

6. 在主函数中调用子程序,并输出结果。

7. 编译并运行程序,观察输出结果。

四、实验代码1. 头文件“Subroutine.h”:```cpp#ifndef SUBROUTINE_H#define SUBROUTINE_Hvoid Add(int a, int b);void Subtract(int a, int b); int Result;#endif // SUBROUTINE_H```2. 源文件“Subroutine.cpp”:```cpp#include "Subroutine.h"void Add(int a, int b) {Result = a + b;}void Subtract(int a, int b) { Result = a - b;}```3. 主函数“main.cpp”:```cpp#include <iostream>#include "Subroutine.h"int main() {int a = 10;int b = 5;Add(a, b);std::cout << "Add: " << Result << std::endl;Subtract(a, b);std::cout << "Subtract: " << Result << std::endl;return 0;}```五、实验结果与分析1. 编译并运行程序,输出结果如下:```Add: 15Subtract: 5```2. 分析:(1)在实验中,我们首先在头文件中声明了两个子程序 `Add` 和 `Subtract`,它们分别用于计算两个整数的和与差。

实验四plc实现的天塔之光彩灯控制

实验四plc实现的天塔之光彩灯控制

实验四 PLC实现的天塔之光彩灯控制实验学时:2 实验类型:设计型一、实验目的进一步熟悉PLC指令系统,掌握PLC的简单编程,用PLC与天塔之光实验模板构成闪光彩灯控制系统。

二、实验内容:天塔之光彩灯示意图及时序图如图2-8所示:1、控制要求彩灯工作方式要求为发射型闪烁,其工作流程如下:L1亮2秒后灭,接着L2、L3、L4、L5亮2秒后灭,接着L6、L7、L8、L9亮2秒后灭,然后L1亮2秒后灭……如此循环。

根据以上要求及控制时序图编制程序,并上机调试运行。

在上述程序的基础上,可对程序和I/O分配进行简单的修改,自行设计其它的闪烁方式.2、I/O分配输入:启动按键-X0 停止按键-X1输出:L1-Y1,L2-Y2,L3-Y3,L4-Y4,L5—Y5,L6-Y6,L7-Y7,L8-Y8,L9-Y9。

3、将设计的程序输入可编程控制器利用FPWIN—GR软件将设计好的梯形图程序输入计算机,并进行PG 转换,然后下传入PLC。

4、调试并运行程序在PLC训练装置上接线并运行、调试程序。

三、实验要求根据控制时序图和I/O分配表设计天塔之光的彩灯控制程序,写出程序清单及注释,画出电气控制图并转为梯形图。

编程时应注意定时器指令的用法。

将梯形图输入计算机并下装到PLC,调试并运行程序。

四、实验装置1、TVT-90A台式可编程控制器学习机实验屏;2、RS422/RS232C适配器;3、UNIT-2天塔之光实验板;4、微型电子计算机;5、连接导线若干。

五、 实验步骤1、 启动计算机并进入“FPWIN —GR ”编程界面,将梯形图输入并进行PG 转换,将程序存入磁盘,以备今后调用。

2、 将24V 电源的“+”极分别接至数字量调试单元X 和Y 的“COM ”端,将电源“—”极接至数字量调试单元X 和Y 的C 端(注:如无C 接线端,则该装置为内部共地连接,无需连接负极线)。

3、 将电源“—”极接至实验模板的“0V ”端,为PLC 的输出点提供电源回路;4、 根据电路设计将数字量调试单元的Y 输出接至实验板上的对应输入端。

程序设计基础实验

程序设计基础实验

实验5 C程序调用中的指针参数
分析程序并改正。 设计一个C程序,用以测试各表达式的运算。 想使指针变量pt1指向a和b中的大者,pt2指 向小者,以下程序能否实现此目的?如不 能实现目标,找出原因并修改之。
实验6 数组在C程序中的使用
编写程序,测试数组的定义方式是否正确。 运行C程序,根据运行结果,可以说明什么?。 操作符&用以求一个变量的地址,这在函数 scanf中已经使用过了。现在要你设计一个 程序,返回一个3 * 5 的二维数组各元素的 地址,并由此说明二维数组中各元素是按什 么顺序存储的(用二维数组和二维数组指 针两种方法实现)。
实验4 C程序函数调用
编写一个程序,给学生出一道加法运算题, 然后判断学生输入的答案对错与否,按下 列要求以循序渐进的方式编程。要求用Add 函数来进行两个整数的加法运算;用Print 函数判断正确与否;用main函数输入两个 相加的数和学生做的结果,然后判断该学 生输入的答案对错与否。
实验4 C程序函数调用
实验6 数组在C程序中的使用
已知一个数组a大小为20个元素,用随机函 数生成20个不同的2位整数填充该数组,再 将该数组元素从小到大排序。现要求任意 输入一个2位整数,要求将该数插入数组中 合适的位置,使得这个数组中的21个元素 仍然按照从小到大的顺序排列,并将数组 按下标顺序输出。
实验6 数组在C程序中的使用
(选做题)通过计算机随机产生10道四则 运算题,两个操作数为1~10之间的随机数, 运算类型为随机产生的加、减、乘、整除 中的任意一种,如果输入答案正确,则显 示“Right!”,否则显示“Not correct!”, 不给机会重做,10道题做完后,按每题10 分统计总得分,然后打印出总分和做错题 数。

程序设计基础实验报告

程序设计基础实验报告

实验一 用C 语言编写简单程序一、实验目的1. 熟悉VC6.0的编程环境,掌握运行C 程序的基本步骤。

2. 了解C 程序的基本框架,模仿例题编写简单的C 语言程序。

3. 正确书写算术表达式、赋值表达式和关系表达式。

4. 掌握基本输入输出函数的使用,正确调用C 语言提供的数学库函数。

5. 掌握简单的单步调试方法。

二、实验环境Windows XP ;Visual C++ 6.0。

三、实验内容1.在屏幕上显示一个句子“What is a computer?”。

2.求华氏温度150F 对应的摄氏温度。

计算公式如下:其中,c 表示摄氏温度;f 表示华氏温度。

3.输入x ,计算下列分段函数的值(保留2位小数),请调用sqrt 函数求平方根,调用pow 函数求幂。

4. 输入一个正整数m (0100)m ≤≤,求100i m i =∑。

四、实验要求1. 将上机验证正确的源代码写到实验报告上。

2.根据自己的真实感受,认真填写实验分析和实验心得以及问题和建议。

3.按时提交实验报告。

553299c f =⨯-⨯21(1)2 x<02()0x x f x ⎧+++⎪=≥一、实验目的1.熟练掌握关系表达式的使用。

2.熟练掌握使用else-if 语句实现多分支结构程序设计。

二、实验环境Windows XP ;Visual C++ 6.0。

三、实验内容1.输入x ,计算并输出下列分段函数sign(x)的值。

2.输入月薪salary ,输出应交的个人所得税tax (保留2位小数)。

按照2011年开始实行的新的个人所得税法,计算公式为:tax = rate*(salary-3500)-deduction 。

当salary≤3500时,rate=0、deduction=0当3500<salary≤5000时,rate=3%、deduction=0当5000<salary≤8000时,rate=10%、deduction=105当8000<salary≤12500时,rate=20%、deduction=555当12500<salary≤38500时,rate=25%、deduction=1005当38500<salary≤58500时,rate=30%、deduction=2775当83500<salary 时,rate=45%、deduction=135053.输入一个正整数n ,再输入n 个学生的百分制成绩,统计各等级成绩的个数。

汇编实验四:查找电话号码

汇编实验四:查找电话号码

一、实验目的学习用汇编语言设计与编写子程序二、实验要求(1) 要求程序建立一个可存放50项的电话号码表,每项包括人名(20个字符)及电话号码(8个字符)两部分;(2) 程序可接收输入人名及相应的电话号码,并把它们加入电话号码表中;(3) 凡有新的输入后,程序应按人名对电话号码表重新排序;(4) 程序可接收需要查找电话号码的人名,并从电话号码表中查出其电话号码,再在屏幕上以如下格式显示出来。

name tel.X X X X X X X X三、实验提示:(1)显示提示符’Input name:’;(2)调用子程序 input_name 接收人名;(3)调用子程序 stor_name 把人名存入电话号码表 tel_tab 中:(4)显示提示符’Input a telephone number:’;(5)调用子程序 inphone 接收电话号码,并把它存入电话号码表tel_tab中;(6)如输入已结束则调用 name_sort 子程序对电话号码表接人名排序;(7)显示提示符’Do you want a telephone number ?(Y/N)’;(8)回答N收退出程序;(9)回答Y则再显示提示符’name ?’;(10)调用子程序 input_name接收人名;(11)调用子程序 name_search 在电话号码表中查找所要的电话号码;(12)调用子程序 printline 按要求格式显示人名及电话号码;(13)重复查号提示符直至用户不要求查号为止。

四、实验程序datarea segmenttel_name label bytemaxnlen db 20namelen db ?namefld db 21 dup(?) ;定义20个字符的用于存放人名的字符串tel_num label bytemaxtlen db 8tellen db ?telfld db 9 dup(?) ;定义8个字符的用于存放电话号码的字符串tel_tab db 50 dup(20 dup(' '), 8 dup(' ')) ;定义可存放50项纪录的电话号码表tel_sav db 28 dup(?), 13, 10, '$'list db 20 dup(' '), 8 dup(' '), 0dh, 0ah, '$' ;定义电话号码表的每个条目string1 db 'Input name:', '$'string2 db 'Input a telphone number:', '$'string3 db 'Do you want a telephone number?(Y/N)', '$'string4 db 'name?', '$'string5 db 'Would you like to input a telephone list?(Y/N)', '$'string6 db 'The Tel_Lab is empty.', '$'string7 db 'There is no list fitting.', '$'string8 db 'name tel. ', '$'string9 db 'Do you want a Tel_Lab?(Y/N)', '$'endadd dw ?swapped db 0tel_count db 0 ;计算电话号码表中的条目数量datarea endsprognam segmentmain proc far ;主程序assume cs: prognam, ds: datarea, es: datareastart:push dssub ax, axpush axmov ax, datareamov ds, axmov es, axcldlea di, tel_tab ;将电话号码表传给目的变址寄存器cho_inp: ;进行选择,是否输入条目mov ah, 09lea dx, string5int 21h ;输出“Would you like to in put a telephone list?(Y/N)”mov ah, 01int 21h ;输入,进行选择mov dl, 4ehcmp al, dlje sort_n ;若输入为N,则跳转至sort_n,进行电话号码表的排序mov dl, 6ehcmp al, dlje sort_n ;若输入为n,则同上mov dl, 59hcmp al, dlje input_n ;若输入为Y,则跳转至input_n,进行电话号码条目的输入mov dl, 79hcmp al, dlje input_n ;若输入为y,则同上mov ah, 02mov dx, 0dhint 21hmov dx, 0ahint 21hjmp cho_inp ;若输入不为Y(y)/N(n),则返回cho_inp,重新进行选择input_n: ;输入人名,并保存mov ah, 02mov dx, 0dhint 21hmov dx, 0ahint 21hmov ah, 09lea dx, string1int 21h ;输出“Input name:”call input_name ;调用子程序input_name接收人名call stor_name ;调用子程序stor_name把人名存入电话号码表tel_tab中input_p: ;输入电话号码,并保存lea dx,string2mov ah, 09int 21h ;输出“Input a telephone number:”call inphone ;调用子程序inphone接收电话号码,并把它存入电话号码表tel_tab 中jmp cho_inp ;跳转至cho_inp,按提示选择是否继续输入条目sort_n: ;对电话号码表进行排序mov ah, 02mov dx, 0dhint 21hmov dx, 0ahint 21hcall name_sort ;调用子程序name_sort,对电话号码表按人名排序print_lab: ;输出整个电话号码表lea dx, string9mov ah, 09int 21h ;输出“Do you want a tel_lab?(Y/N)”mov ah, 01int 21h ;输入,进行选择mov cl, almov ah, 02mov dl, 0dhint 21hmov ah, 02mov dl, 0ahint 21hmov al, clmov dl, 4ehcmp al, dlje search_n ;若输入为N,则跳转至search_n,进行电话号码的查找mov dl, 6ehcmp al, dlje search_n ;若输入为n,则同上mov dl, 59hcmp al, dlje goon_p ;若输入为Y,则跳转至goon_p,继续该部分操作mov dl, 79hcmp al, dlje goon_p ;若输入为y,则同上jmp print_lab ;若输入不为Y(y)/N(n),则跳转至print_lab,重新进行选择goon_p: ;继续输出电话号码表的操作call printall ;调用子程序printall,输出整个电话号码表search_n: ;查找电话号码条目lea dx, string3mov ah, 09int 21h ;输出“Do you want a telephone number?(Y/N)”mov ah, 01int 21h ;输入,进行选择mov cl, almov ah, 02mov dl, 0dhint 21hmov ah, 02mov dl, 0ahint 21hmov al, clmov dl, 4ehcmp al, dlje exit ;若输入为N,则跳转至exit,退出程序mov dl, 6ehcmp al, dlje exit ;若输入为n,则同上mov dl, 59hcmp al, dlje goon_s ;若输入为Y,则跳转至goon_s,继续该部分操作mov dl, 79hcmp al, dlje goon_s ;若输入为y,则同上jmp search_n ;若输入不为Y(y)/N(n),则跳转至search_n,重新进行选择goon_s: ;继续查找操作lea dx, string4mov ah, 09int 21h ;输出“name?”mov ah, 02mov dl, 0dhint 21hmov ah, 02mov dl, 0ahint 21hcall input_name ;调用子程序input_name,接收人名call name_search ;调用子程序name_search,对电话号码表按人名进行查找jmp search_n ;跳转至search_n,继续进行查找exit: ;退出程序retmain endpinput_name proc near ;子程序input_name,用于接受人名mov ah, 0ahlea dx, tel_nameint 21h ;输入人名mov ah, 02hmov dl, 0dhint 21hmov dl, 0ahint 21hmov bh, 0mov bl, namelenmov cx, 20sub cx, bxnamebrk: ;将人名除外所剩下的字符用空格填满mov namefld[bx], 20hinc bxloop namebrkretinput_name endpstor_name proc near ;子程序stor_name,用于把人名存入电话号码表tel_tab中inc tel_count ;将人名存入电话号码之后,电话号码条目数量增1cldlea si, namefldmov cx, 10rep movswretstor_name endpinphone proc near ;子程序inphone,用于接受电话号码,并把它存入电话号码表tel_tab 中mov ah, 0ahlea dx, tel_numint 21h ;输入电话号码mov ah, 02hmov dl, 0dhint 21hmov dl, 0ahint 21hmov bh, 0mov bl, tellenmov cx, 8sub cx, bxtelbrk: ;将电话号码数字除外,所剩下的字符用空格填满mov telfld[bx], 20hinc bxloop telbrkcldlea si, telfldmov cx, 4rep movswretinphone endpname_sort proc near ;子程序name_sort,用于对电话号码表按人名排序sub di, 56mov endadd, dicmp al, 0je emptystart_sort:mov swapped, 0lea si, tel_tabcmp_n:mov cx, 20mov di, siadd di, 28mov ax, dimov bx, sirepe cmpsbjbe no_exchgcall exchange_name ;调用子程序exchang_name,将两个相邻的条目进行对调jmp no_exchgempty: ;若电话号码表为空mov ah, 09lea dx, string6int 21h ;输出“The tel_lab is empty.”jmp exit_sortno_exchg: ;不进行对调mov si, axcmp si, endaddjbe cmp_ncmp swapped, 0jnz start_sortexit_sort:retname_sort endpexchange_name proc near ;子程序exchange_name,用于将电话号码表中的两个相邻的条目进行对调mov cx, 14mov si, bxrep movswmov cx, 14mov di, bxrep movswmov cx, 14lea si, listrep movswmov swapped, 1retexchange_name endpname_search proc near ;子程序name_search,用于按人名在电话号码表中查找所要的电话号码push dimov al, tel_countlea si, tel_tabagain:cmp al, 0je no_listmov cx, 20lea di, namefldmov bx, sirepz cmpsbjb find_nja no_listdec almov ah, 09lea dx, string8int 21h ;输出“name tel. ”mov ah, 02mov dl, 0dhint 21hmov dl, 0ahint 21hcall printline ;调用子程序printline,输出所查找到的条目jmp exit_schfind_n:mov si, bxjmp againno_list: ;若不存在该条目mov ah, 09lea dx, string7int 21h ;输出“There is no list fitting.”mov ah, 02mov dl, 0dhint 21hmov dl, 0ahint 21hexit_sch:pop diretname_search endpprintline proc near ;子程序printline,用于输出所查找到的电话号码条目mov si, bxlea di, listmov cx, 14rep movswmov ah, 09lea dx, listint 21hretprintline endpprintall proc near ;子程序printall,用于输出整个电话号码表push dimov ah, 09lea dx, string8int 21hmov ah, 02mov dl, 0dhint 21hmov dl, 0ahint 21hmov bl, tel_countcmp bl, 0je empty_lablea si, tel_tabnext:lea di, listmov cx, 14rep movswmov ah, 09lea dx, listint 21hdec bljnz nextjmp exit_pallempty_lab:mov ah, 09lea dx, string6int 21hexit_pall:pop diretprintall endpprognam endsend start五、模块说明主函数main:用来显示用户操作提示,调用子模块,使程序完成查找电话号码的过程接收人名函数input_name:输入人名,将此人名保存至缓冲区,并用空格补足保存人名函数stor_name:将人名从缓冲区中取出,保存在电话号码表中的人名区中接收并且保存电话号码函数inphone:输入电话号码,将此电话号码保存至缓冲区,并用空格补足,然后,将电话号码从缓冲区中取出,保存在电话号码表中的电话号码区中电话号码表排序函数name_sort:运用冒泡法,对电话号码表按人名排序对调条目位置函数exchange:将不符合排序规律的条目的位置进行调整查找电话号码函数name_search:输入人名,在电话号码表中依次比较人名进行查找输出电话号码条目函数printline:查找到条目之后,将条目输出输出电话号码表函数printall:将整个电话号码表的所有条目依次输出六、模块层次图七、调试结果。

程序设计基础(Ⅰ)实验目的、内容及实验报告填写要求2015新修改 (1)

程序设计基础(Ⅰ)实验目的、内容及实验报告填写要求2015新修改 (1)

封面:2015-2016学年第一学期,年级是2015级,指导教师:网络工程专业1班写:赵玉艳陈海宝;网络工程2班写:赵玉艳肖刚,其它如实填写。

实验名称:实验一用C语言编写简单程序;实验二分支结构程序设计;实验三循环结构程序设计;实验四函数程序设计;实验五数组程序设计;实验六指针程序设计;实验七结构体程序设计。

课程名称:程序设计基础(Ⅰ)实验时间:分别为9.28, 10.12, 11.9, 11.23, 12.7, 12.21, 1.4实验地点:X405组号,同组人以及成绩:不需要填写实验环境:Windows 7;Visual C++ 6.0。

实验目的实验一用C语言编写简单程序1. 熟悉VC6.0的编程环境,掌握运行C程序的基本步骤。

2. 了解C程序的基本框架,模仿例题编写简单的C语言程序。

3. 正确书写算术表达式、赋值表达式和关系表达式。

4. 掌握基本输入输出函数的使用,正确调用C语言提供的数学库函数。

5. 掌握简单的单步调试方法。

实验二分支结构程序设计1.熟练掌握关系表达式的使用。

2.熟练掌握使用else-if语句实现多分支结构程序设计。

3.熟练掌握关系表达式和逻辑表达式的使用。

4.熟练掌握字符型数据的输入输出。

5.熟练掌握用嵌套的if语句或switch语句实现多分支结构程序设计。

6.熟练掌握switch语句中的break语句的作用。

7.掌握使用断点调试程序的方法。

实验三循环结构程序设计1. 熟练使用for、while和do-while语句实现简单的循环程序。

2. 理解循环条件和循环体,以及for、while和do-while语句的相同及不同之处。

3. 掌握使用Debug菜单调试程序的方法。

4. 掌握break语句的使用。

5. 掌握continue语句的使用。

6. 熟练掌握嵌套循环程序设计。

实验四函数程序设计1. 熟练掌握函数的定义和调用。

2. 熟练掌握使用函数编写程序。

3.熟练掌握函数的实参、形参和返回值的概念及使用。

C语言_实验四、函数程序设计

C语言_实验四、函数程序设计

实验四函数一、实验目的1.掌握函数的定义、函数的说明和调用。

2.掌握函数的参数及其传递方式,函数值的正确返回。

二、实验内容1.[目的]掌握标准库函数的说明和调用方法。

[题目内容]编写一个程序,首先显示一个菜单,然后根据用户的选择,输入数据后,执行相应的操作。

[输入]用户选择和函数自变量值[输出]如下菜单:=======MENU======1.。

sin2.。

cos3.。

pow4.。

sqrt0.。

exit==================[提示]使用标准库函数、多分支选择结构。

2.[目的]掌握用户自定义函数的定义、函数的说明和调用方法。

[题目内容]编写一个用户自定义函数,该函数有一个整型参数,函数的功能是:当这个整型数的值是偶数时,函数的返回值为0,当这个整型数的值是奇数时,返回值为1 。

编写一个程序,从键盘输入任意10个整数,分别调用用户自定义函数来判断这10个整数的奇偶性。

[输入]任意10个整数[输出]这10个整数的奇偶性[提示]在主函数中使用循环结构输入10个整数。

根据子函数的返回值输出相应的判断结果信息。

3.[目的]掌握用户自定义函数的定义、函数的说明和调用方法。

[题目内容]编写一个用户自定义函数,该函数有三个整数参数,函数的功能是:求解这三个整数的最大值,函数的返回值为三个参数的最大值。

编写一个程序,从键盘输入任意5个整数,分别两次调用用户自定义函数来求出这5个整数中的最大值。

[输入]任意5个整数[输出]这5个整数的最大值[提示]先用前三个整数调用函数,求出的最大值作为参数之一,再与另两个整数一起求出最大值即为所求。

4.[目的]掌握用户自定义函数的定义、函数的说明和调用方法。

[题目内容]nA表示从m各元素中抽出n个元素的排列的个数。

它的计算公式为:m)!(!n m m A n m -=。

编写一个用户自定义函数,该函数有一个整数参数,函数的功能是:求解这个整数的阶乘,函数的返回值为这个整数的阶乘。

汇编语言程序设计2

汇编语言程序设计2

目录系统认识 (1)实验一数码转换编程及程序调试 (5)实验二运算类编程实验 (11)实验三分支程序、循环程序设计实验 (16)实验四子程序设计实验 (22)实验五显示程序实验 (26)实验六串行通讯应用实验 (27)附录WMD86 联机软件使用说明 (40)系统认识一、实验目的掌握TD-PITE微机原理与接口技术教学实验系统的操作,熟悉Wmd86联机集成开发调试软件的操作环境。

二、实验设备PC微机一台,TD-PITE实验装置一套。

三、实验内容编写实验程序,将00H~0FH共16个数写入内存3000H开始的连续16个存储单元中。

四、实验步骤1. 运行Wmd86软件,进入Wmd86集成开发环境。

2. 根据程序设计使用语言的不同,通过在“设置”下拉列表来选择需要使用的语言,如图1所示。

语言选择后,下次再启动软件,语言环境保持这次的修改不变。

在这里,我们选择汇编语言。

图13. 语言选择后,点击新建或按Ctrl+N组合键来新建一个文档,如图2所示。

默认文件名为Wmd861。

图24. 编写实验程序,如图3所示,并保存,此时系统会提示输入新的文件名,输完后点击保存。

图3程序:SSTACK SEGMENT STACK ;定义堆栈段DW 32 DUP(?)SSTACK ENDSCODE SEGMENTASSUME CS:CODE, SS:SSTACKSTART: PUSH DSXOR AX, AXMOV DS, AXMOV SI, 3000H ;建立数据起始地址MOV CX, 16 ;循环次数AA1: MOV [SI], ALINC SI ;地址自加1INC AL ;数据自加1LOOP AA1AA2: JMP AA2CODE ENDSEND START5. 点击,编译文件,若程序编译无误,则输出如图4所示的输出信息,然后再点击进行链接,链接无误输出如图5所示的输出信息。

图4图56. 连接PC与实验系统的通讯电缆,打开实验系统电源。

微机原理软件实验报告

微机原理软件实验报告

信息与通信工程学院微机原理软件实验报告班级:姓名:学号:日期:2011年12月实验一DEBUG的使用 (1)一、实验目的 (1)二、实验内容 (1)三、预习思考 (3)四、实验过程 (4)五、实验总结 (9)实验二分支、循环程序设计 (10)一、实验目的 (10)二、实验内容 (10)三、预习思考 (10)四、实验过程 (10)(一)、流程图 (11)(二)、源代码 (11)(三)、实验分析 (11)五、实验总结 (14)实验三代码转换程序设计 (15)一、实验目的 (15)二、实验内容 (15)三、预习思考 (15)四、实验过程 (16)(一)流程图 (16)(二)模块层次图 (16)(三)源代码 (17)(四)实验分析 (21)五、实验总结 (22)实验四子程序设计 (23)一、实验目的 (23)二、实验内容 (23)三、预习思考 (23)四、实验过程 (24)(一)流程图 (24)(二)模块层次图 (25)(三)源代码 (25)(四)实验分析 (34)五、实验总结 (35)实验五中断程序设计 (37)一、实验目的 (37)二、实验内容 (37)三、预习思考 (37)四、实验过程 (38)(一)流程图 (38)(二)源代码 (39)(三)实验分析 (45)五、实验总结 (46)实验一 DEBUG 的使用一、实验目的1.掌握汇编程序的编辑、编译、连接和执行的全过程;2.学习和掌握用DEBUG调试程序的方法。

二、实验内容1.用编辑软件,输入以下汇编语言源程序:DAT SEGMENTA DB 20B DB 15Y 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.通过编译,连接形成可执行文件。

实验四 选择结构程序设计2答案

实验四 选择结构程序设计2答案
[程序一]上机验证运行结果,分析结果
#include "stdio.h"
main()
{ int i;
scanf("%d",&i);
switch(i)
{ case 1:
case 2:putchar('i');
case 3:printf("%d\n",i);break;
#include<stdio.h>
main()
{ float x,y,m=0,n=0;
scanf("%f,%f",&x,&y);
n=(x-2)*(x-2);
m=(y-2)*(y-2);
if((m+n)<=1) printf("(%.3f,%.3f)In the yuan",x,y);
}
printf("\nThe tax=%10.2f\n",tax);
}
[程序三]输入两个字符,若这两个字符的ASCII之差为偶数,则输出它们的后继字符,否则输出它们的前驱字符。
#include<stdio.h>
main()
{ char ch1,ch2,t1,t2;
else printf("前驱字符ch1=%c,ch2=%c",ch1-1,ch2-1);
}
[程序四]输入整数a、b,如果a能被b整除,则输出算式和商,否则输出算式、整数商和余数。
#include<stdio.h>
main()
{ int x,y;
printf("Please input (x,y): ");

语言程序设计四子程序

语言程序设计四子程序

实验参考程序2(变量传递参数):
data segment wordtemp dw 2df4h
data ends
code segment assume cs:code,ds:data
start: mov ax,data mov ds,ax
call ALdisp mov ax,4c00h
int 21h
ALdisp proc
mov ds,ax mov ax,wordtemp call ALdisp
mov ax,4c00h ;设置功能调用 AH=4C 带返回码结束
int 21h
ALdisp proc
push ax
push bx
push cx
push dx
mov bx,4
;实现al内容显示的子程序 ;过程中使用了AX、BX、CX和DX,寄存器内容压栈保护数据。
cmp dl,39h
jbe aldisp1 ; dl内的数小于等于39h转移
add dl,7
;是0Ah~0Fh,还要加上7
aldisp1:mov ah,2
;显示,ah=02表示:将dl中的内容以字符的形式输出到屏幕
int 21h
;系统功能调用,至于是那种功能调用,取决于ah里的内容
pop ax
;弹出栈,此时ax的内容为循环左移4位原数
第3页,共24页。
实验四 子程序及功能调用实验
5.实验步骤: ⑴用文件编辑器编写汇编语言程序(如:记事本),并以asm为后缀命名,
如:2.asm ⑵运行masm编译器进入dos,调入所编写的汇编程序,生成,然后用
连接文件,生成可执行文件2.exe.
⑶用DEBUG调用文件,格式为DEBUG 2.EXE

计算机硬件技术基础实验教程答案(重庆大学)

计算机硬件技术基础实验教程答案(重庆大学)

计算机硬件技术基础实验教程答案 实验一:简单程序设计实验(1)编写一个 32 位无符号数除法的程序,要求将存放在 NUM1 中的 32 位无符号数与存放 在 NUM2 中的 16 位无符号数相除,结果存放在 NUM3 和 NUM4 中。

程序流程图略。

参考源程序:DATASEGMENTNUM1 DD 2A8B7654H NUM2 DW 5ABCH NUM3 DW ? NUM4 DW ?DATAENDSCODESEGMENTASSUME DS:DATA, CS:CODESTART: MOV AX,DATA;数据段寄存器初始化MOV DS,AXMOV AX, WORD PTR NUM1 MOV DX, WORD PTR NUM1+2 DIV NUM2 MOV NUM3,AX MOV NUM4,DX MOV AH,4CH ;正常返回DOS 系统INT 21HCODEENDS END START(2)编写一个拆字程序。

要求将存放在 ARY 单元的 2 位十六进制数 X 1X 2 拆为 X 1 和 X 2 两 部分,并以 0X 1 和 0X 2 的形式分别存入 ARY+1 和 ARY+2 单元中。

程序流程图略。

参考源程序:DATA SEGMENTARY DB 2AH,?,?DATA ENDSCODESEGMENTASSUME DS:DATA, CS:CODESTART: MOV AX,DATAMOV DS,AXMOV SI,OFFSET ARY ;取ARY 的偏移地址 MOV AL,[SI];取16进制数至ALMOV BL,ALAND AL,0F0H ;取16进制数的高四位,即X1SHR AL,4MOV [SI+1],AL ;存0X1MOV AL,BLAND AL,0FH ;取16进制数的低四位,即X2MOV [SI+2],AL ;存0X2MOV AH,4CHINT 21HCODE ENDSEND START实验二:分支程序设计实验(1)编写一个字符比较程序,比较3 个无符号字节数A,B,C 的大小,并根据比较结果对变量K 赋值:如果3 个数不相等,则K=0;如果3 个数中有两个相等,则K=1;如果3 个数都相等,则K=2。

c语言程序设计实验报告

c语言程序设计实验报告

c语⾔程序设计实验报告C语⾔程序设计实验报告实验⼀1.⽤scanf函数输⼊数据,a=3,b=7,x=8.2,y=123.22,c1=‘A’,c2=‘a’,⽤printf 函数进⾏输出。

2.输⼊三⾓形的三边长,求三⾓形⾯积。

3..存款利息计算,有10000元,想存5年,按以下⼏种⽅法存。

(1)⼀次存5年。

(2)先存2年期,到期将本息再存3年。

(3)先存3年期,到期后再存2年。

(4)存1年期,到期将本息再存1年,连存5次。

计算各⾃存法5年后的本息是多少?4.设半径r=1.5,圆柱⾼h=3,求圆周长,圆⾯积,圆柱表⾯积,圆柱体积。

⽤scanf 输⼊数据,输出结果,输⼊要有⽂字说明,取⼩数点后2位数字。

5.给出⼀个不多于5位的正整数,要求:(1)求出它是⼏位数?(2)分别输出每个数字?(3)按逆顺序输出。

如(123输出321)实验⼆1.输⼊两个正整数,求其最⼤公约数和最⼩公倍数。

2.⼀个数如果恰好等于它的因⼦之和,这个数就称为完数,例如6=1+2+3,编程找出1000之内的所有完数,并按下⾯格式输出其因⼦。

6its factors are1,2,33.输⼊⼀⾏字符,分别统计出其中英⽂字母、空格、数字和其他字符的个数。

4.⼀个球从100m⾼度⾃由落下,每次落地后反跳回原⾼度的⼀半,再落下,再反弹。

求它在第10次落地式,共经过多少⽶,第10次反弹多⾼。

实验三1.从键盘输⼊⼀个整数,并将其插⼊到其元素已按升序排列的数组中,要求插⼊操作完成后,数组中的元素仍按升序排列。

2.⼀篇⽂章,共有三⾏⽂字,每⾏有80个字符。

要求分别统计出其中英⽂⼤写字母、⼩写字母、数字、空格以及其他字符的个数。

3.从键盘输⼊10个整数,并求出这10个数的最⼤值及出现次数。

4.编写个⼈所得税计算器。

输⼊个税起征点和⽉收⼊,计算应交税款。

(起征点为2000元)不超过500元的部分税率5%超过500元⾄2000元的部分税率10%超过2000元⾄5000元的部分税率15%超过5000元⾄20000元的部分税率20%超过20000元⾄40000元的部分税率25%超过40000元⾄60000元的部分税率30%超过60000元⾄80000元的部分税率35%超过80000元⾄100000元的部分税率40%超过100000元的部分税率45%。

中南大学linux程序设计环境实验四

中南大学linux程序设计环境实验四

实验4 Linux 高级程序设计1、实验目的(1) 了解Linux操作系统下应用程序开发流程(2) 掌握gun工具链的使用(3) 了解Linux高级编程技巧(例如IPC机制、系统调用等)2、实验内容(1) 编写一个简单的C语言程序,编写Makefile文件。

了解编译过程,并用gdb进行调试。

(2) 编写一段程序,适用系统调用fork( )创建两个新的子进程,此程序运行使系统中有三个活动进程存在。

控制让一个进程在屏幕上显示一个字符:父进程显示“a”,子进程分别显示字符“b”和字符“c”。

试观察屏幕上的显示结果,并对输出结果进行分析。

在实验报告中写出说明和分析。

(3) 编写一段程序实现父进程创建一个子进程,通过系统调用使子进程和父进程执行不同的任务。

(提示:利用system(), exec系列函数)试思考,怎样实现进程间的同步?(4) 编写一段C程序完成:父进程创建一个子进程,父进程对子进程设置一个报警信号,然后父进程等待子进程的结束,如果此时报警信号先到,就终止子进程。

3、实验要求(1) 写出源程序,并编译运行(2) 详细记录程序调试及运行结果4、实验思路及过程(1)makefile文件:main.c文件:1.c文件:2.c文件:-o写成-c,函数库导入不正确:(2)出现acb的结果:p1=fork()会创建一个新的进程,父进程遇到p2=fork()创建又一个新的进程,此时,父进程运行完毕输出a,p2=fork()创建的子进程运行完毕输出c,最后p1=fork()创建的子进程运行完毕输出b;出现abc的结果:p1=fork()会创建一个新的进程,父进程遇到p2=fork()创建又一个新的进程,此时,父进程运行完毕输出a,p1=fork()创建的子进程运行完毕输出b,最后p2=fork()创建的子进程运行完毕输出c;出现bca的结果:p1=fork()会创建一个新的子进程,运行完毕输出b,父进程遇到p2=fork()创建又一个新的子进程,运行完毕输出c,最后父进程运行完毕输出a;出现bac的结果:p1=fork()会创建一个新的子进程,运行完毕输出b,父进程遇到p2=fork()创建又一个新的子进程,父进程运行完毕输出a,最后子进程运行完毕输出c;(3)system是用shell来调用程序=fork+exec+waitpid,而exec是直接让你的程序代替原来的程序运行。

实验四子程序设计

实验四子程序设计

实验四子程序设计实验目的:通过编写子程序来实现函数的封装和代码的重用。

实验原理:子程序是一段具有特定功能的代码,可以在程序中多次调用。

在实际的软件开发过程中,为了提高代码的可读性、可维护性和代码的重用,我们经常使用子程序。

子程序的定义一般包括以下几个要素:1.子程序名称:子程序的名称用于被调用和调用。

子程序名称一般要具有描述性,能够清晰地表达其功能和作用。

2.输入参数:子程序可以接收输入参数,用于在子程序内部进行计算和处理。

输入参数可以是实际的数值,也可以是变量、数组等。

3.输出参数:子程序可以具有输出参数,用于将计算结果或者处理结果返回到主程序中。

输出参数可以是实际的数值,也能是变量、数组等。

4.子程序体:子程序体是子程序内部的代码块,用于实现具体的功能。

子程序体可以包含多条语句和控制结构,以完成复杂的操作和计算。

实验步骤:本次实验我们将编写一个求取三角形面积的子程序,实现代码的封装和重用。

1.编写主程序:首先,我们先编写一个主程序,用来调用子程序并输出计算结果。

```pythondef main(:a = float(input("请输入三角形的底边长: "))h = float(input("请输入三角形的高: "))area = triangle_area(a, h)print("三角形的面积为: ", area)def triangle_area(base, height):area = (base * height) / 2return areaif __name__ == "__main__":main```2. 编写子程序: 根据主程序中调用的子程序名称,我们可以编写一个名为`triangle_area`的子程序来计算三角形的面积。

```pythondef triangle_area(base, height):area = (base * height) / 2return area```3.运行程序:运行主程序,输入三角形的底边长和高,程序将输出计算结果。

实验四子程序设计

实验四子程序设计

实验(四) 子程序设计
2、上机题目:键盘输入 内容:用子程序设计的方法,要求从键盘输入2位 16进制数,转化为10进制数并在CRT上显示。 要求:熟练掌握子程序设计方法,画子程序、主程 序流程图
Decbin子程序
现场保护
Al<0a? n al ←al+7 al ←al+30
y
si←0
ch←4h cl←4h ax ←buf ax← ax rol cl buf ←ax
取 al 低4bit
Mas[si]←al
crt 显示
call decbin end
si 复现场
ret
实验(四) 子程序设计
1、上机题目:代码转换 内容:用子程序设计的方法,分别把BUF字单元中 的四位十六进制数转换为ASCII代码存入MAS开始 的单元中,并在crt上显示相应字符。 BUF DW X MAS DB 4 DUP(?) 要求:熟练掌握子程序设计方法
主程序
开始 数据段: 变量定义 段加载

汇编语言程序设计实验报告

汇编语言程序设计实验报告

实验报告实验名称汇编语言程序设计||专业班级:信息安全学号:姓名:实验一汇编语言上机过程和Debug常用调试命令一.实验目的:学习程序设计的基本方法和技能,熟练掌握用汇编语言设计、编写、调试和运行程序的方法。

二.实验题目:熟悉与实验有关的系统软件(如编辑程序、汇编程序、连接程序和调试程序等)的使用方法。

在调试过程中,学习及掌握debug程序的各种操作命令。

三.问题描述:试编写一程序:比较两个字符串string1和string2所含的字符是否相同,若相同则显示‘match’; 否则,显示‘no match’。

四.方法说明:a) 使用ws、tc或EDIT编辑程序来建立源文件,然后存盘,使系统返回DOS。

b) 用汇编程序masm(或asm)对源文件汇编产生目标文件obj如:汇编指示出错则需重新调用编辑程序修改错误,直至汇编通过为止。

c) 用连接程序link 产生执行文件EXE.d) 执行程序,可直接从DOS执行程序。

e) 使用debug程序调试程序的方法。

五.实验步骤:1.调用字处理程序EDIT 建立以sample.asm文件datarea segmentstring1 db ‘move the cursor backward.’string2 db ‘move the cursor backward.’mess1 db ‘Match..’,13,10,’$’mess2 db ‘No match!..’,13,10,’$’datarea endsprognam segmentmain proc farassume cs:prognam,ds:datarea,es:datarea start:push dssub ax,axpush axmov ax,datareamov ds,axmov es,axlea si,string1lea di,string2cldmov cx,25repz cmpsbjz matchlea dx,mess2jmp short dispmatch:lea dx, mess1disp:mov ah,09int 21hretmain endpprognam endsend start2.对源文件汇编产生目标文件obj D:\masm 文件名。

《C语言程序设计实验》指导书(实验1~6)

《C语言程序设计实验》指导书(实验1~6)

《C语言程序设计实验》指导书(简明版)**大学软件学院**年**月实验一顺序结构程序设计(2学时)一、实验目的1、熟悉C编译环境、简单C程序结构及书写方式、以及C程序的编辑、编译、连接、运行、调试的步骤;2、掌握C语言的基本数据类型及其输入输出格式,以及输入输出函数的使用方法;3、掌握C语言的算术运算符(特别是自增、自减运算符)、赋值运算符、关系运算符、逻辑运算符、条件运算符、逗号运算符的使用;4、掌握C语言顺序结构程序的执行流程、设计方法,能够根据实际问题灵活使用顺序结构,画出程序的算法流程图,设计出逻辑合理、思路清晰、结果正确的顺序结构程序。

二、实验内容及要求1、实验内容包括8道题目,分为基本内容和选做内容两部分。

要求:(1)基本内容中的实验题目是必须要完成的,选做内容中的实验题目可以根据自己的情况选做或全做(越多越好,适当加分);(2)在实验之前编写出基本内容、选做内容中的所有程序,实验前检查(视未完成情况适当扣分);(3)对于设计型题目,要求画出程序流程图(传统流程图和N-S图);(4)在上机实验过程中,注意总结和体会上机步骤(编辑、编译、连接、运行、调试、结果分析),注意培养观察、分析和排除编译错误、连接错误和程序逻辑错误的初步能力;(5)上机结束后,应按要求认真书写实验报告(格式见附件)。

2、基本内容(1)[验证型]编辑下列程序,然后进行编译、连接和运行,观察结果,并简要总结简单C程序的结构、书写格式以及上机过程;#include <stdio.h>int main( ){printf("Hello, world!\n");return 0;}(2)[验证型]通过运行下列程序,分析各种格式符的使用方法。

#include <stdio.h>int main( ){int a = 9, b = 2;float x = 32.8459, y = -792.451;char d = 'R';long n = 5461237;unsigned u = 65535;printf("%d,%d\n", a, b);printf("%3d,%3d\n", a, b);printf("%f,%f\n", x, y);printf("%-10f,%-10f\n", x, y);printf("%8.2f,%8.2\n", x, y);printf("%.4f,%.4f\n", x, y);printf("%3f,%3f\n", x, y);printf("%e,%10.2e\n", x, y);putchar(d);putchar('\n');printf("%c,%d,%o,%x\n", d, d, d, d);printf("%ld,%lo,%x\n", n, n, n);printf("%u,%o,%x,%d\n", u, u, u, u);return 0;}(3)[验证型]编辑下列程序,进行编译、连接和运行。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4用P1,P2,P3口的状态来表示LED指示灯的工作状态
三、资源分配
实验一:
1.起始地址为0090H
2.向片外数据区7000H、A000H开始的单元赋值。
3.将7010H-7073H单元内容传送至B000H开始的存储区中。
实验二:
1.起始地址1000H
2.统计片外数据区从2000H开始的256个符号数中偶数的个数,低位存入R3,高位存入R2。
答:
MOV DPTR,#2000H
MOV R1,#100H
MAIN: LCALL SEND
DJNZ R1,MAIN
ENDED: SJMP $
SEND: MOVX A,@DPTR
JZ ENDED
PUSH DPH
PUSH DPL
PUSH ACC
MOV A,DPL
ADD A,#0F4H
MOV DPL,A
MOV A,DPH
ADDC A,#1
MOV DPH,A
POP ACC
MOVX @DPTR,A
POP DPL
POP DPH
INC DPTR
RET
END
2.若要将偶数从小到大排序并置于从2000H开始的前端,其余符号数按原来顺序置于偶数后面。应如何编写程序?
F1 EQU PSW.1
COUNTEVE:
MOV R2,#0
MOV R1,#0
2.篡改检测区内容
3.检测结果:
(1)坏区数目R2
(2)坏区地址
(3)LED报警状态
七、心得与体会
这次实验通过传送数据的具体程序实验,进一步加深了对数据传送的基本步骤和思路的理解,在选作实验中也进一步对I/O的数据处理有了了解,在实验设计中对子程序和重复步骤的运用是相当重要的,对数据区的数据移动和传送也是要重点了解的。
MOVX @DPTR,A
INC DPTR
LESS: MOV A,R3
JZ CHECKR4
DEC R3
SJMP LOOP2
CHECKR4:MOV A,R4
JZ OUTLOOP2
DEC R4
SJMP LOOP2
OUTLOOP2:JNB F1,OUT
MOV A,R1
JZ CHECKR2
DEC R1
SJMP LOOP1
CHECKR2:MOV A,R2
JZ OUT
DEC R2
SJMP LOOP1
OUT: SJMP $
END
经测试,程序可以将偶数“挤到”最前面,同时保证非偶数顺序不变。然后可以将偶数排序(256个偶数也可以)。实现了所需功能。
3.若要求偶数的算术平均值,应如何编写程序?
答:(本题中除法是用循环减法实现的,因为多位数除法好像比较困难。)
;Description:数据块传送
;Resource used: R0:计数器
; DPTR:片外数据指针
; R2, R3源地址
; R4, R5目的地址
; R6, R7传送字节数
ORG0090H
START:;初始化7000H开始的片外RAM空间
MOV R0, #00H;设循环计数器
MOV DPTR, #7000H ;设数据指针
SJMP LP;源地址加1
DMVE1:INCR3
CJNER5, #0FFH, DMVE2
INCR4;目的地址加1
DMVE2:INCR5
CJNER7, #00H, DMVE3
CJNER6, #00H, DMVE4;数据传送结束?
SJMP$;原地踏步
DMVE3:DECR7;字节数减1
SJMP DMVE
DMVE4:DEC R7
MOV R5,#0 ;计数个数
MOV DPTR,#2000H
COUNT1: MOVX A,@DPTR
RRC A
JC NOTEVEN
LJMP CHANGE
CHANGE1:MOV A,R1
ADD A,#1
MOV R1,A
MOV A,R2
ADDC A,#0
MOV R2,A
NOTEVEN:INC DPTR
DJNZ R5,COUNT1
MOVR6, #01H
MOVR7, #00H
MOVR4, #0b0H
MOVR5, #00H
;数据串传送
DMVE:MOVSP, #70H;设栈底
MOVDPL, R3
MOVDPH, R2
MOVXA, @DPTR;取一个字节
MOVDPL, R5
MOVDPH, R4
MOVX @DPTR, A;传送一个字节
CJNER3, #73H, DMVE1
;以上程序实现对偶数计数并把它们
;"挤"到最前面
;
;以下程序是上次写得排序程序稍加修改
STEP2: MOV A,R2
JZ LOOP1
MOV R2,#0FH
MOV R1,#0FH
LOOP1: CLR F1
MOV A,R2
MOV R4,A
MOV A,R1
MOV R3,A
MOV DPTR,#2000H
LOOP2: MOVX A,@DPTR
CLR C
SUBB A,#1
MOV DPL,A
MOV A,DPH
SUBB A,#0
MOV DPH,A
MOVX A,@DPTR
INC DPTR
MOVX @DPTR,A
MOV A,DPL
CLR C
SUBB A,#1
MOV DPL,A
MOV A,DPH
SUBB A,#0
MOV DPH,A
SJMP NUOD1
CHECK:MOVX A,@DPTR;将数据送入A累加器中
CJNE A,#TEST,WARN;与指定内容比较,不相同则出错
SJMP GO
GO : INC DPTR
INC R0
CJNE R0, #00H, CHECK;判断循环是否结束
SJMP LP
WARN :MOV P2,#0FFH;LED显示出错状态
3.(选作题)设计子程序,实现对片外数据存储器的测试。具体要求如下:
1)测试方法自选
2)数据存储区首地址、长度可变。
3)可统计坏单元数目,并记录坏单元地址。
4)利用LED指示灯,提示测试过程和结果状态。
二、设计思路
实验一:
1.用MOVX@DPTR, A指令,向片外数据区7000H到70FFH单元内容送值。
MOV P3,#00H
START:;初始化7000H开始的片外RAM空间
MOV P0,#0FH;LED显示开始送数
MOV R0, #00H;设循环计数器
MOV R1, #10H;坏地址
MOV R2, #00H;坏地址个数
MOV DPTR,#7000H;设数据指针
ORGINAL DATA 7000H;定义数据存放初始地址
实验三:(选作题)
1.起始地址2000H
2.向7000H开始的片外RAM空间送监测数
3.错误数目放在R2中
4.错误地址放在片内IDATE中
四、流程图
2.
Y
N
Y
N
N
Y
3.
Y
N
N
Y
N
Y
五、源代码(含文件头说明、资源使用说明、语句行注释)
试验一代码:
;File name: dmove.asm
;Date:
;Designed by:
在这次程序设计中,尤其要注意的数据的起始地址等方面,另外,在循环和判断偶数实验中也要特别注意一些细节问题,在附加实验中,坏点的比较是比较需要注意处理的部分。
思考题
1.从2000H单元开始的外部RAM中存有100个数,要求把它传送到自2500H单元开始的存贮区中去,但在传递过程中要检查数的值,遇到第一个零就停止传送。应如何编写程序?
TEST DATA 00H;定义判定值TEST的大小
LOOP1:
MOVA, #TEST;
MOVX@DPTR, A;传送到片外RAM
INC DPTR;修改数据指针
INC R0;修改循环计数器
CJNER0, #00H, LOOP1;判断是否结束
MOV P0,#0FFH;LED显示检错状态
MOV DPTR,#ORGINAL;返回数据区首地址
COUNT1 :INC R3;低位加一
INC DPTR
SJMP GO
GO:INC R1
CJNE R1,#00H,ALLER;判定循环是否结束
SJMP LP
LP :SJMP LP
END
实验三代码:
ORG2000H
MOV P0,#00H;显示送数与检测功能
MOV P1,#00H;显示程序执行结束
MOV P2,#00H;显示警告功能
实验四:子程序设计实验
专业班级
姓名:
学号:
联系方式
一、任务要求:
1.调试程序dmove.asm,观察片外数据区7000H、A000H开始的单元内容变化规律。
修改程序将7010H-7073H单元内容传送至B000H开始的存储区中。
2.设计一个子程序,统计片外数据区从2000H开始的256个符号数中偶数的个数,低位存入R3,高位存入R2。
2.用同样的指令,将7010H-7073H单元内容传送至B000H开始的存储区中。
实验二:
1.将要检验的地址区域内容逐个取出,进行奇偶判断
2.是偶数则统计加一,之后对下一位进行判断
3.不是则对下一位进行判断
4.结束后返回
实验三:
1.先将监测区域内赋值
2.赋值完成后通过改变区域内的内容,再进行检测
3.若两次的内容不相同,则统计数加一并记录地址
相关文档
最新文档