合肥工业大学汇编程序设计实验报告完整代码
- 格式:doc
- 大小:239.99 KB
- 文档页数:24
合工大汇编实验报告本文将围绕“合工大汇编实验报告”展开阐述,按照实验的步骤分为以下几个部分进行讲解。
第一部分:实验目的和实验环境本次实验的目的是让我们熟悉汇编语言的基本语法和指令,了解在计算机内部运行程序的原理。
实验环境为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”,然后跳过错误部分继续显示;同时进行标识符登记符号表的管理。
《程序设计艺术与方法》课程实验报告#include<list>#include<algorithm>using namespace std;bool comper(int a, int b){return (a > b);}//vector练习void OUTV(vector<int> v){vector<int>::iterator it = v.begin();for (; it != v.end(); ++it){cout << (*it) << " ";}cout << endl;}void FindV(vector<int> &exp){int x;vector<int>::iterator L;cout << "请输入你要查找的数:" << endl;cin >> x;L = find(exp.begin(), exp.end(), x);if (L != exp.end()){cout << "查找成功!" << endl;cout << "该数为:" << *L << endl;}else{cout << "无该数!" << endl;exp.push_back(x);cout << "输出结果:";OUTV(exp);}}void SortV(vector<int> &exp){cout << "升序:" << endl;sort(exp.begin(), exp.end());OUTV(exp);cout << "降序" << endl;sort(exp.begin(), exp.end(),comper);OUTV(exp);}void DeldetV(vector<int> &exp){cout << "删除最后一个元素" << endl;exp.pop_back();OUTV(exp);}void V(){vector<int> exp1;srand((int)time(0));cout << "vector练习:" << endl;for (int i = 0; i < 10; i++)exp1.push_back(rand());//插入10个随机数OUTV(exp1);exp1.insert(exp1.begin(), rand());OUTV(exp1);FindV(exp1);SortV(exp1);DeldetV(exp1);cout << "最大值:" << exp1[0] << endl;cout << "最小值:" << exp1[exp1.size()-1] << endl;exp1.clear();//清空迭代器}//List练习void OUTL(list<int> v){list<int>::iterator it = v.begin();for (; it != v.end(); ++it){cout << (*it) << " ";}cout << endl;}void FindL(list<int> &exp){int x;list<int>::iterator L;cout << "请输入你要查找的数:" << endl;cin >> x;L = find(exp.begin(), exp.end(), x);if (L != exp.end()){cout << "查找成功!" << endl;cout << "该数为:" << *L << endl;}else{cout << "无该数!" << endl;exp.push_back(x);cout << "输出结果:";OUTL(exp);}}void SortL(list<int> &exp){cout << "排序:" << endl;exp.sort();OUTL(exp);}void DeldetL(list<int> &exp){cout << "删除最后一个元素" << endl;exp.pop_back();OUTL(exp);}void L(){list<int> exp2;srand((int)time(0));cout << "List练习:" << endl;for (int i = 0; i < 10; i++)exp2.push_back(rand());//插入10个随机数OUTL(exp2);exp2.push_front(rand());OUTL(exp2);FindL(exp2);SortL(exp2);DeldetL(exp2);//清空迭代器exp2.clear();}int_tmain(int argc, _TCHAR* argv[]){V();L();system("pause");。
合肥工业大学考试科目代码表统考政治101 基础英语713 第四纪地质学410 “信号与系统”和“数字信息处理”432 素描人物写生502单考政治111 中外美术史及理论714 生物化学(二)411 半导体物理及器件物理433 色彩人生写生503MBA联考综合能力199 艺术设计史及理论715 理论力学412 “电动力学”和“信号与系统”434 城市规划设计与表现504 数学分析716 材料力学413 自动控制原理435 建筑设计与表现(一)505 统考英语201 单考数学717 机械原理414 电子技术(包括模电、数电)436 建筑设计与表现(二)506 统考俄语202 有机化学(一)718 汽车理论415 “数据结构”和“微机原理”437 建筑构造设计507统考日语203 地球科学基础719 生产计划与控制416 建筑构造438单考英语211 细胞生物学720 过程装备设计基础417 结构力学439二外德语212 遗传学721 造型设计基础418 水力学440二外法语213 建筑历史与理论722 工程光学419 工程热力学(二)441二外日语214 城市规划原理723 误差理论与数据处理420 测绘科学基础442二外俄语215 建筑物理724 传感器421 物理化学443MBA联考英语299 光学(包含应用光学和物理光学)422 生物化学(一)444自然辩证法原理401 固体物理学423 工程地质学445数学一301 经济学原理402 无机材料科学基础424 交通工程学446数学二302 科学社会主义403 金属学原理425 环境科学概论447数学三303 思想政治教育原理及方法论404材料成型原理426 有机化学(二)448数学四304 英语专业综合考试(一)405 工程热力学(一)427 微生物学449英语专业综合考试(二)406 真空技术428 运筹与管理450教育学专业基础综合311 高等代数407 电路429 企业管理451哲学711 高分子化学408 电力系统分析430心理学712 岩浆岩石学409 电力电子技术431 艺术设计与表现501。
《单片机原理与程序设计》课程实验报告姓名:**学号: **********班级:通信工程17-1班指导老师:王昕,吴从中目录实验一系统认识 (2)(一)实验目的 (2)(二)实验内容及要求 (2)(三)实验过程和结果 (2)实验二查表程序设计 (11)(一)、实验目的 (11)(二)实验内容及要求 (11)(三)程序框图 (11)(四)设计说明 (12)(五)运行结果 (13)(六)心得体会 (13)实验三十进制数1-100累加运算 (14)(一)实验目的 (14)(二)程序设计实验报告要求 (14)(三)程序框图 (14)(四)设计说明 (15)(五)程序运行结果 (17)(六)心得 (17)实验四数据交换程序设计 (18)(一)实验目的 (18)(二)程序设计实验报告要求 (18)(三)程序框图 (18)(四)设计说明 (19)(五)运行结果 (20)(六)心得体会 (21)实验五定时器应用实验 (22)(一)实验目的 (22)(二)实验程序框图 (22)(三)实验内容及步骤。
(23)(四)硬件仿真结果及程序分析 (25)(五)心得体会 (25)实验六并行口应用—模拟广告灯实验 (26)(一)实验目的 (26)(二)实验程序框图 (26)(三)实验内容及步骤 (27)(四)试验箱仿真结果 (32)(五)实验心得体会 (34)实验一系统认识(一)实验目的1、学习及掌握在Keil C51开发平台上建立、汇编、连接、调试及运行汇编程序的方法和步骤。
2、学习及掌握μVision2系统项目窗口、调试窗口和存储器窗口等常用平台的操作。
3、学习及掌握MCS-51汇编源程序的书写格式和汇编语言的语法规则。
(二)实验内容及要求1、以《单片机原理及应用实验教程》(第2版)“第2章实验1”中示例汇编语言源程序为蓝本,学习及掌握在μVision2平台上开发单片机应用程序的一般步骤。
2、学习μVision2平台项目窗口、调试窗口和存储器窗口等常用平台的使用。
计算机与信息学院信息隐藏实验报告专业班级信息安全13-1班学生姓名及学号马骏 2013211869 课程教学班号任课教师郑淑丽实验指导教师郑淑丽实验地点20 ~20 学年第学期实验1 BMP位图信息隐藏一、实验目的学习BMP格式文件,并编程实现对位图文件信息隐藏二、实验要求将TXT文件嵌入BMP 文件中三、问题描述1、BMP位图文件的格式?2、有哪几种方法隐藏信息,分别采用什么样的数据结构3、随机选取如何避免“碰撞”的出现四、算法思想1、BMP位图文件格式0000h~0001h 2字节-------------------------bm的ASC码0002h~0005h 4字节-------------------------文件大小102718字节0006h~0009h 4字节-------------------------全为0000Ah~000Dh 4字节-------------------------偏移量118字节000Eh~0011h 4字节-------------------------位图信息块大小40字节0012h~0015h 4字节-------------------------宽4500016h~0019h 4字节-------------------------高450001Ah~001Bh 2字节-------------------------恒为01h 00h001Ch~001Dh 2字节-------------------------颜色所占二进制位数值04h 00h=4 16色位图001Eh~0021h 4字节-------------------------压缩方式=0无压缩0022h~0025h 4字节-------------------------图像数据区大小102600字节0026h~0029h 4字节-------------------------水平每米多少像素39个002Ah~002Dh 4字节-------------------------垂直每米多少像素39个002Eh~0031h 4字节-------------------------图像所用颜色数=00032h~0035h 4字节-------------------------重要颜色数=00036h~0076h 64字节-------------------------颜色表0077h~1913Dh 102600字节-------------------------图像数据区2、(1)、在图片图像数据区的一个连续的数据区采用整字节替换的方法(2)、在图像数据的最后增加文本信息的字节(3)、顺序选取每个文本信息字节的每一位替换图像数据区的一个连续的数据区每个字节的最后一位。
实验一、认识Tddebug集成操作软件 0实验二、I/O程序设计 (4)实验三、代码转换程序设计 (8)实验四、循环程序设计实验报告 (11)实验一、认识Tddebug集成操作软件实验题目:认识Tddebug集成操作软件实验目的:1.熟悉汇编程序的开发过程。
2.认识Tddebug集成操作软件。
3.掌握在Tddebug集成环境中编辑、编译、连接汇编语言程序方法。
4.掌握INT 21H软件中断来调用DOS内部子程序的方法实验要求:PC微机一台实验主要步骤:1.运行Tddebug软件,选择Edit菜单编写实验程序2.使用Compile菜单中的Compile和Link对实验程序进行汇编、连接,生成执行文件。
3.使用Rmrun菜单中的Run运行程序,观察运行结果。
4.使用Rmrun菜单中的Debug调试程序,查看程序段、数据段、附加段装入内存后的分配情况。
单步执行数据传送指令后,观察各寄存器及数据区的内容。
过程如下:5.按F7单步执行,在代码区中有一个三角,表示正在执行的指令。
每一条指令的执行一定会使目标寄存器和状态寄存器发生变化,从相关窗口看结果。
6.检查内存数据区的内容,关键是找出用户程序的数据段和附加段:7.方法1:在CPU窗口按Tab键使内存数据显示区成为活动区,按Ctrl+G键,输入:“DS或ES寄存器的值:偏移地址”,即可显示用户指定的数据区8.方法2:选择菜单View| Dump,弹出内存数据显示窗口。
9.3) 查看执行结果:按Alt+F5,切换到用户窗口。
10.更改数据区中的数据,考察、调试程序的正确性。
程序清单:DDATA SEGMENTMSR DB "HELLO,WORLD!$"LEN EQU $- MSRDDATA ENDSEXDA SEGMENTMSD DB LEN DUP(?)EXDA ENDSMYSTACK SEGMENT STACKDW 20 DUP(?)MYSTACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DDA TA,ES:EXDASTART: MOV AX,DDATAMOV DS,AXMOV AX,EXDAMOV ES,AXMOV SI,OFFSET MSRMOV DI,OFFSET MSDMOV CX,LENMOV BX,0NEXT: MOV AL,MSR[BX] ;开始传输数据MOV ES:MSD[BX],ALINC BXLOOP NEXTPUSH ESPOP DSMOV DX,OFFSET MSDMOV AH,9INT 21HMOV AX,4C00HINT 21HCODE ENDSEND START实验结果:1、编译结果:2、单步执行结果:≡File Edit View Run Breakpoints Data Options Window Help READY┌─────Module: noname File: d:\456789\noname.asm 24────────────────────1────────┐│╔═[■]═CPU P?ntium Pro════════════════ds:0003 = 4C╤═══════3═[↑][↓]═╗││•║#noname#next ▲ax 144C │c=0║││•║cs:0016►8A870000 ♦ NEXT: MO V AL,MSR[BX] ■bx 0003 │z=0║││•║cs:001A 2688870000 ♦ MOV ES:MSD[BX],AL ▒ cx 000A │s=0║││•║cs:001F 43 ♦ INC BX ▒ dx 0000 │o=0║││•║cs:0020 E2F4 ♦ LOOP NEXT ▒ si 0000 │p=1║││•║cs:0022 06 ♦ PUSH ES ▒ di 0000 │a=0║││•║cs:0023 1F ♦ POP DS ▒ bp 0000 │i=1║││•║cs:0024 BA0000 ♦ MOV DX,OFFSET MSD ▒ sp 0028 │d=0║││►║cs:0027 B409 ♦ MOV AH,9 ▒ ds 1418 │║││•║cs:0029 CD21 ♦ INT 21H ▒ es 1419 │║││•║cs:002B B8004C ♦ MOV AX,4C00H ▒ ss 141A │║││•║cs:002E CD21 ♦ INT 21H ▒ cs 141D │║││•║cs:0030 FB sti ▼ip 0016 │║││•╟◄■▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒►┤│║││•║1408:0000 CD 20 FB 9F 00 9A F0 FE ═√ƒÜ≡■││║││•║1408:0008 1D F0 32 0B D2 10 0F 07 ↔≡2♂╥►☼•├────────────┴───╢││•║1408:0010 28 0E 56 01 16 04 0B 0E (♫V☺▬♦♂♫│ss:002A 0000 ║│└──║1408:0018 01 01 01 00 02 FF FF FF ☺☺☺ ☻│ss:0028►0000 ║─────────┘┌──╚════════════════════════════════════════════════╧═══════════════─┘2────────┐││└──────────────────────────────────────────────────────────────────────────────┘Alt: F2-Bkpt at F3-Close F4-Back F5-User F6-Undo F7-Instr F8-Rtn F9-To F10-SMenu实验二、I/O程序设计实验题目:I/O程序设计实验目的:1.理解软中断的调用方法及中断过程。
实验报告实验名称汇编语言程序设计||专业班级:信息安全学号:姓名:实验一汇编语言上机过程和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 文件名。
宣城校区实验报告课程名称编译原理专业班级计算机0001班学生姓名及学号赵保飞 68指导教师李芒宏实验地点计算机中心楼第四机房2017 ~2018 学年第一学期《编译原理》课程实验报告实验名称词法分析设计姓名赵保飞系院专业计算机科学与技术班级计算机01班学号68实验日期指导教师李芒宏成绩一、实验目的和要求通过本实验的编程实践,使学生了解词法分析的任务,掌握词法分析程序设计的原理和构造方法,使学生对编译的基本概念、原理和方法有完整的和清楚的理解,并能正确地、熟练地运用。
二、实验原理(1)实验数据结构说明K[]String数组-关键字表;s[]char数组—分界符;m[]char数组—算术运算符;r[]String数组—关系运算符;ArrayList型String数组ci—常数;ArrayList型String数组id—标识符(2)实验算法描述(3)算法流程图三、源程序代码和测试结果package lexicalAnalysis;import.*;import.*;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"};ength()==1){quals(b))){display(4,r[i],' ');ength()==2){quals(a))){display(4,r[i],' ');;import.*;import WinGrid extends JFrame{GridLayout grid;JPanel chessboard;JTextField text;JTextArea textShow;JButton button;ReaderListen listener;WinGrid(){init();setVisible(true);setDefaultCloseOperation;}void init(){setLayout(new FlowLayout());text=new JTextField(10);setBounds(466,166,500,400);button=new JButton("读取");textShow=new JTextArea(9,30);listener=new ReaderListen();(text);(textShow);(listener);(listener);add(text);add(button);add(new JScrollPane(textShow));}}class ReaderListen implements ActionListener{JTextField text;JTextArea textShow;LL one=new LL();String s;String temp1[][]=new String[18][6];public void setJTextField(JTextField text){=text;}public void setJTextArea(JTextArea textShow){=textShow;}public String S(){String t=();return t;}@Overridepublic void actionPerformed(ActionEvent e){try{String s=()+"#";(s+"\n");("步骤"+"\t"+"分析栈"+"\t"+"剩余输入串"+"\t"+"所用产生式"+"\t"+"动作"+"\n");(s,temp1);for(int i=0;i<18;i++){for(int k=0;k<5;k++){(temp1[i][k]+"\t");}("\n");}}catch(Exception e2){();}}}public class exp3{public static void main(String[]args){;import.*;public class LL{char Vn[]={'E','T','G','F','S'};harAt(0);int k;if(vtNum(Gr[i].charAt(j))!=-1){harAt(j)!='ε'){harAt(j)不为ε时将s加到M[vn(u)][vt(Gr[i].charAt(j))]中M[vnNum(u)][vtNum(Gr[i].charAt(j))]=s;}else{harAt(j)为ε,将属于u的follow集的元素b的位置用s加到M[vn(u)][vt(b)]中if(FOLLOW[vnNum(u)][k]){M[vnNum(u)][k]=s;}}}}else{harAt(j)为非终结符for(k=0;k<;k++){harAt(j)的first集时,将s加到M[vn(u)][vt(a)]中if(FIRST[vnNum(Gr[i].charAt(j))][k]){M[vnNum(u)][k]=s;}}if(FIRST[vnNum(Gr[i].charAt(j))][vtNum('ε')]){harAt(j)的first集时,将属于u的follow集的b将s加到M[vn(u)][vt(b)]中if(j==m-1){for(k=0;k<;k++){if(FOLLOW[vnNum(u)][k])M[vnNum(u)][k]=s;}}else{j=j+1;MM(j,i,s,m);}}}}void buildM(){ength()){m=or(j,Gr[i]);if(m==-1){m=Gr[i].length();}s=Gr[i].substring(j,m);oString());}tempp[k][1]=temp0_string;tempp[k][2]=(i); tempp[k][3]=rule; tempp[k][4]=();v=();action="pop";if(vnNum(v)!=-1){left = 'E';strcpy(s_have[1].sright, "E+T");left = 'E';strcpy(s_have[2].sright, "T");left = 'T';strcpy(s_have[3].sright, "T*F");left = 'T';strcpy(s_have[4].sright, "F");left = 'F';strcpy(s_have[5].sright, "(E)");left = 'F';strcpy(s_have[6].sright, "i");ove[0] = 5;action[0].move[3] = 4;action[1].move[1] = 6;action[2].change[1] = 2;action[2].move[2] = 7;action[2].change[4] = 2;action[2].change[5] = 2;action[3].change[1] = 4;action[3].change[2] = 4;action[3].change[4] = 4;action[3].change[5] = 4;action[4].move[1] = 5;action[4].move[3] = 4;action[5].change[1] = 6;action[5].change[2] = 6;action[5].change[4] = 6;action[5].change[5] = 6;action[6].move[0] = 5;action[6].move[3] = 4;action[7].move[0] = 5;action[7].move[3] = 4;action[8].change[1] = 6;action[8].change[4] = 11;action[9].change[1] = 1;action[9].move[2] = 7;action[9].change[4] = 1;action[9].change[5] = 1;action[10].change[1] = 3;action[10].change[2] = 3;action[10].change[4] = 3;action[10].change[5] = 3;action[11].change[1] = 5;action[11].change[2] = 5;action[11].change[4] = 5;action[11].change[5] = 5;/*存储GOTO表*/go[0].head[0] = 'E';ead[1] = 'T';go[0].head[2] = 'F';go[0].gt[0] = 1;t[1] = 2;go[0].gt[2] = 3;go[4].head[0] = 'E';go[4].head[1] = 'T';go[4].head[2] = 'F';go[4].gt[0] = 8;go[4].gt[1] = 2;go[4].gt[2] = 3;go[6].head[1] = 'T';go[6].head[2] = 'F';go[6].gt[1] = 9;go[6].gt[2] = 3;go[7].head[2] = 'F';go[7].gt[2] = 10;ove[col] != 0){cout << "ACTION[" << sta << "," << symb << "]=" << "S" << action[sta].move[col] << ",PUSH" << action[sta].move[col] << endl;status[++sta_Index] = action[sta].move[col];hange[col] != 0){cout << "r" << action[sta].change[col] << ":" << s_have[action[sta].change[col]].sleft << "->"<< s_have[action[sta].change[col]].sright << "规约,GOTO(" << status[sta_Index - strlen(s_have[action[sta].change[col]].sright)] << ","<< s_have[action[sta].change[col]].sleft << ")=";int i = 0;for (i = 0; i < strlen(s_have[action[sta].change[col]].sright); i++)hange[col]].sleft;hange[col]].sright); i++)ead[i] == symb){status[++sta_Index] = go[sta].gt[i];cout<< go[sta].gt[i] << "PUSH" << endl;return;}}}/*查表*/void start_find(void){int s = status[sta_Index];char exp_first_char = inputstring[instr_top];char sym = symbol[sym_Index];while (IsAccept != 1){s = status[sta_Index];exp_first_char = inputstring[instr_top];sym = symbol[sym_Index];/*输出步骤*/cout << step++<<"\t\t";/*输出当前状态栈*/int i = 0;for (i = 0; i <= sta_Index; i++){cout<<status[i];}cout << "\t\t";/*输出符号栈*/cout << symbol << "\t\t";/*输出剩余的输入串*/i= 0;for (i = 0; i < instr_top; i++)cout<<" ";for (i = instr_top; i <= instr_index; i++){cout<<inputstring[i];}cout<<"\t\t";switch (exp_first_char){case 'i':find_table(s, exp_first_char, 0);break;case '+':find_table(s, exp_first_char, 1);break;case '*':find_table(s, exp_first_char, 2);break;case '(':find_table(s, exp_first_char, 3);break;case ')':find_table(s, exp_first_char, 4);break;case '#':find_table(s, exp_first_char, 5);break;}}}int main(){//cout << "输入要判断的分析串:";string temp;cin >> temp;for (int i = 0;i < ();i++)inputstring[i] = temp[i];inputstring[()] = '#';instr_index = () + 1;Initlize();cout << "步骤\t\t 状态栈\t符号栈\t 输入串\t 动作\n";start_find();return 0;}四、实验评价、收获与体会这一周真是惊险万分,有周二四个小时OS实验,周三网络考试,周三就要验收实验,还有一堆事好像老师都喜欢集体行动把事情堆到一起解决。
《汇编语言程序设计》实验报告学院:班级:姓名:学号:老师:2012年11月22 日目录实验一汇编运行环境及方法、简单程序设计...............................- 3 -一、程序说明··························- 3 -二、调试说明·························- 3 -三:源程序和执行结果:····················- 4 - 实验二用DEBUG编程:使用堆栈段将AX和BX的内容进行交换等·····- 6 - 一:程序说明:························- 6 - 二:调试说明·························- 6 - 三:程序清单和执行结果:···················- 8 - 实验三、存储器块清零和内存块移动·················- 9 -一、程序说明:························- 9 -二:调试说明:························- 9 - 三:源程序代码和执行结果:··················- 10 - 实验四将键盘输入的小写字母用大写字母显示出来··········- 13 -一、程序说明·························- 13 -二、调试说明·························- 13 -三:源程序代码和执行结果:··················- 13 - 实验五:循环程序设计·······················- 15 -一、程序说明·························- 15 -二、调试说明·························- 15 -三:源程序代码和执行结果:··················- 16 - 实验六:分支程序设计·······················- 18 -一、程序说明·························- 18 -三、调试说明·························- 18 -三:源程序代码和执行结果:··················- 19 - 实验七统计不同成绩段学生的人数·················- 21 -一、程序说明·························- 21 -二、调试说明·························- 21 -三、实验心得与体会:·····················- 26 -实验一汇编运行环境及方法、简单程序设计一、程序说明本程序用来比较两个字符串string1和string2所含的字符是否相同。
合肥工业大学计算机与信息学院实验报告课程:汇编语言程序设计专业班级:信息安全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有符号数内存数)。