合肥工业大学汇编程序设计实验报告完整代码

合集下载

合工大汇编实验报告

合工大汇编实验报告

合工大汇编实验报告本文将围绕“合工大汇编实验报告”展开阐述,按照实验的步骤分为以下几个部分进行讲解。

第一部分:实验目的和实验环境本次实验的目的是让我们熟悉汇编语言的基本语法和指令,了解在计算机内部运行程序的原理。

实验环境为Windows系统下的汇编语言编写工具MASM。

第二部分:实验过程在实验过程中,我们首先需要学会使用MASM编写汇编程序,然后通过“debug”命令进行调试,最后在汇编器中运行程序,观察程序的执行情况。

具体操作过程如下:1. 编写汇编程序首先,我们需要编写一份汇编程序。

在这份程序中,我们可以通过汇编语言的基本语法和指令,实现一些简单的计算、输出等操作。

例如,下面是一份简单的汇编程序:; 求1+2+3+...+10的结果mov ax, 0 ; 将ax寄存器清零mov bx, 1 ; 将bx寄存器初始化为1mov cx, 10 ; 将cx寄存器初始化为10sum_loop: ; 循环计算add ax, bx ; 将bx寄存器的值加到ax寄存器中inc bx ; 将bx寄存器的值加1loop sum_loop ; cx寄存器自减1,如果cx不为0则跳转到sum_loop处继续循环2. 调试程序当我们编写好程序之后,我们需要通过“debug”命令来进行调试操作。

在这个过程中,我们需要逐步执行汇编程序中的指令,并且观察寄存器和内存的变化情况,以检查程序是否正确。

3. 运行程序在完成程序的调试之后,我们可以通过汇编器来运行这份程序。

在运行的过程中,我们需要观察程序在计算机内部的执行情况,包括计算结果和输出结果等。

第三部分:实验收获通过这次实验,我们对汇编语言的基本语法和指令有了更深入的了解。

同时,我们也了解了在计算机内部执行程序的原理和过程。

这对于我们深入理解计算机的工作原理以及编写更高效的程序都有着重要的意义。

总之,本次实验为我们提供了一个很好的机会,让我们更深入地了解计算机系统的工作原理,同时也提高了我们的编程能力和实际应用能力。

汇编语言实验指导书

汇编语言实验指导书

汇编语言实验指导书纪平张雷编写安徽工业大学计算机学院二00四年三月目录实验一DEBUG的启动及其基本命令的使用 (2)实验二内存操作数及寻址方法 (6)实验三汇编语言程序的调试与运行 (8)实验四查表程序设计 (10)实验五系统功能调用 (12)实验六循环程序设计 (13)实验七分支程序设计 (15)实验八子程序设计 (18)实验九综合程序设计 (20)附录实验报告 (21)实验一DEBUG的启动及其基本命令的使用一.实验目的:掌握DEBUG 的基本命令及其功能二.实验内容:DEBUG是专门为汇编语言设计的一种调试工具,它通过步进,设置断点等方式为汇编语言程序员提供了非常有效的调试手段。

1、DEBUG程序的启动在DOS提示符下,可键入命令:C>DEBUG[d:][path][文件名][ 参数1][参数2]其中文件名是被调试文件的名称,它须是执行文件(EXE),两个参数是运行被调试文件时所需要的命令参数,在DEBUG程序调入后,出现提示符“-”,此时,可键入所需的DEBUG命令。

在启动DEBUG时,如果输入了文件名,则DEBUG程序把指定文件装入内存。

用户可以通过DEBUG的命令对指定文件进行修改、显示和执行。

如果没有文件名,则是以当前内存的内容工作,或者用命名命令和装入命令把需要的文件装入内存,然后再用DEBUG的命令进行修改、显示和执行。

2、DEBUG的主要命令(1)汇编命令A,格式为:-A[地址]该命令从指定地址开始允许输入汇编语句,把它们汇编成机器代码相继存放在从指定地址开始的存储器中。

(2)反汇编命令U,有两种格式:1)-U[地址]该命令从指定地址开始,反汇编32个字节,若地址省略,则从上一个U命令的最后一条指令的下一个单元开始显示32个字节。

2)-U范围该命令对指定范围的内存单元进行反汇编,例如:-U 04BA:0100 0108或–U 04BA:0100 L9此二命令是等效的。

合肥工业大学程序设计基础实验报告

合肥工业大学程序设计基础实验报告

合肥工业大学程序设计基础实验报告姓名:班级: 计算机科学与技术学号:合肥工业大学计算机与信息学院1实验七类与对象1(实验目的要求(1) 掌握类的定义和实现。

(2) 掌握对象创建及使用的基本方法。

2(实验设备硬件环境:微型计算机软件环境:操作系统: Windows语言环境: Visual C++3(预习要求学习教材有关类的定义与实现、对象创建与应用等有关内容,对实验基本要求应在上机实验前仔细阅读,程序应事先编制完成,上机时录入调试,同时还应设计相应的测试用例集,检查程序的正确性、可靠性、完备性和容错能力。

4(实验内容(1)下面程序定义了一个以hours, minutes和seconds作为数据成员的Time 类。

设计了成员函数将两个Time对象相加(即时间相加),并进行相应的检查,查看增加的分钟数及秒数是否大于59。

如果秒数大于59,则分钟数向前递增1。

类似地,如果分钟数大于59,则小时数向前增1。

#include <iostream>using namespace std;class Time{private:int hours, minutes, seconds;public:void get_time(){2cin>>hours>>minutes>>seconds;}void display_time(){cout<<hours<<':'<<minutes<<':'<<seconds<<endl;}void add_time(Time & t1, Time & t2){hours=t1.hours+t2.hours;minutes=t1.minutes+t2.minutes;seconds=t1.seconds+t2.seconds;if(seconds>=60){seconds-=60;minutes++;}if(minutes>=60){minutes-=60;hours++;}}};void main(){Time one, two, three;cout<<"\nEnter the first time(hours minutes seconds):"; one.get_time();cout<<"\nEnter the second time(hours minutes seconds):"; two.get_time();three.add_time(one,two);cout<<"the result is:"<<endl;three.display_time();}[基本要求], 上机录入、调试上面程序。

合肥工业大学编译原理实验

合肥工业大学编译原理实验

宣城校区实验报告课程名称编译原理专业班级计算机0001班学生姓名及学号赵保飞 2015216768 指导教师李芒宏实验地点计算机中心楼第四机房2017 ~2018 学年第一学期《编译原理》课程实验报告实验名称词法分析设计姓名赵保飞系院专业计算机科学与技术班级计算机01班学号2015216768实验日期2017.10.18 指导教师李芒宏成绩一、实验目的和要求通过本实验的编程实践,使学生了解词法分析的任务,掌握词法分析程序设计的原理和构造方法,使学生对编译的基本概念、原理和方法有完整的和清楚的理解,并能正确地、熟练地运用。

二、实验原理(1)实验数据结构说明K[]String数组-关键字表;s[]char数组—分界符;m[]char数组—算术运算符;r[]String数组—关系运算符;ArrayList型String数组ci—常数;ArrayList型String数组id—标识符(2)实验算法描述(3)算法流程图三、源程序代码和测试结果package lexicalAnalysis;import java.util.*;import java.io.*;public class lexicalAnalysis{static Stringk[]={"for","main","if","while","void","public","static","printf","scanf","asm","do","return","typedef","auto","double","break", "short","using","default","long"};//关键字static char s[]={',',';','(',')','[',']','{','}'};//2分界符static char m[]={'+','-','*','/'};//3算术运算符static String r[]={"<","<=","=",">",">=","<>"};//4关系运算符ArrayList<String>ci=new ArrayList<String>();//5常数ArrayList<String>id=new ArrayList<String>();//6标识符String tempToken="";//临时存放组成一个“词”单位串int pint,row=1,line=1;//当前指针指示,行数,列数char ch;//存放最新读入源程序字符String instring;//存放输入de源程序代码public static void main(String[]args)throws Exception{// TODO Auto-generated method stublexicalAnalysis one=new lexicalAnalysis();System.out.println("单词"+"\t二元序列"+"\t类型"+"\t位置(行,列)");one.readtext();}boolean isdigit(char c){//判断所读字符是否为数字,是则返回ture,否则返回falseif(c>=48&&c<=57)return true;elsereturn false;}boolean isletter(char c){//判断所读字符是否为字母,是则返回true,否则返回falseif((c>64&&c<91)||(c>96&&c<123))return true;elsereturn false;}boolean isline(char c){//判断字符c是否是下划线"_"if(c=='_')return true;elsereturn false;}boolean remove(){//用于在判断关系运算符时,判断是否是要再读一个字符char b=instring.charAt(pint+1);//string类charAt() 方法用于返回指定索引处的字符。

汇编实验报告(安工大陆勤老师)

汇编实验报告(安工大陆勤老师)

汇编语言实验报告学院:计算机学院姓名:学号:班级:实验一汇编运行环境及方法、简单程序设计1.程序说明:本程序用来比较两个字符串string1和string2所含的字符是否相同。

若相同则显示‘Match’,否则显示‘Nomatch’。

在程序的数据段先定义两个字符串string1和string2,再定义两个字符串mess1和mess2,分别代表‘Match’和‘Nomatch’。

再代码段比较字符串string1和string2,通过比较判断是否相同。

若相同则显示‘Match’,否则显示‘Nomatch’。

2.程序代码(比较两字符串):;PROGRAM TITLE GOES HERE--Compare string;************************************************************************** datarea segment ;define data segmentstring1 db 'Move the cursor backward.'string2 db 'Move the cursor backward.';mess1 db 'Match.',13,10,'$'mess2 db 'No match!',13,10,'$'datarea ends;************************************************************************** prognam segment ;define code segment;--------------------------------------------------------------------------main proc farassume cs:prognam,ds:datarea,es:datareastart: ;starting execution address;set up stack for returnpush ds ;save old data segmentsub ax,ax ;put zero in AXpush ax ;save it on stack;set DS register to current data segmentmov ax,datarea ;datarea segment addrmov ds,ax ;into DS registermov es,ax ;into ES register;MAIN PART OF PROGRAM GOES HERElea si,string1lea di,string2cldmov cx,25repz cmpsbjz matchlea dx,mess2jmp short dispmatch:lea dx,mess1disp:mov ah,09int 21hret ;return to DOSmain endp ;end of main part of program;-------------------------------------------------------------------------prognam ends ;end of code segment;************************************************************************* end start ;end assembly3.截图:该程序是用来判断两字符串string1和string2是否相同,相同则显示match 。

程序设计基础实验报告

程序设计基础实验报告

实验一 面向过程的简单程序设计(1)1111+++x x#include<iostream.h> #include<math.h> void main() {int x; double y; cin>>x;y=sqrt(1+1/(x+1/(x+1))); cout<<y<<endl; }(2) log10(1+21x +)#include<iostream.h> #include<math.h> void main() {int x; double y; cin>>x;y=log10(1+sqrt(1+x^2)); cout<<y<<endl; }<3>阅读下列程序,写出(由指定的输入)所产生的运行结果,并指出其功能。

#include <iostream.h> // 由用户输入一个整形数字n ,输出n+1. void main() {int n; cin >> n ;if ( n ++ < 10 ) //判断用户输入的n 是否<10cout << n << endl ; //若n <10,输出n ,此时的n 已经加一elsecout << n -- << endl ; //若n>=10,输出n ,此时的n 已经加一} //输出n 后,n 再自减一若输入10,则输出11.<3> 对任意输入的四位整数,分别求出其各位数字,并按从后到前的顺序依次输出。

例如,输入为1234时,输出结果为4,3,2,1。

#include "iostream.h" void main() { int a,b,c,d,x; cin>>x; a=x/1000;b=x/100-x/1000*10;c=x/10-x/100*10;d=x-x/10*10;cout<<d<<” ”<<c <<” ”<<b <<” ”<<a<<endl;}实验二 控制结构程序设计阅读下列程序,写出(由指定的输入)所产生的运行结果,并指出其功能。

汇编程序设计实验报告--完整段定义程序实现

汇编程序设计实验报告--完整段定义程序实现

《汇编语言程序设计》实验报告实验四完整段定义程序的实现实验目的1、掌握完整段格式定义的程序设计方法;2、掌握伪指令:SEGMENT、ENDS、ASSUME、END、OFFSET、DUP;3、掌握汇编语言程序中指名程序入口的方法;4、了解用INT 21H 的4C号功能调用返回系统的方法;5、掌握用MASM、LINK工具进行汇编和链接的过程。

实验内容要求程序中实现对键盘输入的字符作如下处理:●如果输入的是小写字母则转换成对应的大写字母并显示在屏幕上;●如果输入的是大写字母则转换成对应的小写字母并显示在屏幕上;●如果输入的是键盘上的Esc键则退出程序执行;●按其它任意可显示键,则不作处理,直接显示输出。

实验步骤1、编辑下列程序:DATA SEGMENT ;数据段定义MESSAGE DB 'Please input your key!',0DH,0AH,'$' DATA ENDSSTACK SEGMENT PARA STACK 'STACK' ;堆栈段定义DB 50 DUP(?)STACK ENDSCODE SEGMENT ;代码段ASSUME CS:CODE,DS:DATA,SS:STACK ;分配段寄存器START: MOV AX,DATAMOV DS,AXMOV DX,OFFSET MESSAGEMOV AH,9INT 21H ;显示提示信息AGAIN: MOV AH,1INT 21H ;读入一个键盘按键CMP AL,1BH ;按的是ESC键(ASCII码为1BH)则退出程序JE EXITCMP AL,61HJB NEXTCMP AL,7AHJA NEXTSUB AL,20H ;ASCII码在61H和7AH之间(小写字母)则转换为大写字母JMP DISPNEXT: CMP AL,41HJB DISPCMP AL,5AHJA DISPADD AL,20H ;ASCII码在41H和5AH之间(大写字母)则转换为小写字母DISP: MOV DL,ALMOV AH,2INT 21H ;显示当前字符JMP AGAIN ;循环EXIT: MOV AH,4CH ;结束程序INT 21HCODE ENDSEND START ;指定START标号为程序入口地址图 4-1 键入代码2、把上述程序保存为ASM源文件,利用MASM根据对源文件进行汇编,产生.OBJ文件,若汇编时提示有错,编辑工具修改源程序后重新汇编,直至通过。

合肥工业大学编译原理实验报告(完整代码版)

合肥工业大学编译原理实验报告(完整代码版)

计算机与信息学院编译原理实验报告专业班级信息安全13-1班学生姓名及学号马骏 2013211869 课程教学班号任课教师李宏芒实验指导教师李宏芒实验地点实验楼机房2015 ~2016 学年第二学期实验1 词法分析设计一、实验目的通过本实验的编程实践,使学生了解词法分析的任务,掌握词法分析程序设计的原理和构造方法,使学生对编译的基本概念、原理和方法有完整的和清楚的理解,并能正确地、熟练地运用二、实验要求1、编程时注意编程风格:空行的使用、注释的使用、缩进的使用等。

2、将标识符填写的相应符号表须提供给编译程序的以后各阶段使用。

3、根据测试数据进行测试。

测试实例应包括以下三个部分:全部合法的输入。

各种组合的非法输入。

由记号组成的句子。

4、词法分析程序设计要求输出形式:例:输入VC++语言的实例程序:If i=0 then n++;a﹤= 3b %);输出形式为:单词二元序列类型位置(行,列)(单词种别,单词属性)for (1,for ) 关键字(1,1)i ( 6,i ) 标识符(1,2)= ( 4,= ) 关系运算符(1,3)120 ( 5,0 ) 常数(1,4)then ( 1,then) 关键字(1,5)n (6,n ) 标识符(1,6)++ Error Error (1,7);( 2, ; ) 分界符(1,8)a (6,a ) 标识符(2,1)﹤= (4,<= ) 关系运算符(2,2)3b Error Error (2,4)% Error Error (2,4)) ( 2, ) ) 分界符(2,5);( 2, ; ) 分界符(2,6)三、实验内容用VC++/VB/JA V A 语言实现对 C 语言子集的源程序进行词法分析。

通过输入源程序从左到右对字符串进行扫描和分解,依次输出各个单词的内部编码及单词符号自身值;若遇到错误则显示“Error”,然后跳过错误部分继续显示;同时进行标识符登记符号表的管理。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

合肥工业大学计算机与信息学院实验报告课程:汇编语言程序设计专业班级:信息安全13-1学号:2013211869姓名:马骏实验一Debug程序的使用一.实验目的1、熟悉DEBUG程序中的命令,学会在DEBUG下调试运行汇编语言源程序。

2、掌握8086/8088的寻址方式及多字节数据的处理方法。

二.实验内容1、利用DEBUG程序中的“E”命令,将两个多字节数“003F1AE7H”和“006BE5C4H”分别送入起始地址为DS:0200H和DS:0204H两个单元中。

2、分别用直接寻址方式和寄存器间接寻址方式编写程序段,实现将DS:0200H单元和DS:0204H单元中的数据相加,并将运算结果存放在DS:0208H单元中。

要求:本次实验的内容均在DEBUG下完成,实现数据的装入、修改、显示;汇编语言程序段的编辑、汇编和反汇编;程序的运行和结果检查。

三.实验过程和程序实验将”12345678H”和”FEDCBA98H”分别送入起始地址为DS:200H和DS:204H 的两个单元中。

还包含两个附加题,一是从DS:0000H 开始的5个16 位带符号数分别记为x,y,z,v,w,E命令初始化为:540,1,-1,1080,0, 试求w=(v-(x*y+z-540))/x,二是统计bx中1的个数四.实验结果(包括必要的截图)将两个多字节数“003F1AE7H”和“006BE5C4H”分别送入起始地址为DS:0200H 两个单元中。

DS:0204H和直接寻址方式实现数据相加寄存器间接寻址实现数据相加.附加题一:从DS:0000H开始的 5 个16 位带符号数分别记为x,y,z,v,w,用E命令初始化为:540,1,-1,1080,0, 试求w=(v-(x*y+z-540))/x附加题二:完成BX中1 的个数的统计。

五.实验体会通过本次实验,了解了使用debug的各种指令。

同时在debug下进行编程,比较麻烦。

由于是第一次编写汇编程序,还是需要多练习。

实验二汇编语言程序设计(顺序、循环)一.实验目的1、掌握顺序和循环程序结构和设计方法;2、熟悉在PC机上建立、汇编、连接、调试和运行8086/8088汇编语言程序的过程。

二.实验内容1、X、Y、Z、V均为字变量,在X、Y、Z、V字单元中存放是16位带符号数。

试编写汇编语言程序完成以下功能:①计算表达式值(V–(X*Y+Z-720))/X;②将上述表达式运算结果整数放在SUM1单元,余数放在SUM2单元。

2、求一个班50名学生成绩的平均值(附加题:最大值和最小值,并将结果显示出来)3、从键盘读入一个字符串,以Enter结束,字符串不超过50个字符,并打印该字符串(附加题:查找中间是否有‘asm'子串。

如果有,输出‘Yes';否则,输出‘No')。

三.实验过程和程序1、计算表达式值(V–(X*Y+Z-720))/X;data segmentx dw 021chy dw 0001hz dw 0ffffhv dw 0438hw dw 0000hsum1 dw ?sum2 dw ?data endsassume cs:code,ds:datacode segmentstart:mov ax,datamov ds,axMOV AX,xIMUL Y ; x*yCX, AXMOVMOV BX, DXMOV AX, ZCWDADD CX, AXADC BX, DX ; x*y+zSUB CX, 540 ;?SBB BX, 0 ; x*y+z-540MOV AX, VCWDSUB AX, CXSBB DX, BX ; v-(x*y+z-540)IDIV X ; (v-(x*y+z-540))/x mov sum1,axmov sum2,dxmov ax,4c00hint 21hcode endsend start2、求一个班50名学生成绩的平均值(附加题:最大值和最小值,并将结果显示出来)data segmentdb 7,49 dup(6)max db ?min db ?result db 0data endsassume cs:code,ds:datacode segmentstart: mov ax,datamov ds,axmov ax,0mov cx,50mov di,0again:mov bx,0mov bl,[di]add di,1add ax,bxloop againmov bl,50div blmov result,almov di,50max2:sub di,1mov cx,50mov si,0mov al,[di]max1: cmp al,[si]jb max2add si,1loop max1mov max,almov di,50min2:sub di,1mov cx,50mov si,0mov al,[di]min1: cmp al,[si]jnb min2add si,1loop min1mov min,almov ax,4c00hint 21hcode endsend start3、从键盘读入一个字符串,以Enter结束,字符串不超过50个字符,并打印该字符串(附加题:查找中间是否有‘asm'子串。

如果有,输出‘Yes';否则,输出‘No')。

data segmentdata2 db 50,?,50 dup('$')string db 'yes$'string1 db 'no$'data endsassume cs:code,ds:datacode segmentstart: mov ax,datamov ds,axmov ah,0ahmov dx,offset data2int 21hmov ah,2hmov dl,0ahint 21hmov ah,2hmov dl,0dhint 21hmov dx,offset data2+2mov ah,09hint 21hmov ah,2hmov dl,0ahint 21hmov ah,2hmov dl,0dhint 21hmov al,0hmov cx,47mov di,0again: mov al,[di+2]cmp al,61hjnz nextmov al,[di+3]cmp al,73hjnz nextmov al,[di+4]cmp al,6dhjnz nextjmp yesnext: add di,1loop againmov dx,offset string1mov ah,09hint 21hjmp endcodeyes:mov dx,offset stringmov ah,09hint 21hendcode: mov ax,4c00h int 21hcode endsend start四.实验结果(包括必要的截图)1、计算表达式值(V–(X*Y+Z-720))/X;2、求一个班50名学生成绩的平均值(附加题:最大值和最小值,并将结果显示出来)0030地址为平均值的商0032地址为最大值0034地址为最小值3、从键盘读入一个字符串,以Enter结束,字符串不超过50个字符,并打印该字符串(附加题:查找中间是否有‘asm'子串。

如果有,输出‘Yes';否则,输出‘No')。

五.实验体会通过此次试验,了解了符号扩展指令的使用。

第二程序中,以及在输出时,输入的字符串末尾要注意加结束标志'$',还有在输出字符串前要先输出个回车换行,否则回车后看不到输出结果。

实验三汇编语言子程序设计(分支、子程序)一.实验目的1、掌握分支和子程序结构和设计方法;2、熟悉在PC机上建立、汇编、连接、调试和运行8086/8088汇编语言程序的过程。

3、通过汇编语言了解高级语言的参数传递等知识。

二.实验内容1、BL中的只有一位为1。

编写程序测试,并输出提示信息“The X Bit is 1”,要求:地址表和转移表。

2. 编写一个子程序计算z=f(x,y)=x*y+x-y(x,y,z有符号数内存数)。

要求通过堆栈(寄存器、内存)传送所有参数。

3. 实践C?Asm的转换过程。

三.实验过程和程序1、BL中的只有一位为1。

编写程序测试,并输出提示信息“The X Bit is 1”,要求:地址表和转移表。

;bl have one 1 cout<<The X Bit is 1data segmentaddres dw fun8,fun7,fun6,fun5,fun4,fun3,fun2,fun1string8 db 'The 8 Bit is 1$'string7 db 'The 7 Bit is 1$'string6 db 'The 6 Bit is 1$'string5 db 'The 5 Bit is 1$'string4 db 'The 4 Bit is 1$'string3 db 'The 3 Bit is 1$'string2 db 'The 2 Bit is 1$'string1 db 'The 1 Bit is 1$'data endsassume ds:data,cs:code code segmentstart:mov ax,data mov ds,axmov bl,10hmov ax,0000hmov cx,8math: shl bl,1jc rightjmp nextright:mov dl,02hmul dlmov bp,axjmp addres[bp] next: inc axloop mathfun8:mov dx,offset string8 jmp coutfun7:mov dx,offset string7 jmp coutfun6:mov dx,offset string6 jmp coutfun5:mov dx,offset string5 jmp coutfun4:mov dx,offset string4 jmp coutfun3:mov dx,offset string3 jmp coutfun2:mov dx,offset string2 jmp coutfun1:mov dx,offset string1 jmp coutcout:mov ah,09hint 21hmov ah,4chint 21hcode endsend start2. 编写一个子程序计算z=f(x,y)=x*y+x-y(x,y,z有符号数内存数)。

相关文档
最新文档