河北工业大学汇编语言程序设计实验
河北工业大学 单片机实验 第四次试验 实验八 查表程序设计
实验八查表程序设计一、实验目的1.进一步熟悉MCS-51指令系统和汇编语言程序设计。
2.学会用MOVC指令编写查表程序。
二、实验内容1.设计并调试一个查平方表的程序,其功能为应用查表指令MOVC A,@A+PC,求累加器A中数的平方值,结果平方值送A。
要求待查的(A)≤15。
2.设计并调试一个根据电压值查与其对应的温度值的查表程序,其功能为应用查表指令MOVC A,@A+DPTR,求(A)中电压值对应的温度值,将温度值送R2R3(温度值为二字节的压缩BCD码),电压值的范围为(A)≤0FFH。
实验程序参考框图如3-8所示。
三、实验步骤1.键入程序和预定表后;2.通过修改自变量参数启动并调试程序,直至正确为止。
3.边调试边体会用PC或DPTR作指针查表的区别。
四、实验报告要求根据实验内容和程序参考流程,编出所需查表程序,列出实验程序清单。
五、思考题1.当表的长度〉255个字节时应选哪一条指令查表?答:当表的长度〉255个字节时应选“MOVC A,@A+DPTR”指令查表,并且需要对DPH、DPL进行运算处理,求出表目地址,再用“MOVC A,@A+DPTR”指令查表。
2.用PC指针查表编程时应注意什么?答:应先用传送指令把所查数据的项数送入累加器A,并用“ADD A,#data”对A进行修正data值等于查表指令和数据表格之间的字节数,然后用“MOVC A,@A+PC”查表,同时用PC指针查表的表的范围不能大于255个字节。
六、参考程序清单1.求平方值查表程序:ORG 0000HADD A,#02HMOVC A,@A+PCSJMP $DB 0,1,4,9,16,25 36,49DB 64,81,100,121,144,169,196,225END本程序实现通过查表得A累加器中数的平方值并将结果送A,根据A中数值采用基址加变址方法找到所查数的地址得所对应的平方数。
例:当(A)=5时,执行过程如下:D:0XE0(A)PC指针 ORG 0000H 05HC:0X0000 ADD A,#02H 07HC:0X0002 MOVC A,@A+PC 19H ;A+PC=A(10),查表的19H(25) C:0X0003 SJMP $C:0X0005 DB 0,1,4,9,16,25 36,49DB 64,81,100,121,144,169,196,225END2.测量温度查表程序:双字节查表程序刘程序如图3-8所示:双字节查表参考程序清单:ORG 0000HMOV DPTR,#TABMOV R0,AADD A,R0MOV F0,CADD A,DPLMOV DPL,ACLR AADDC A,DPHMOV C,F0ADDC A,#0MOV DPH,ACLR AMOVC A,@A+DPTR ;查第一个字节MOV R2,ACLR AINC DPTRMOVC A,@A+DPTR ;查第二个字节MOV R3,ASJMP $TAB:DW 0100H,0110H,0120H,0130H,0140H,0150H,0160H ;温度表END本程序实现根据A中电压查表中与之对应的温度值,表中温度均为2字节故(A)*2+DPTR(表首地址)即可查的对应温度值。
-《汇编语言程序设计》实验教学大纲
《汇编语言程序设计》实验教学大纲
二、实验的地位、作用和目的
汇编语言程序设计是一门实践性很强的课程,只有通过上机实习,才能深刻理解各类指令的功能,了解CPU是如何通过执行一条条指令完成某个特定功能.通过实习不仅锻炼了学生的动手能力,而且,激发了学生对本课的兴趣,变被动学为主动学,从而使学习更轻松,最终掌握汇编语言程序设计的思想和方法。
三、实验方式
1、验证性实验是指给定实验目的要求、实验条件和给出实验电路或程序,由学生独立完成
的实验;
2、设计性实验是指给定实验目的要求和实验条件,由学生自行设计实验方案并加以实现的
实验;
3、综合性实验是指实验内容涉及本课程的综合知识或与本课程相关课程知识的实验;
4、研究性实验是指参与教师的科研课题的实验。
四、实验内容、学时分配及基本要求
[实验题目一] 数码转换程序设计
[实验题目二] 分支程序设计
[实验题目三] 循环程序设计
[实验题目四] 字符串操作程序设计
[实验题目五] BCD码与二进制数之间转换程序设计
[实验题目六] 输入输出程序设计
[实验题目七] 循环嵌套程序设计
[实验题目八] 结构的定义及应用
[实验题目九] 计算机模拟钢琴程序设计
[实验题目十] 宏功能的应用
注:实验5、6任选一个,实验9、10任选一个
五、实验考核
平时成绩=(∑(操作成绩×60%+报告成绩×40%))/所开的实验个数
六、本大纲主笔人:陈华审核人:薛建生批准人:牛斌。
河北工业大学语义分析实验报告
实验三语义分析程序实现一、实验设计在实现词法、语法分析程序的基础上,编写相应的语义子程序,进行语义处理,加深对语法制导翻译原理的理解,进一步掌握将语法分析所识别的语法范畴变换为某种中间代码(四元式)的语义分析方法。
基本实验题目:对文法G2[<算术表达式>]中的产生式添加语义处理子程序,完成运算对象是简单变量(标识符)和无符号数的四则运算的计值处理,将输入的四则运算转换为四元式形式的中间代码。
语法制导翻译模式是在语法分析的基础上,增加语义操作来实现的,实际上是对前后文无关文法的一种扩展。
一般而言,首先需要根据进行的语义分析工作,完成对给定文法的必要拆分和语义动作的编写,从而为每一个产生式都配备相应的语义子程序,以便在进行语法分析的同时进行语义解释。
即在语法分析过程中,每当用一个产生式进行推导或归约时,语法分析程序除执行相应的语法分析动作之外,还要调用相应的语义子程序,以便完成生成中间代码、查填有关表格、检查并报告源程序中的语义错误等工作。
每个语义子程序需指明相应产生式中各个符号的具体含义,并规定使用该产生式进行分析时所应采取的语义动作。
这样,语法制导翻译程序在对源程序从左到右进行的一遍扫描中,既完成语法分析任务,又完成语义分析和中间代码生成方面的工作。
本实验要求从编译器的整体设计出发,重点通过对实验二中语法分析程序的扩展,完成一个编译器前端程序的编写、调试和测试工作,形成一个将源程序翻译为中间代码序列的编译系统。
二、程序代码在词法分析和语法分析的基础上,完成了语义的分析,同样采用了头文件的形式,在VC++6.0中运行#include<stdio.h>#include<ctype.h>#include<stdlib.h>#include<string.h>#include<math.h>#include"cifa.h"#include"fenxibiao.h"# define PL 15 //+# define MI 16 //-# define MU 17# define DI 18#define acc 100#define MAXState 20#define NUMBER 9//表达式的个数#define MAXTEMP 10//最多临时变量的个数int State[MAXState];//状态栈int i=0;int CURRENTSTATE=0;//标识当前状态int LENGTH[NUMBER]={1,3,3,1,3,3,1,3,1};//表达式右边的长度int length;int index;//索引int Yes=0;//判断是否结束int tag=0;//判断是否需要调用词法程序//extern char * cifa();double e1,t4,f7;//整形char e12[20],t42[20],f72[20];//字符型int TEMP[MAXTEMP];int temp=0;int biaoshifu=0;FILE * fp;void REPORT_ERROR(){Yes=1;long f1=ftell(fp);char ch=fgetc(fp);fseek(fp,-1,1);printf("语法错误,第%d个字符'%C'处\n",f1,ch); }void Accept(){Yes=1;//printf("语法分析成功\n");}int INDEX(char a)//获取当前字符串对应的索引{int i;switch (a){case 'E':i=8;return(i);break;case 'T':i=9;return(i);break;case 'F':i=10;return(i);break;default: REPORT_ERROR();return(0);break;}}void Gen(int a,double i1,double i2,int t)//输出四元式{switch(a){case PL:printf("(+,%g,%g,%d)\n",i1,i2,t);break;case MI:printf("(-,%g,%g,%d)\n",i1,i2,t);break;case MU:printf("(*,%g,%g,%d)\n",i1,i2,t);break;case DI:printf("(/,%g,%g,%d)\n",i1,i2,t);break;default:break;}}void yuyi(int n)//语义子程序{switch(n){case 1:{temp++;//产生临时变量,Gen(PL,e1,t4,temp);e1=temp;break;}case 2:{temp++;//产生临时变量,TEMP[temp] Gen(MI,e1,t4,temp);e1=temp;break;}case 3:{e1=t4;break;}case 4:{temp++;Gen(MU,t4,f7,temp); t4=temp;break;}case 5:{temp++;Gen(DI,t4,f7,temp); t4=temp;break;}case 6:{t4=f7;break;}case 7:{f7=e1;break;}case 8:{f7=FCON;break;}default :printf("error\n");break;}}void Gen2(int a,char *i1,char *i2,int t)//输出四元式{switch(a){case PL:printf("(+,%s,%s,%d)\n",&i1,&i2,t);break;case MI:printf("(-,%s,%s,%d)\n",&i1,&i2,t);break;case MU:printf("(*,%s,%s,%d)\n",&i1,&i2,t);break;case DI:printf("(/,%s,%s,%d)\n",&i1,&i2,t); break;default:break;}}void fuzhi(char *a,char *b)//将数组b赋值给数组a {}void yuyi2(int n)//语义子程序{switch(n){case 1:{temp++;//产生临时变量Gen2(PL,e12,t42,temp);e12[0]=temp;break;}case 2:{temp++;//产生临时变量,TEMP[temp] Gen2(MI,e12,t42,temp);e12[0]=temp;break;}case 3:{//e12=t42;strcpy(e12,t42);break;}case 4:{temp++;Gen2(MU,t42,f72,temp); t42[0]=temp;break;}case 5:{temp++;Gen2(DI,t42,f72,temp); t42[0]=temp;break;}case 6:{//t42=f72;strcpy(t42,f72); break;}case 7:{//f72=e12;strcpy(f72,e12);break;}case 8:{//f72=TOKEN[0];strcpy(f72,TOKEN);break;}default :printf("error\n"); break;}}void INPUT(int a){index=a;int index2=0;if(Table[CURRENTSTATE][index]!=acc) {if (Table[CURRENTSTATE][index]==0)//报错{REPORT_ERROR();}elseif (Table[CURRENTSTATE][index]<20)//移近{ i++;State[i]=Table[CURRENTSTATE][index]; CURRENTSTATE=State[i];}else //规约{tag=1;length=LENGTH[Table[CURRENTSTATE][index]-20]; i=i-length;//指针回退switch(Table[CURRENTSTATE][index]-20){case 1:case 2:case 3:index2=8;break;case 4:case 5:case 6:index2=9;break;case 7:case 8:index2=10;break;default :REPORT_ERROR();break;}if (biaoshifu!=1)//不是标识符{yuyi(Table[CURRENTSTATE][index]-20);//规约调用语义子程序}else{yuyi2(Table[CURRENTSTATE][index]-20);//规约调用语义子程序}CURRENTSTATE=State[i];i++;State[i]=Table[CURRENTSTATE][index2];CURRENTSTATE=State[i];}}else{Accept();CURRENTSTATE=0;}}void main(){int res;State[0]=0;if((fp=fopen("b.txt","r"))==NULL) {printf("file open error!\n");exit(0);}else{res=cifa(fp);if(start==1)//文件以begin开始{do{res=cifa(fp);if(end==0){fseek(fp,-1,1);//文件指针回退一个*/。
汇编语言程序设计实验指导书
重庆师范大学涉外商贸学院计算机各专业实验用书汇编语言程序设计实验指导书(第一版)张开成编前言为适应教学内容由简到繁、由易到难、由浅入深的教学特点,我们编写了这本简易实验指导书,用以指导实验教学。
该指导书分两部分,第一部分指出实验的实验目的、实验内容、实验准备、实验要求、共提出十五个实验,需三十个学时完成。
第二部分为十五个实验的全部程序,仅供学生参考。
该实验指导书由数计学院计算机教研室张开成同志编写。
2010年2月第一部分提出各实验的实验内容、实验目的、实验要求和学时分配实验一:汇编语言基本操作实验(2学时)一、实验目的:明确QE、MASM、LINK三个系统软件的作用。
掌握汇编语言程序的编辑、汇编、连接过程。
二、实验内容:1、编写一个程序:用十进制输出一个按键的AS CⅡ值。
2、从键盘上读入两个一位数(必须保证按下数字键),输出它们的积。
三、实验准备:1、预习QE、MASM、LINK 三个软件的使用方法。
2、按实验要求,编写好实验源程序。
四、实验步骤:1、用QE编辑扩展名为.ASM的源文件。
2、汇编、连接生成扩展名为.EXE的可执行文件。
3、运行程序。
五、实验报告要求:1、总结用QE编辑源程序的方法。
2、说明源程序的连接、汇编过程。
3、分析运行结果。
4、按要求写出完整的实验报告(必须列出程序清单)。
实验二:分支程序设计实验(2学时)一、实验目的:1、学会简单分支和多分支程序的设计方法。
2、掌握程序的调试方法。
二、实验内容:1、从键盘读入两个一位数,输出它们的积。
若为非数字键,则显示字符“E”,退出程序。
2、从键盘接收一个按键,如为小写字母,则显示“L”,是大写字母,则显示“U”,如是数字,则显示“N”,都不是则显示“*”。
三、实验准备:1、预习分支程序设计方法。
2、按实验内容要求,编写好实验源程序。
四、实验步骤:1、用QE编辑扩展名为.ASM的源文件。
2、汇编、连接生成可执行文件.EXE。
3、运行程序。
河北工业大学编译原理实验报告
编译原理实验报告组员:韦廷廷(112455)、熊敏(112456)、马昊(113042) 任课老师:吴清一、任务概述本次实验我们要完成的任务主要是实现一个简单语言集的词法、语法和语义分析程序,验证实际编译系统的实现方法。
我们组的分工并不是词法分析、语法分析、语义分析每人负责一个,而是先确定每种分析按照哪一种方法实现,然后每个人写出自己的想法,按照自己的想法实验,最后总结到一起,有问题大家一起讨论,共同商量解决的办法。
二、系统设计实验采用的实现方法和依据:语言中的各类单词符号及其分类码表实验采用的实现方法和依据:文法:E → T | E+T | E-T T → F | T*F | T/F F → i | (E)状态ACTION GOTO ()+ - * / i # E T F0 S4 S5 1 2 31 S6 S7 Acc2 R3 R3 R3 S8 S9 R33 R6 R6 R6 R6 R6 R64 S4 S5 10 2 35 R8 R8 R8 R8 R8 R86 S4 S5 11 37 S4 S5 12 38 S4 S5 139 S4 S5 1410 S15 S6 S711 R1 R1 R1 S8 S9 R112 R2 R2 R2 S8 S9 R213 R4 R4 R4 R4 R4 R414 R5 R5 R5 R5 R5 R515 R7 R7 R7 R7 R7 R7三、系统实现(包括必要的框图,各.h和.c文件说明,所有函数功能的说明,数据结构、各种表格、变量等的说明,以及函数调用关系图等)(1)各.h和.c文件说明Cifa.cpp的功能:字符串扫描识别。
Table.cpp的功能:存放SLR分析法需要用到的ACTION和GOTO表。
Yufa.cpp的功能:引用Cifa.cpp、Table.cpp两个文件进行语法、语义的分析。
(2)函数功能说明词法分析部分函数说明:int lookup (char *token) //比较是否是关键字int GetChar(char ch) //每调用一次,就把扫描指示器当前所指示的源程序字符送入字符变量ch,然后把扫描指示器前推一个字符位置。
汇编语言程序设计(合工大版)习题参考答案
4 部份习题参考答案以下各数均为十进制数,请采纳8位二进制补码运算,并回答标志寄放器FLAGS中CF和OF的值,运算结果所代表的十进制数是多少?若是用16位二进制补码运算,其结果所代表的十进制数是多少?FLAGS中CF和OF的值呢?(1)85+69 (2)85+(-69) (3)85-(-69) (4)85-(69)85=55H,69=45H,-69=BBH,8位二进制补码运算:(1)85+69 =55H+45H=9AH, CF=0,OF=1(2)85+(-69)=55H+BBH=110H,CF=1,OF=0其余略实模式下,写出段地址和偏移地址为1234:200二、1430:004二、FF00:0FFF 的物理地址。
1234:2002=12340+2002=143421430:0042=14300+0042=14342FF00:0FFF=FF000+0FFF=FFFFF已知8086系统某存储单元物理地址为:52506H,你以为段基址的最大值、最小值别离是多少? 8086微机最多能够有多少个不同的段基址?52506=5250:0006, 段基址的最大值=525052506=4251:FFF6, 段基址的最小值=4251从物理地址为00100H开始到00103H单元中顺序寄存的数据为:12H,34H,56H,78H。
请画出数据寄存示用意,并回答以下问题:(1)写出00101H字节单元的内容(00101)= 34H(2)写出00102H字单元的内容(00102)= 7856H习题3别离说明8086处置器中各寄放器的名称和作用是什么?溢出标志OF与进位标志CF有何作用和区别?何为段地址?何为有效地址?何为物理地址?用指令举例说明。
带符号数比较大小,当AX < BX时程序转向标号L1,假设前导指令为CMP AX, BX后续指令应什么缘故?假设视为二个无符号数比较大小, 后续指令应什么缘故?带符号数:JL L1, 无符号数:JB L1ADD指令和ADC指令在什么情形下是一样的结果?CF=0说出CALL指令和INT 21H指令的操作,有何异同?CALL把断点压入堆栈,不必然是远调,INT 21H还要把FLAGS压入堆栈,且是远调,总入口地址为84H内存中的两个字。
河北工业大学汇编语言程序设计实验
DEC DI
;DI=DI-1,即将 DI 指向前
一个存储单元
PUSH CX
;保存 CX 寄存器的内容
MOV CL, 04H
;给 CL 寄存器赋值为 04H
河北工业大学汇编语言实验设计
SHR DX, CL
;将[DX]逻辑右移四位
POP CX
;恢复 CX 寄存器的内容
LOOP BBB
;循环判断语句,CX=CX-1,若 CX
A ;在屏幕上显示结果 ;带返回码终止
3) 在 BUF 和 BUF+1、BUF+2 单元分别放有一个无符号字节型数,编程序将其中 最大数存入 MAX 单元,并在屏幕上显示。
STACK SEGMENT STACK
;堆栈段
DB 1000 DUP (0)
;定义其后的每个操作数都占有一个字节
STACK ENDS
ADD DI, 03
NEXT: MOV AX, DX
河北工业大学汇编语言实验设计
AND AX, 000FH CMP AL, 0AH JB QQQ ADD AL, 07H QQQ: ADD AL, 30H MOV [DI], AL DEC DI PUSH CX MOV CL, 14 SHR DX, CL POP CX LOOP NEXT MOV DX, OFFSET MOV AH, 09H INT 21H MOV AH, 4CH INT 21H CODE ENDS END START
DEC SI
;SI=SI-1,即将 SI 指向前一个存储单
元
PUSH CX
;保存 CX 寄存器的内容
MOV CL, 04H
;给 CL 寄存器赋值为 04H
SHR DX, CL
c++程序设计实验报告 直接可交版
河北工业大学《C语言程序设计课程设计》报告学部(系)计算机科学与技术班级计C141 姓名赵冰心学号 148025 成绩____一、题目小学生四则运算练习器二、设计思路1、总体设计1)分析程序的功能练习者首先选择所要练习的运算类型(加减乘除),再选运算数据的范围。
系统自动出题,练习者解答,答错两次后系统给出正确答案并出下道题。
每次出十题2)系统总体结构每一次练习的过程可以由这几部分完成:练习者选择运算种类,练习者选择运算数范围,系统连续出题,系统判断正误并给出提示,系统统计答题分数,学生选择是否继续运算。
每次计算有三个关注:1运算类型的选择2运算数范围的选择3结果正误的判断。
程序关键部分:1 switch语句,实现对运算类型的选择,表达式满足条件后break跳出2继续对运算数范围的选择。
3选择好之后系统根据练习者的选择,随机出十道题。
出题用到for循环语句和rand()函数产生随机数。
4定义三个函数,加减乘。
对函数多次调用,来实现10道题的运算。
5每次答题,系统记录答题情况,给予相应的分值,并以此累加,最终得出总成绩。
2、各功能模块的设计:说明各功能模块的实现方法#include<stdio.h>//把程序需要使用的关于系统定义的函数printf()的一些信息文件stdio.h包含进来。
#include<stdlib.h>//下面有用到rand()()、srand()() 所以先用头文件#include<time.h>//根据时间产生随机数的头文件{int a,c,d,i,g;char b;while(1){int f=0;jiemian();scanf("%d%c",&a,&b);//输入a,bfor(i=0;i<10;i++){srand(time(NULL));//根据time.h头文件产生随机数switch(b)}printf("本次成绩为:%d\n",f);printf("是否继续?\n");printf("1 是 2否\n");scanf("%d",&g);if(g==2)break;//如果g=2则打破循环}}void jiemian(){printf("***********欢迎使用四则运算练习程序**************\n"); printf("请选择运算种类及运算范围\n");printf("1 加法\n");printf("2 减法\n");printf("3 乘法\n");printf("a:1~10\n");printf("b:1~50\n");printf("c:1~100\n");}加法运算int jia(int a,int b)//加法运算{int e;printf("%d+%d=",a,b);scanf("%d",&e);if(e==a+b)return 1;//如果e=a+b成立继续循环else//错误的话给出正确答案{printf("回答错误!正确答案为:%d\n",a+b);return 0;}}减法运算int jian(int a,int b)//减法运算{int e,t;if(a<b){t=a;a=b;b=t;}printf("%d-%d=",a,b);scanf("%d",&e);if(e==a-b)return 1;//如果e=a-b成立继续循环else{printf("回答错误!正确答案为:%d\n",a-b); return 0;}}乘法运算int cheng(int a,int b)//乘法运算{int e;printf("%d*%d=",a,b);scanf("%d",&e);if(e==a*b)//如果e=a*b成立则继续循环return 1;else{printf("回答错误!正确答案为:%d\n",a*b);return 0;//返回}}3、设计中的主要困难及解决方案1 如何选择加减乘法以及如何选择算数范围2 产生的随机数满足所选定的运算数范围,由于随机数是随机产生的,经过参考资料知道利用所需范围的边界可对随机数的范围进行限定。
河北工业大学.net程序设计c#实验报告实验三
《C#》实验报告姓名:王璐学号:142871日期:2016/04/24实验名称: 面向对象编程成绩:实验一类和对象编程实验目的及要求【实验目的】1.如何创建类和对象。
2.如何为定义的类编写相应的方法。
3.如何通过属性访问对象中的数据【实验要求】1.写出程序,并调试程序,要给出测试数据和实验结果。
2.整理上机步骤,总结经验和体会。
3.完成实验日志和上交程序。
二、实验环境Windows 7操作系统,Visual Studio 2005及以上版本三、实验内容(题目、源代码、关键代码解释、运行结果、实验总结)【实验1-1-1】编写一个控制台应用程序,定义并使用一个时间类,该类包含时、分、秒字段与属性,具有将时间增加1秒、1分和1小时的方法,具有分别显示时、分、秒和同时显示时分秒的方法。
源代码:using System;public class Time{.");= =刚刚发现前面的minute全写成minute了..英语不太..= ();("现在加一秒功能:");();();("现在加一分功能:");();();("现在加一时功能:");();();("现在依次调用三个方法输出时分秒:");();();();}}2、关键代码解释:1)时钟循环需要取模运算,如第25时为25%24=1,即1时;另外还要注意秒的增加带给分、时的影响等。
2)加时功能直接使用time++,并注意判断对其他时间的影响3)获取时间采用了DataTime里的函数,直接获取系统时间。
3、运行结果实验总结结合实践明白了属性的用法与含义,并且通过百度了解了怎么从系统中读取现在的时间。
【实验1-1-2】编写一个控制台应用程序,程序中有两个类定义,一个是创建程序时系统自动创建的类Class1,一个是用户自定义的Student类,要求该类包含私有字段:学号(字符串)、姓名(字符串)和性别(字符),具有三个属性:学号(读写)、姓名(只读)、性别(读写),具有有参构造方法、具有同时显示学生个人信息的方法。
河北工业大学Java程序设计实验报告
Java程序设计实验报告班级:网络 151姓名:徐毅民学号: 153299实验一 Java语言基础一.实验目的掌握 Java语言的基本语法、基本数据类型的使用方法,掌握从键盘输入基本类型的数据,熟练运用分支、循环等语句控制程序流程。
二.实验内容1、编写一个Java应用程序,用户从键盘输入十名学生的信息,至少包括姓名、年龄、出生年月日、java课程实验成绩,成绩使用浮点数,年龄使用整型,程序将输出年龄、java课程实验成绩的平均值。
提示:Scanner对象调用nextDouble()或nextFloat()可以获取用户从键盘输入的浮点数。
2、使用Arrays类实现数组排序:使用java.util包中的Arrays 类的类方法public static void sort(double a[])可以把参数a指定的double类型数组按升序排序;public static void sort(double a[], int start , int end)可以把参数a指定的double类型数组中从位置start到end位置的值按升序排序。
给定数组int a[]={12,34,9,-23,45,6,90,123,19,45,34}; 从键盘读入一个整数,使用折半查找判断该整数是否在这个数组中,并将结果输出。
3、输出100~200之间的所有素数。
4、采用for循环求1至1000之内的所有“完全数”。
所谓“完全数”是指一个数,恰好等于它的因子之和。
例如,6是一个完全数,因为6的因子为1、2、3,而6=1+2+3。
5、已知XYZ+YZZ=532,其中X、Y和Z为数字,编程求出X,Y和Z 的值。
三.实验步骤实验1以最终学生信息管理系统为准实验2代码如下:import java.util.Arrays;import java.util.Scanner;public class test2 {public static void printDoubleArray(double a[]) { for(int i = 0; i < a.length; i++) {System.out.print(a[i]+" ");}System.out.println();}public static void printfIntegerArray(int a[]) { for(int i = 0; i < a.length; i++) {System.out.print(a[i]+" ");}System.out.println();}public static void main(String[] args) {double a[] = {2.6, 4.6, 2, 8, 888, 569.5, 454.5, 100, -84.5, 45};System.out.println("原double数组a:");printDoubleArray(a);Arrays.sort(a, 0, a.length/2);System.out.println("排序double数组a前一半:");printDoubleArray(a);Arrays.sort(a);System.out.println("排序整个double数组a:");printDoubleArray(a);int b[] = {12, 34, 9, -23, 45, 6, 90, 123, 19, 45, 34};Arrays.sort(b);System.out.println("排序整个double数组b:");printfIntegerArray(b);Scanner in = new Scanner(System.in);System.out.print("输入要查询的数字:");int key = in.nextInt();int i = Arrays.binarySearch(b, key);if(i < 0 || i >= b.length) {System.out.println(i+"输入数字不在数组中!");} else {System.out.println(b[i]+"在数组b第"+(i+1)+"位!");}}}实验3代码如下:public class test3 {public static boolean isPrime(int x) {if(x == 1) return false;int s = (int)Math.sqrt(x);for(int i = 2; i <= s; i++) {if(x%i == 0) return false;}return true;}public static void main(String[] args) {int cnt = 0;for(int i = 100; i < 200; i++) {if(isPrime(i)) {System.out.printf("%4d", i);}if(isPrime(i) && cnt%10 == 0)System.out.println();}}}实验4代码如下:public class test4 {public static boolean isCompleteNumber(int x) { int sum = 0;for(int i = 1; i < x; i++) {if(x%i == 0) sum += x;}return x == sum;}public static void main(String[] args) {int cnt = 0;for(int i = 1; i <= 1000; i++) {if(isCompleteNumber(i)) {System.out.printf("%4d", i);}if(isCompleteNumber(i) && cnt%10 == 0)System.out.println();}}}实验5代码如下:public class test5 {public static void main(String[] args) {for(int x = 0; x < 10; x++) {for(int y = 0; y < 10; y++) {for(int z = 0; z < 10; z++) {if(100*x+110*y+12*z == 532) {System.out.println("X="+x+" Y="+y+" Z="+z);return;}}}}}}四.详细的调试和运行结果实验2运行结果:原double数组a:2.6 4.6 2.0 8.0 888.0 569.5 454.5 100.0 -84.5 45.0排序double数组a前一半:2.0 2.6 4.6 8.0 888.0 569.5 454.5 100.0 -84.5 45.0排序整个double数组a:-84.5 2.0 2.6 4.6 8.0 45.0 100.0 454.5 569.5 888.0排序整个double数组b:-23 6 9 12 19 34 34 45 45 90 123输入要查询的数字:-23-23在数组b第一位!实验3运行结果:101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199实验4运行结果:2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199 211 223 227 229 233 239 241 251 257 263 269 271 277 281 283 293 307 311 313 317 331 337 347 349 353 359 367 373 379 383 389 397 401 409 419 421 431 433 439 443 449 457 461 463 467 479 487 491 499 503 509 521 523 541 547 557 563 569 571 577 587 593 599 601 607 613 617 619 631 641 643 647 653 659 661 673 677 683 691 701 709 719 727 733 739 743 751 757 761 769 773 787 797 809 811 821 823 827 829 839 853 857 859 863877 881 883 887 907 911 919 929 937 941947 953 967 971 977 983 991 997实验5运行结果:X=3 Y=2 Z=1五.实验感想通过本次从实验对java语言的基本语法有了基本了解,学会了使用控制台命令行的方式运行java程序。
北方工业大学计算机专业汇编语言实验一详细报告(含代码)
(9)装入命令 L,它有两种功能:-L 地址 驱动器 扇区号 扇区数:把磁盘上指定扇区的内容装入到内存 指定地址起始的单元中;-L [地址]:此命令装入已在 CS:5CH 中格式化的文件控制块所指定的文件。 (10)写命令 W,有两种格式:-W 地址 驱动器 扇区号 扇区数:把数据写入磁盘的指定扇区;-W [地 址]此命令把指定内存区域中的数据写入由 CS:5CH 处的 FCB 所规定的文件中。
(4)追踪命令 T,有两种格式:-T[=地址]从指定地址起执行一条指令,显示寄存器内容和状态;-T[=地址][值] 该命令从指定地址起执行 n 条命令后停下来,n 由[值]确定。
(5)显示内存单元内容的命令 D,格式为:-D[地址]或-D[范围]
(6)修改内存单元内容的命令 E,它有两种格式:-E 地址 内容表;-E 地址:逐个单元相继地修改。
注意: 字母不分大小写; 只使用 16 进制数,不加 H; 分割符只在两个数值之间是必须的,命令和参数之间可有可无 ; 键入回车键执行命令,Ctrl+Break 或 Ctrl+C 中止命令的执行 ; 如命令不符合 DEBUG 的规则,则提示“error”并使用“^”指示错误位置。
2、DEBUG 的主要命令:
;将偏移地址 303 装入 0D
-e,304,0E
;将偏移地址 304 装入 0E
MOV AX,BX
;BX 赋给 AX
MOV AX,0304H
;0304 赋给 AX
MOV AX,[0304H]
;地址为 0304 的值赋给 AX
MOV AX,[BX]
;BX 的值赋给 AX
MOV AX,0001[BX] ;BX 的值+0001 赋给 AX
(11)退出 DEBUG 命令 Q,该命令格式为 Q:它退出 DEBUG 程序,返回 DOS,但该命令本身并不把在内 存中的文件存盘,如需存盘,应在执行 Q 命令前先执行写命令 W。
实验4 顺序结构程序设计
河北工业大学城市学院《汇编语言程序设计》实验报告实验4 顺序结构程序设计一、实验目的1.掌握汇编语言集成开发环境下编写完整汇编程序的书写方法。
2.掌握汇编语言集成开发环境下汇编程序的汇编、连接、执行和调试。
3.常用伪指令的使用。
4. 掌握顺序结构程序的编写方法。
二、实验内容1.从键盘输入一个大写字母,将其转换为小写字母并显示在屏幕上解:程序代码为:DATAS SEGMENTDATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS START:MOV AX,DATASMOV DS,AXMOV AH,1;功能号为1,键盘输入单字符并回显INT 21HADD AL,32MOV DL,ALMOV AH,2;功能号为2,显示输出单字符INT 21HMOV AH,4CHINT 21HCODES ENDSEND START运行结果如图所示:2.在内存X和Y单元各存放了一个非压缩BCD码,将它们组合为压缩BCD码并存于Z单元(高地址做高位)。
解:程序代码为:DATAS SEGMENTX DB 00000101BY DB 00000110BZ DB?DATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS START:MOV AX,DATASMOV DS,AXMOV CL,4SHL X,CLMOV CL,YOR CL,XMOV Z,ALMOV AH,4CHINT 21H CODES ENDSEND START运行结果如图所示:3.在内存TAB开始的16个单元连续存放了0-15的平方值(0-225),任给一个数X(0 ≤X ≤15),求X的平方值,并把结果存放在Y单元中。
解:程序代码为:DATAS SEGMENTTAB DB 0,1,4,9,16,25,36DB 49,64,81,100,121DB 144,169,196,225X DB 6Y DB? DATAS ENDS CODESSEGMENTASSUME CS:CODES,DS:DATAS START:MOV AX,DATASMOV DS,AXLEA BX,TABMOV AL,XMOV AH,0ADD BX,AXMOV AL,[BX]MOV Y,ALMOV AH,4CHINT 21H CODES ENDSEND START。
河北工业大学 单片机 第三次实验内容
3.3汇编语言程序设计实验实验六 分支程序设计一、 实验目的1. 进一步熟悉MCS-51指令系统,了解汇编语言程序设计的基本结构。
2. 掌握分支结构程序设计的方法。
3. 学会用条件转移指令、CJNE 、JMP 及其配合使用来编写二分支、三分支和多分支程序。
二、 实验内容1. 二分支的条件转移程序设变量X 存放于R0,函数值Y 存放在R1,其中X 、Y 均为二进制数。
试按照下式的要求给Y 赋值:程序框图如图3-5所示:Y= 1 X>0 0 X=0 -1 X<0:三、实验步骤1.根据实验内容和参考程序流程图,编出相应的分支结构程序。
2.输入程序,汇编成功;3.用F4(执行到光标处)、F7(跟踪执行)、F8(单步执行)或断点运行等方式调试程序;4.观察程序的流程,记录运行结果。
四、思考题1.CJNE指令对CY 有影响吗?用CJNE 和JC/JNC指令配合应注意什么?在用JMP 指令前,若变址 255怎么办?答:1)CJNE指令对CY 有影响。
CJNE (目的字节),(源字节),rel 功能:目的字节与源字节比较,相等则继续执行,不相等则转移,同时,若目的字节>=源字节,(C)=0若目的字节<源字节,(C)=12)选取好正确的direct值以便确定Cy的值3)提前设好变址,使变址<2552.用什么指令可以实现多分支之间的隔离?答:控制、条件转移指令,包括JMP、CJNE、DJNZ、JC、JB等,可以转移到$或其他。
五、实验报告要求写出题目运行结果。
六、参考程序清单1、二分支的条件转移程序1)用二分支结构程序实现:ORG 0000HMOV A, R0JZ LOAD ;等于零转LOADJNB ACC.7,GO ;大于零转GOMOV A, #0FFHSJMP LOADGO: MOV A, #01HLOAD: MOV R1, ASJMP $END运行结果:(R1)=0X002)赋值(R0)=15H运行结果: (R1)=0X013)赋值(R0)=0F2H2)用三分支结构程序实现:ORG 0000HMOV A, R0JNZ COMP ;不等于零转COMPMOV R1,#00H ;等于零,则0 →(R1)SJMP MP3COMP: CJNE R0,#80H,MP1 ;(R0)中数与80H比较,不相等则转移到MP1 MOV R1,#0FFH ;若比较相等,则-1 →(R1)LJMP MP3MP1: JC MP2 ;两数不相等,(R0)> 0转MP2MOV R1,#0FFH ;(R0) < 0,-1 →(R1)LJMP MP3MP2: MOV R1,#01H ;(R0)>0,1 →(R1)MP3: SJMP $END运行结果:(R1)=0X00 2)赋值(R0)=15H3)赋值(R0)=0F2H实验七循环程序设计一、实验目的1.进一步熟悉MCS-51指令系统,了解汇编语言程序设计的基本结构。
合工大(汇编)语言程序设计实验报告
.合肥工业大学计算机与信息学院实验报告课程:汇编语言程序设计专业班级:****************学号:**********姓名:*****目录实验一··3实验二··7实验三··12实验四··22实验一Debug程序的使用一.实验目的1、熟悉DEBUG程序中的命令,学会在DEBUG下调试运行汇编语言源程序。
2、掌握8086/8088的寻址方式及多字节数据的处理方法。
二.实验内容1、利用DEBUG程序中的“E”命令,将两个多字节数“003F1AE7H”和“006BE5C4H”分别送入起始地址为DS:0200H和DS:0204H两个单元中。
2、分别用直接寻址方式和寄存器间接寻址方式编写程序段,实现将DS:0200H 单元和DS:0204H单元中的数据相加,并将运算结果存放在DS:0208H单元中。
要求:本次实验的内容均在DEBUG下完成,实现数据的装入、修改、显示;汇编语言程序段的编辑、汇编和反汇编;程序的运行和结果检查。
三.实验过程和程序实验内容一:e ds:0200 E7 1A 3F 00e ds:0204 C4 E5 6B 00实验内容二:(1)直接寻址方式MOV AX,[0200]MOV BX,[0202]ADD AX,[0204]ADC BX,[0206]MOV [0208],AXMOV [020A],BX(2)寄存器间接寻址方式MOV SI,0200HMOV DI,0204HMOV BX,0208HMOV AX,[SI]MOV DX,[SI+2]ADD AX,[DI]ADC DX,[DI+2]MOV [BX],AXMOV [BX+2],DX四.实验结果(包括必要的截图)实验内容一:输入数据:显示数据:实验内容二:(1)直接寻址方式程序段编辑:反汇编:运行:结果在DS:0208 单元中为00AB00ABH(2)寄存器间接寻址方式程序段编辑:反汇编:运行:结果高字存放在dx中,低字存放在ax中(结果为00AB00ABh)五.实验体会通过本实验,实践debug程序中的命令,并在debug下调试运行汇编语言源程序。
汇编语言程序设计实验教程
汇编语言程序设计实验教程石陆魁刘恩海河北工业大计算机科学与软件学院目录第一章上机过程 (3)1.1编辑源程序 (3)1.2 汇编源程序 (4)1.3连接目标程序 (5)1.4运行程序 (6)第二章DEBUG命令祥解 (7)2.1 DEBUG程序使用 (7)2.2 DEBUG的常用命令 (7)第三章汇编语言程序设计实验 (12)3.1实验一顺序与分支程序设计 (12)3.2 实验二循环与子程序程序设计 (13)3.3 实验三算术运算与代码转换程序设计 (15)3.4 实验四字符串的匹配与替换程序设计 (16)3.5 实验五输入输出程序设计 (17)第四章部分实验参考答案 (19)第一章上机过程1.1编辑源程序汇编语言源程序:用汇编语句编写的解决应用问题的程序。
汇编程序:将汇编语言源程序翻译成机器语言程序的系统。
汇编:将汇编语言程序翻译成机器语言程序的过程。
在编辑汇编语言源程序时,对计算机硬件工作环境无特殊要求,对软件工作环境要求也很简单,只需用建立ASCII码文本文件的软件即可。
(1)编辑软件编辑软件:EDIT、QE、WORD、NOTEPAD等。
当输入、建立和修改源程序时,可任选一种编辑软件,不要用格式控制符,要求编辑完成的文件扩展名一定是.ASM。
(2)汇编程序有汇编ASM.EXE、宏汇编MASM.EXE及TASM等,一般使用宏汇编MASM.EXE,因它比ASM.EXE功能强。
TASM适用于8086/8088~Pentium系列指令系统所编写的汇编语言程序,是比较先进的汇编工具。
(3)连接程序用连接程序LINK.EXE或TLINK.EXE,将MASM.EXE产生的目标代码程序(.OBJ)文件连接成可执行程序.EXE,TLINK比LINK更先进。
(4)辅助工具程序(.EXE)进行汇编语言程序调试和文件格式转换的程序有: 动态调试程序EXE2BIN.EXE 文件格式转换程序CREF.EXE 交叉引用程序编辑、汇编、连接、调试过程如图1.1所示。
河北工业大学Java程序设计实验报告材料
Java程序设计实验报告班级:网络 151 :徐毅民学号: 153299实验一Java语言基础一.实验目的掌握Java语言的基本语法、基本数据类型的使用方法,掌握从键盘输入基本类型的数据,熟练运用分支、循环等语句控制程序流程。
二.实验容1、编写一个Java应用程序,用户从键盘输入十名学生的信息,至少包括、年龄、出生年月日、java课程实验成绩,成绩使用浮点数,年龄使用整型,程序将输出年龄、java课程实验成绩的平均值。
提示:Scanner对象调用nextDouble()或nextFloat()可以获取用户从键盘输入的浮点数。
2、使用Arrays类实现数组排序:使用java.util包中的Arrays类的类方法public static void sort(double a[])可以把参数a指定的double 类型数组按升序排序;public static void sort(double a[], int start , int end)可以把参数a指定的double类型数组中从位置start到end位置的值按升序排序。
给定数组int a[]={12,34,9,-23,45,6,90,123,19,45,34}; 从键盘读入一个整数,使用折半查找判断该整数是否在这个数组中,并将结果输出。
3、输出100~200之间的所有素数。
4、采用for循环求1至1000之的所有“完全数”。
所谓“完全数”是指一个数,恰好等于它的因子之和。
例如,6是一个完全数,因为6的因子为1、2、3,而6=1+2+3。
5、已知XYZ+YZZ=532,其中X、Y和Z为数字,编程求出X,Y和Z的值。
三.实验步骤实验1以最终学生信息管理系统为准实验2代码如下:import java.util.Arrays;import java.util.Scanner;public class test2 {public static void printDoubleArray(double a[]) {for(int i = 0; i < a.length; i++) {System.out.print(a[i]+"");}System.out.println();}public static void printfIntegerArray(int a[]) {for(int i = 0; i < a.length; i++) {System.out.print(a[i]+"");}System.out.println();}public static void main(String[] args) {double a[] = {2.6, 4.6, 2, 8, 888, 569.5, 454.5, 100, -84.5, 45}; System.out.println("原double数组a:"); printDoubleArray(a);Arrays.sort(a, 0, a.length/2);System.out.println("排序double数组a前一半:"); printDoubleArray(a);Arrays.sort(a);System.out.println("排序整个double数组a:"); printDoubleArray(a);int b[] = {12, 34, 9, -23, 45, 6, 90, 123, 19, 45, 34}; Arrays.sort(b);System.out.println("排序整个double数组b:"); printfIntegerArray(b);Scanner in = new Scanner(System.in);System.out.print("输入要查询的数字:");int key = in.nextInt();int i = Arrays.binarySearch(b, key);if(i < 0 || i >= b.length) {System.out.println(i+"输入数字不在数组中!");} else {System.out.println(b[i]+"在数组b第"+(i+1)+"位!");}}}实验3代码如下:public class test3 {public static boolean isPrime(int x) {if(x == 1) return false;int s = (int)Math.sqrt(x);for(int i = 2; i <= s; i++) {if(x%i == 0) return false;}return true;}public static void main(String[] args) {int cnt = 0;for(int i = 100; i < 200; i++) {if(isPrime(i)) {cnt++;System.out.printf("%4d", i);}if(isPrime(i) && cnt%10 == 0) System.out.println();}}实验4代码如下:public class test4 {public static boolean isCompleteNumber(int x) { int sum = 0;for(int i = 1; i < x; i++) {if(x%i == 0) sum += x;}return x == sum;}public static void main(String[] args) {int cnt = 0;for(int i = 1; i <= 1000; i++) {if(isCompleteNumber(i)) {cnt++;System.out.printf("%4d", i);}if(isCompleteNumber(i) && cnt%10 == 0)System.out.println();}}实验5代码如下:public class test5 {public static void main(String[] args) {for(int x = 0; x < 10; x++) {for(int y = 0; y < 10; y++) {for(int z = 0; z < 10; z++) {if(100*x+110*y+12*z == 532) {System.out.println("X="+x+" Y="+y+" Z="+z);return;}}}}}}四.详细的调试和运行结果实验2运行结果:原double数组a:2.6 4.6 2.0 8.0 888.0 569.5 454.5 100.0 -84.5 45.0 排序double数组a前一半:2.0 2.6 4.6 8.0 888.0 569.5 454.5 100.0 -84.5 45.0 排序整个double数组a:-84.5 2.0 2.6 4.6 8.0 45.0 100.0 454.5 569.5 888.0 排序整个double数组b:-23 6 9 12 19 34 34 45 45 90 123输入要查询的数字:-23-23在数组b第一位!实验3运行结果:101 103 107 109 113 127 131 137 149151 157 167 173 179 181 191 193实验4运行结果:2 3 5 7 11 13 17 19 23 2931 37 41 43 47 53 59 61 67 7173 79 83 89 97 101 103 107 109 113127 131 137 149 151 157 167 173179 181 191 193 211 223 227 229233 239 241 251 257 263 269 271 277 281283 293 307 311 313 317 331 337 347 349353 359 367 373 379 383 389 397 401 409419 421 431 433 439 443 449 457 461 463467 479 487 491 499 503 509 521 523 541547 557 563 569 571 577 587 593 599 601607 613 617 619 631 641 643 647 653 659661 673 677 683 691 701 709 719 727 733739 743 751 757 761 769 773 787 797 809811 821 823 827 829 839 853 857 859 863877 881 883 887 907 911 919 929 937 941947 953 967 971 977 983 991 997实验5运行结果:X=3 Y=2 Z=1五.实验感想通过本次从实验对java语言的基本语法有了基本了解,学会了使用控制台命令行的方式运行java程序。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
汇编语言程序设计实验网络*** ***实验一 顺序与分支程序设计一 、实验目的1) 掌握顺序程序设计方法。
2) 掌握分支程序的结构及分支程序的设计,调试方法。
2) 学习数据传送及算术和逻辑运算指令的用法。
3) 熟悉在pc 机上建立、汇编、连接、调试和运行汇编语言程序的过程。
二、实验内容1.实验六从键盘上接收一位十进制数x ,计算y 值,并以十六进制形式显示出来,y 按下列公式计算。
⎪⎪⎩⎪⎪⎨⎧===-=+=)6(2/)5()4(2)3(2222X X X X X X X X X X Y2..实验七实验内容:从键盘上接收两个一位十六进制数x 和y ,然后再输入一个a-d 之间的一个字符,按下列要求计算。
a)当输入字符为a ,则计算x+y ,并以十六进 制形式显示出来 b)当输入字符为b ,则计算|x-y|,并以十六进制形式显示出来 c)当输入字符为c ,则计算x*y ,并以十六进制形式显示出来 d)当输入字符为d ,则计算x/y ,并以十六进制形式显示出来三、实验代码实验六DATE SEGMENTX DB ?DATE ENDS ;数据段CODE SEGMENTASSUME CS:CODE,DS:DATESTART:MOV AX,DATE ;代码段MOV DS,AX ;初始化ds寄存器MOV AH,1INT 21H ;读文件到缓冲区CMP AL,33H ;比较指令JB L0 ;A<BCMP AL,36HJA L0AND AL,0FH ;逻辑与指令MOV X,AL ;al给xMOV AL,XCMP AL,3HJE L1 ;执行L1命令CMP AL,4HJE L4 ;执行L4命令CMP AL,5HJE L6 ;执行L6命令CMP AL,6HJE L7 ;执行L7命令L1:MUL ALADD AL,X ;al+xL5:MOV BL,ALMOV CL,4SHR AL,CL ;移位指令CMP AL,9JLE L2 ;转移指令。
小于或等于,或者不大于则转移ADD AL,7L2:ADD AL,30H ;寄存器al加0x30MOV DL,ALMOV AH,2 ;把2放入ah里INT 21HAND BL,0FH ;逻辑与运算指令CMP BL,9JLE L3ADD BL,7 ;相加L3:ADD BL,30HMOV DL,BLMOV AH,2INT 21HJMP L0L4:MUL ALSUB AL,XSUB AL,XJMP L5L6:MUL ALJMP L5L7:MUL ALSHR AL,1JMP L5L0:MOV AH,4CHINT 21HCODE ENDSEND START实验七DATA SEGMENTX DB 0Y DB 0W DB 0DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA START:MOV AX,DATAMOV DS,AXXOR AX,AXMOV AH,1INT 21HCMP AL,39HJBE L1SUB AL,07HL1:SUB AL,30HMOV X,ALMOV AH,1INT 21HCMP AL,39HJBE L2SUB AL,07HL2:SUB AL,30HMOV Y,ALMOV AH,1INT 21HA:CMP AL,41HJNE BXOR AL,ALMOV AL,XADD AL,YMOV W,ALJMP L3B:CMP AL,42HJNE CXOR AL,ALMOV AL,XSUB AL,YMOV W,ALCMP AL,0JG L3NEG ALMOV W,ALJMP L3C:CMP AL,43HJNE DXOR AL,ALMOV AL,XMUL YMOV W,ALJMP L3D:XOR AX,AXMOV AL,XDIV YMOV W,ALL3:MOV DL,ALMOV CL,4SHR DL,CLCMP DL,9JNA L4ADD DL,07H L4:ADD DL,30HMOV AH,02HINT 21HMOV DL,WAND DL,0FHCMP DL,9JNA L5ADD DL,07H L5:ADD DL,30HMOV AH,02HINT 21HMOV AH,4CHINT 21HCODE ENDSEND START四、实验结果:实验六结果实验七结果五、实验心得:(1)通过实验使我知道了和熟悉了汇编程序设计的步骤1.建立数学模型遇到一个题目,首先要进行全面的分析,根据问题提出的条件,特点,找出规律,找出问题的数学模型或者制定解决问题的规律。
2.绘制程序流程图流程图能够把比较抽象的问题变得而形象化,并且有助于理清楚思路,便于程序的编制,在程序的易读性和易维护性上有很大的帮助。
3.合理分配存储空间和寄存器汇编语言能够直接的调用存储器和寄存器。
程序运行时,大两量的数据,中间结果或最后的结果都存放在存储器中,且运行的程序目标代码在存储器中,节约空间是一个好的程序应该注意的问题。
4.编制程序根据语法指令编制程序5.人工检查用人工的方式检查程序是否有错,并及时的改正。
6.上机调试只有通过上机才能验证程序是否正确,经过反复的运行调试,才能得到正确的程序。
(2)掌握了分支程序的结构及分支程序的设计,调试方法和数据传送及算术和逻辑运算指令的用法。
汇编语言程序设计实验网络*** ***实验二循环与子程序程序设计一、实验目的1) 加深对循环结构的理解。
2)掌握循环程序的设计方法。
3)学习子程序的定义和调用方法。
4)掌握子程序、子程序的嵌套、递归子程序的结构。
5) 掌握子程序设计、编制及调试。
6) 熟练掌握DEBUG的常用命令,学会用DEBUG调试程序。
二、实验内容1)编制在屏幕上显示九九乘法表的程序。
2)编制在屏幕上显示用*组成的三角形的程序。
三、实验代码实验一DATA SEGMENTS2 DB ?S1 DB ?X DB 1Y DB 1S DB 0AHFCH=2AHFDH=3DHFKG=20HFHH=0AHFHC=0DHDATA ENDSSTACK1 SEGMENT STACKDB 20H DUP(0)STACK1 ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK1 START:MOV AX,DATAMOV CL,9LL1:PUSH CX ;将CL压入堆栈段MOV CL,YLL2:CALL L1 ;调用子程序L1INC XLOOP LL2MOV X,1INC YMOV DL,FHH ;输出换行和回车MOV AH,2INT 21HMOV DL,FHCMOV AH,2INT 21HPOP CX ;从堆栈段中取出CLLOOP LL1MOV AH,4CH ;程序结束INT 21HL1 PROC ;计算X*Y=Z并且输出X*Y=Z的子程序ADD DL,30H MOV AH,2 INT 21H MOV DL,FCH MOV AH,2 INT 21H MOV DL,Y ADD DL,30H MOV AH,2 INT 21H MOV DL,FDH MOV AH,2 INT 21H MOV AL,X MUL YDIV SMOV S1,AH ADD AL,30H MOV DL,AL MOV AH,2 INT 21HADD S1,30HMOV DL,S1MOV AH,2INT 21HMOV DL,FKG ;输出空格MOV AH,2INT 21HRETL1 ENDP ;子程序结束CODE ENDSEND START实验二DATA SEGMENTN DB ?FCH=2AHFDH=3DHFKG=20HFHH=0AHFHC=0DHDATA ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAMOV AX,DATAMOV DS,AXMOV AH,1 ;输入一位16进制数确定输出行数INT 21H CMP AL,39H JBE L1 SUB AL,07HL1:SUB AL,30H MOV N,ALXOR BX,BXMOV DL,FCHMOV CL,NMOV DL,FHH ;输出换行和回车MOV AH,2INT 21HMOV DL,FHCMOV AH,2INT 21HLOP:PUSH CXINC BLMOV CL,BLMOV DL,FCHLOP2:MOV AH,02HINT 21HLOOP LOP2MOV DL,0AHMOV AH,02HINT 21HMOV DL,FHCMOV AH,02HINT 21HCMP BL,9JZ L2LOOP LOPL2:MOV AH,4CH ;程序结束INT 21HCODES ENDSEND START四、实验结果:实验一结果实验二结果五、实验心得五、循环程序由初始化部分、循环部分、调整部分、控制部分组成1〉两种方式,一种是先判断在执行,另一种是先执行再判断。
2〉两种控制循环的方式a〉计数控制循环一般使用LOOP指令,要先将循环的次数放入CX中,在多重循环的计数控制中要注保存和复原上一次循环的断点信息,在保留和复原时可以使用堆栈进行处理。
自认为可以理解为一根盘绕了确定的圈数的绳子,又进入的头,又出去的尾。
b〉条件控制循环一般使用JMP指令使程序跳到这一段的开头,用CMP在循环中进行比较判断,再根据程序要求,选择适当的转移条件,跳出循环。
自认为可以理解为一圆形的导轨,并在导轨上设置一个初口,在符合条件时就在导轨上脱离,否则,将会在导轨上一直的转下去。
3〉再循环中可以同时使用两者,当即已知循环的次数限制范围,但又要求在符合条件时结束循环是,就要同时使用两者。
六、子程序的使用大大的简化了程序设计的思路,在完成一个程序时,可以简单的把一个程序划分为几个完整的几部分,使每一部分独立的完成特定的一部分和计算任务。
子程序的使用还可以大大的减小程序的体积,在一程序中,如果需要多次反复的是用某一段代码的话,就可以将这段代码设定为子程序,以后想使用时,只要一CALL再一RET 就OK啦。
我认为使用子程序的关键在于明白子程序的机理,明白子程序是如何保存和恢复断点的信息的,只有真正的理解了这一点才能更好地利用好子程序。
子程序的参数传递的方式有很多种,但是在堆栈段传递参数时,应该注意使用带立即数的返回的方式,在利用寄存器BP访问堆栈段来取得参数。
汇编语言程序设计实验网络*** ***实验三算术运算与代码转换程序设计一、实验目的1)掌握算术运算程序的设计方法。
2)掌握代码转换程序的设计方法。
3)进一步掌握各种程序结构。
4)熟练掌握和使用用DEBUG调试程序。
二、实验内容1)编制两个多字节整数加法和减法程序,并将结果按十六进制形式显示在屏幕上。
2)编写程序计算从键盘输入两个不超过四位的十进制数的和、差、积、商,并以十进制形式输出。