汇编语言顺序结构实验报告
- 格式:docx
- 大小:264.15 KB
- 文档页数:8
汇编语言指令及伪指令练习的实验报告总结汇编语言指令及伪指令练习的实验报告总结篇一:汇编语言实验报告福建农林大学金山学院课程名称:姓名:系:专业:年级:学号:指导教师:职称: (程序设计类课程) 实验报告汇编语言 201X~201X学年第二学期实验项目列表福建农林大学金山学院实验报告系:专业:年级:姓名:学号:实验课程:汇编语言实验室号:_ _1#605 实验设备号: I3 实验时间:201X.4.25指导教师签字:成绩:实验一汇编程序的汇编及运行1.实验目的和要求 (1)熟悉汇编程序的汇编、连接、执行过程;(2)生成LST文件,查看L ST文件;(3)生成BJ文件,修改语法错误;(4)生成EXE文件;(5)执行程序。
2.实验环境 IBM—PC机及其兼容机;实验的软件环境是:操作系统: DS2.0以上;调试程序: DEBUG.CM;文本编程程序: EDIT.EXE、PS.EXE;宏汇编程序:MA SM.EXE(或AS M .EXE);连接装配程序:L INK .EXE;交叉引用程序:CREF.EXE(可有可无)。
3.实验内容及实验数据记录(1)将数据段输入,取名 1.txt,保存在MASM文件夹下。
生成LST文件,(不必连接、运行)用EDI T查看1.LS T文件。
试回答: DA1,DA2的偏移量分别是多少?C UNT的值为多少?DATA SEGME NT RG 20HNUM1=8 NUM2=NUM1+10H DA1 DB ‘I BM PC’ CUN T EQU $-DA1 DATA END S DA2 DB 0AH, 0DH EN D(2)输入有错误的文件,修改错误语句。
(MASM没有出现错误即可。
不必连接、运行。
)D ATA SEGMEN T VAR1 DB0, 25, DH,300 VAR2DB 12H, A4H, 6BH VAR3 DB ’ABCD EF’ VAR4 D 1H, 5678H VAR5 D 10H DUP(?) D ATA ENDS C DE SEGMENT ASSUME CS: CDE, DE: DATA MV D S, AX LEASI, VAR5 M V BX, FFSE T VAR2 MV[SI], 0ABH MV AX, VA R1+2 MV [B X], [SI] M V VAR5+4,VAR4 MV AH, 4CH INT21H ENDS E ND START B EING MV AX, DATA CDE(3)输入正确的程序,汇编、连接、运行 STACKS SEGMENT S TACK D 128DUP(?) EN DS SEGMENT ENDS SEGM ENT ASSUME CS: CDES,DS: DATAS STACKS DA TAS DATASCDES STRIN G DB ‘ELCM E!’, 13, 10, ‘$’ STA RT: MV AX, DATAS MV DS, AX LEA DX, S TRING MV A H, 9 INT 21H MV AH,4CH INT 21H CDES END S END STAR T4.算法描述及实验步骤 1)首先,用记事本输入各段程序,并储存成源程序,保存在MASM目录下。
程序设计基础实验报告实验编号 1905B000201 实验名称顺序结构实验地点软件技术实验室(2)班级19软嵌2班学号姓名一、实验目的:1、掌握编程环境的使用2、掌握基本数据类型、变量的定义和赋值;3、掌握输入输出语句4、理解顺序结构的使用二、实验内容:问题1:源代码:#include<stdio.h>void main(){int num1,num2,sum,min,mul,yushu;float shang;printf("Enter num1:");scanf("%d",&num1);printf("Enter num2:");scanf("%d",&num2);sum=num1+num2;min=num1-num2;mul=num1*num2;shang= (float)num1/num2;yushu=num1%num2;printf("%d+%d=%d\n",num1,num2,sum);printf("%d-%d=%d\n",num1,num2,min);printf("%d*%d=%d\n",num1,num2,mul);printf("%d/%d=%.2f\n",num1,num2,shang); printf("%d%%%d=%d\n",num1,num2,yushu); return 0;}输入:5 3结果:问题2:源代码:#include<stdio.h>int main(){int time1, time2,m,n;printf("Enter time1:");scanf( "%d" ,&time1);printf("Enter time2:");scanf("%d",&time2);m=(time2-time1)/100;n= (time2-time1)%100;if(n>=60)n=n-40;printf("The train journey time is %d hours %d minutes",m,n); return 0;}输入:712 1411结果;问题3:源代码:#include<stdio.h>void main(){int math,eng,comp;float average;printf("math=");scanf("%d",&math);printf("eng=");scanf("%d",&eng);printf("comp=");scanf("%d",&comp);average=(math+eng+comp)/3.0;printf("average=%.2f",average); }输入:87 72 93结果:问题4:源代码:#include<stdio.h>int main(){int a,b,c,m,n,t;printf("Enter a number:");scanf("%d",&a);b=(a/1000+9)%10;c=(a/100%10+9)%10;m=(a/10%100%10+9)%10;n=(a%1000%100%10+9)%10;t=m*1000+n*100+b*10+c;printf("The encrypted number is %04d",t);return 0;}输入:1257结果:三、实验原理采用自顶向下,逐步细化,模板化设计,结构化编码来进行结构化程序设计,并且把一个复杂的问题求解过程分阶段进行,每个阶段处理的问题都要控制在人们容易理解和处理的范围内。
福建农林大学金山学院实验报告系:信息与机电工程专业:电子信息技术年级: 10姓名:学号: 1002010 实验课程:汇编语言实验室号:____67___ 实验设备号: E 实验时间:指导教师签字:成绩:实验二顺序程序设计1.实验目的和要求1.学习使用DEBUG的命令;2.使用DEBUG命令在数据段中查看程序运行的结果;3.利用DEBUG运行简单的程序段。
2.实验环境实验的硬件环境是:IBM—PC机及其兼容机实验的软件环境是:操作系统:DOS 2.0以上;调试程序:;文本编程程序:EDIT.EXE、WPS.EXE;宏汇编程序:MASM.EXE(或ASM .EXE);连接装配程序:LINK .EXE;交叉引用程序:CREF.EXE(可有可无)。
3.实验内容及实验数据记录1)输入程序观察寄存器变化使用DEBUG,将下面的程序段写入内存,逐条执行,观察每条指令执行后,CPU中相关寄存器的内容变化。
注意用T命令执行时,CS: IP寄存器的内容MOV AX, 4E20ADD AX, 1416MOV BX, 2000ADD AX, BXMOV BX, AXADD AX, BXMOV AX, 001AMOV BX, 0026ADD AL, BLADD AH, BLADD BH, ALMOV AH, 0ADD AL, BLADD AL, 9C2)下列程序单步运行,注意AL,BX,CX寄存器的变化,并观察数据段字母的变化。
DSEG SEGMENTMSG1 DB ‘abc’DSEG ENDSCSEG SEGMENTASSUME CS: CSEG, DS: DSEGSTART: MOV AX, DSEGMOV DS, AXLEA BX, MSG1MOV CX, 3S: MOV AL, [BX]AND AL, 11011111B ;将AL中的ASCII码的第5位置0,;变成大写字母。
MOV [BX], ALINC BXLOOP SMOV AL, 0MOV AH, 4CHINT 21HCSEG ENDSEND START3)程序的跟踪执行操作在DOS下直接输入文件主名就可以执行文件了,有的程序会显示结果,可能执行后什么结果都没有,是因为程序中没有显示命令。
汇编语言程序设计实验报告汇编语言程序设计实验报告引言:汇编语言是计算机中最基本的语言,通常用于处理硬件相关问题。
在这个实验中,我们学习了汇编语言的基础知识和编程技巧,并实践了用汇编语言编写程序的方法和技巧。
以下是我们的实验报告。
正文:1. 实验环境我们使用的实验环境是Intel 8086微处理器与高级汇编语言。
微处理器使用的是PCB-512主板,而高级汇编语言是MASM。
2. 实验目的我们的实验目的主要是学习汇编语言的基础知识和编程技巧,包括了汇编语言的寄存器、指令、内存管理等方面的知识。
我们的另一个目的是掌握汇编语言的常用编程技巧,能够独立完成一些简单的汇编程序。
3. 实验内容我们的实验内容主要包括以下几点:(1)学习汇编语言的基础知识,包括寄存器、指令、内存管理等方面的知识。
(2)掌握汇编语言的常用编程技巧,包括数据输入输出、运算、跳转等基本操作。
(3)实践用汇编语言编写程序,如计算器、菜单等实用程序。
(4)了解8086微处理器的结构和原理。
4. 实验过程在这个实验过程中,我们完成了以下几个程序:(1)计算器计算器是一个简单的程序,主要用于实现两个数之间的加、减、乘、除等基本运算。
我们通过输入输出指令、存储指令等指令实现了这个程序的功能。
(2)菜单菜单是一个实用程序,主要用于展示一个简单的菜单并实现用户选择相关功能的功能。
我们使用了汇编语言中的跳转指令、输入输出指令等实现了这个程序。
5. 实验结果在我们的实验中,我们成功完成了上述两个程序。
我们通过输入输出指令、存储指令等指令实现了这个程序的功能。
6. 实验总结在这个实验过程中,我们学习汇编语言的基础知识和编程技巧,并实践了用汇编语言编写程序的方法和技巧。
我们通过编写计算器和菜单等简单实用程序,加深了对汇编语言的理解和认识。
我们认为这个实验对我们今后的学习和工作都有很大的帮助。
结论:通过这个实验,我们学习了汇编语言的基础知识和编程技巧,并实践了用汇编语言编写程序的方法和技巧。
实验二顺序结构与选择结构程序设计一、实验目的及要求1.理解C语言程序的顺序结构;2.掌握常用的C语言语句,熟练应用赋值、输入、输出语句;3.了解C语句表示逻辑量的方法(以0代表“假”以1代表“真”);4.学会正确使用逻辑运算符和逻辑表达式;5.熟练掌握if语句和switch语句。
二、实验内容1、已知圆半径r=1.5,圆柱高h=3, 求圆周长,圆面积,圆球表面积,圆球体积,圆柱体积。
2、输入一个华氏温度,要求输出摄氏温度。
公式为c=5/9*(f-32)。
3、有3个整数a、b、c,由键盘输入,编程序按从小到大的顺序将它们排序并输出。
4、编程序计算下面的函数:e x-1 0<x<1y= |x|+2 3≤x≤4sin(x2) 当x取其他值时5、输入一个整数m,判断它能否被7、11、17整除,如果能被以上三个数之一整除,则输出它能被整除的信息,否则输出m不能被7、11、17整除的信息。
6、电文加密的算法是:将字母A变成字母G,a变成g,B变成H,b变成h,依此类推,并且U变成A,V变成B,等等。
从键盘输入一个电文字符,输出其相应的密码。
7、企业发放的奖金根据利润提成。
若利润I≤10万元,奖金可提10%;若10万<I≤20万时,则低于等于10万元的部分按10%提成,高于10万元部分,可提成7.5%;若20万<I≤40万时,低于等于20万元的部分仍按上述办法提成,高于20万元部分按5%提成;按类似的办法,若40万<I≤60万元时,高于40万元部分按3%提成;若60万<I≤100万元时,高于60万元的部分按1.5%提成;若I>100万时,超过100万元部分按1%提成。
从键盘输入当月利润I,求应发奖金总数。
三、实验结果分析对实验结果进行检验,如结果出现错误,分析产生错误的原因并修改程序、改正错误。
实验二报告一、实验目的掌握汇编语言分支结构程序设计方法以及int 21h 常用中断方法。
二、实验内容编写程序,实现 3 个数比较大小,并从高到低输出结果。
调试该程序,并输出显示结果本实验是考查学生对分支程序设计的掌握程度,掌握条件转移指令的应用。
三、实验分析运用循环语句将三个数分别输入缓冲区,使用比较字符,运用跳转语句,实现选择升序还是降序排序,再对三个进行比较然后排序。
排序完成后再分别赋给缓冲区中的数组,最后输出!四、实验代码DATA SEGMENTbuf db 3 dup (?)buf1 db?str db 0ah,0dh,'input 3 numbers :$'str0 db 0ah,0dh,'If print in asc order,input 0;else input 1 :$'str1 db 0ah,0dh,'The sort in an descending order:$'str2 db 0ah,0dh,'The sort in a ascending order:$'str3 db 0ah,0dh,'---------------------------------------------$'DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:mov ax,datamov ds,axmov cx,3lea dx,str ;显示提示信息mov ah,09hint 21hlea bx,bufloop1:mov ah,01hint 21hmov [bx],alinc bxloop loop1lea dx,str0 ;显示提示信息mov ah,09hint 21hmov dx,offset buf1 ;为输出的字符选择存储空间mov ah,01hint 21hcmp al,30h ;输入的字符与0比较jz ascend ;若输出的字符等于0,则跳转到ascend,执行升序descend: ;降序排列mov si,offset bufmov al,[si]mov bl,[si+1]mov cl,[si+2]cmp al,bljae n1 ;大于等于则跳转xchg al,bln1:cmp al,cljae n2xchg al,cln2:cmp bl,cljae n3xchg bl,cln3:mov [si],almov [si+1],blmov [si+2],cllea dx,str3mov ah,09hint 21hlea dx,str1mov ah,09hint 21hcall pascend: ;升序排列mov si,offset bufmov al,[si]mov bl,[si+1]mov cl,[si+2]cmp al,bljnae n4 ;小于等于则跳转xchg al,bln4:cmp al,cljnae n5xchg al,cln5:cmp bl,cljnae n6xchg bl,cln6:mov [si],almov [si+1],blmov [si+2],cllea dx,str3mov ah,09hint 21hlea dx,str2mov ah,09hint 21hcall pp procmov si,offset bufmov cx,3fe:mov dl,[si]mov ah,02hint 21hmov dl,20h ;显示空格mov ah,02hint 21hinc siloop femov ah,4chint 21hretp endpCODE ENDSEND START五、总结通过本次实验,我发现自己对跳转语句的不熟悉,导致实验过程中遇到好多错误,还有没能实现进行多个数的比较,有待改进。
汇编实验2顺序程序设计汇编实验⼆顺序结构程序设计实验⽬的:(1)掌握汇编语⾔程序上机过程。
(2)掌握顺序结构程序调试的⽅法。
实验内容:调试查表程序内存中⾃TABLE开始的七个单元中连续存放着⾃然数0~6的⽴⽅值(⽴⽅值表),任⼀个数X(0≤X≤6)在FIRST单元中,要求查表找出X的⽴⽅值,存SECOND单元。
准备⼯作:1.进⼊D:2.建⽴⼀个⽂件夹hb, 即d:\hb3.将MASM和LINK复制到该⽂件夹中4.单击“开始”-“程序”-“附件”-“命令提⽰符”5.输⼊“d:\”6.输⼊“cd hb”操作步骤:1.输⼊源程序: EDIT d:\hb\cb.asm在EDIT编辑环境File菜单下选择Save存盘,选择Exit退出编辑环境2.汇编源程序A>MASM CB↙Microsoft (R) Macro Assembler Version 5.10Copyright (C) Microsoft Copr 1981,1988 All rights reserved.Object filename [CB.OBJ]:_↙Source listing [NUL.LST]:↙Cross-reference [NUL.CRF]:↙51394+389950 Bytes symbol space free0 Warning Errors0 Severe ErrorsA>3.连接⽬标程序A>LINKMicrosoft (R) Overlay Linker Version 3.64Copyright (C) Microsoft Corp 1983-1988. All rights reserved.Object Modules [.OBJ]:CB↙Run File [NUL.MAP]:↙Libraries [.LIB]: ↙显⽰0个错误才能进⾏下⼀步LINK操作4.执⾏程序A>B没有任何结果输出,原因是程序中没有安排显⽰输出,结果保存在内存单元中。
汇编语言实验报告一、实验目的本次汇编语言实验的主要目的是通过实际操作和编程实践,深入理解汇编语言的基本概念、指令系统和编程方法,提高对计算机底层硬件操作的认识和编程能力。
二、实验环境1、操作系统:Windows 102、编程工具:MASM(Microsoft Macro Assembler)三、实验内容1、数据传送与算术运算实现两个 16 位整数的加法和减法运算,并将结果存储在指定的内存单元中。
使用不同的数据传送指令,如 MOV、PUSH、POP 等,将数据在寄存器和内存之间进行传输。
2、逻辑运算与移位操作对给定的 8 位二进制数据进行逻辑与、或、异或运算,并观察结果。
执行移位操作,包括逻辑移位(SHL、SHR)和算术移位(SAL、SAR),理解移位对数据的影响。
3、分支与循环结构使用条件跳转指令(如 JZ、JE、JC 等)实现根据不同条件执行不同代码段的功能。
编写循环结构程序,如使用 LOOP 指令实现对数组元素的求和操作。
4、子程序调用定义一个子程序,实现特定的功能,如计算一个数的阶乘。
在主程序中调用子程序,并传递参数和获取返回值。
四、实验步骤1、数据传送与算术运算实验首先,在代码编辑器中编写汇编代码,定义数据段和代码段。
在数据段中初始化两个 16 位整数,例如 MOV WORD PTR DATA1, 1000H 和 MOV WORD PTR DATA2, 2000H 。
在代码段中使用 ADD 和 SUB 指令进行加法和减法运算,如 ADD WORD PTR RESULT_ADD, DATA1 和 SUB WORD PTRRESULT_SUB, DATA2 。
编译和链接代码,生成可执行文件。
运行程序,查看内存中存储的运算结果。
2、逻辑运算与移位操作实验类似地,定义数据段和代码段。
在数据段中初始化 8 位二进制数据,如 MOV AL, 01010101B 。
在代码段中使用AND、OR、XOR 指令进行逻辑运算,以及SHL、SHR、SAL、SAR 指令进行移位操作。
汇编语言程序设计实验报告汇编语言程序设计实验报告引言:汇编语言是一种底层的计算机语言,通过直接操作计算机的硬件和寄存器来实现程序的功能。
在本次实验中,我们学习了汇编语言的基本语法和编程技巧,并通过实践编写了一些简单的程序。
本报告将对实验过程和结果进行总结和分析。
一、实验目的本次实验的主要目的是让我们掌握汇编语言的基本语法和操作方式,培养我们对计算机底层运行机制的理解能力。
通过编写汇编程序,我们可以更深入地了解计算机的运行原理,并且可以更加高效地编写一些底层程序。
二、实验环境本次实验使用的是Windows操作系统,并且我们使用了MASM汇编器来编译和运行我们的汇编程序。
MASM是一款经典的汇编语言开发工具,具有强大的功能和广泛的应用领域。
三、实验内容在本次实验中,我们完成了以下几个任务:1. 编写一个简单的汇编程序,实现两个数字的相加功能。
2. 编写一个汇编程序,实现对一个字符串进行反转。
3. 编写一个汇编程序,实现对一个数组进行排序。
四、实验步骤1. 首先,我们学习了汇编语言的基本语法和指令集。
了解了汇编语言中的寄存器、指令和内存等概念,并且学会了如何使用它们来编写程序。
2. 接着,我们开始编写第一个程序,实现两个数字的相加功能。
通过学习汇编语言中的加法指令,我们可以将两个数字加载到寄存器中,并且使用相应的指令进行相加操作。
3. 然后,我们编写了第二个程序,实现对一个字符串进行反转。
通过学习汇编语言中的循环和条件判断指令,我们可以逐个字符地读取字符串,并且将它们按照相反的顺序存储到新的内存空间中。
4. 最后,我们编写了第三个程序,实现对一个数组进行排序。
通过学习汇编语言中的比较和交换指令,我们可以对数组中的元素进行排序,并且将排序结果存储到新的内存空间中。
五、实验结果通过以上的实验步骤,我们成功地完成了编写汇编程序的任务,并且得到了正确的结果。
我们的程序可以实现两个数字的相加、字符串的反转和数组的排序功能,并且运行速度较快,效果较好。
实验一顺序结构程序设计
一、实验目的
1.验证巩固掌握8086/8088的指令、结构和功能
2.掌握8086/8088汇编程序结构
3.掌握微软MASM FOR WINDOWS软件编辑、编译、运行汇编程序的方法、步骤4.初步掌握源程序中语法错误的检查方法
5.掌握DEBUG工具调试程序的方法
二、实验内容
(一) 编写程序,在屏幕上输出一个大写字母‘A’。
(二)设有三个字节变量A,B,D,求表达式Y=(2(A+B)+D)/2的值,并将结果存放至内存Y单元中。
三、实验步骤
1.编写源程序
2.编译程序。
3.连接,生成可执行程序
4.运行程序
(1). 全速运行程序,查看结果(实验(一)可直接运行)
(2). 用DEBUG调试命令,根据自己调试程序的需要分别使用下面有关命令来跟踪程序指令的执行情况:单步运行程序观察执行情况,说明相关
段在内存中的段地址等。
(实验(二)需调试)
1).反汇编:-U,查看程序在存储器中的存放情况;
2).显示内存:-D段地址:偏移地址,查看内存中的数据;
3).显示寄存器:-R,查看寄存器中数据;
4).单步运行:-T,跟踪观察指令执行结果是否正确;
5).连续运行:-G,连续运行;(例–G=0:15,运行代码段中偏
移地址为0至偏移地址为15H之间的代码)
6).退出:-Q,退出DEBUG调试程序。
四、实验报告
写出程序清单,记录运行结果;总结DEBUG中常用命令的功能。
汇编语言实验报告Assembly Language Programming Lab Reports______________________________________________________________________________班级: _________ 姓名:___________ 学号:___________ 实验日期:_____________学院: _____计算机与通信工程学院____ 专业:_______计算机科学与技术___________实验顺序:___实验二____ 实验名称: ___________顺序程序设计________________ 实验分数:_______ 考评日期:________ 指导教师:______________________________________________________________________________一.实验目的1.掌握非压缩的BCD码运算及其调整办法。
2.掌握Dos功能调用int 21h的1,2,9,10号功能。
3.掌握Bios功能调用int 10h的3号功能。
______________________________________________________________________________二.实验环境操作系统:windows xp编译程序:masm 5.0______________________________________________________________________________三.实验原理1.dos功能调用,利用10号dos功能调用,输入一串字符串,利用9号dos功能调用,输出显示之前输入的字符串代码如下:2.利用int10h获得光标的行列号,算出相应在显存的位置,输出想要的字符代码如下:3.输入是转化由ascii码转成实际十六进制数,mul相乘后,采用非压缩bcd码相乘调整aam,高位低位分别采用非进位加法和进位加法,最后转回ascii码输出代码如下:______________________________________________________________________________四.实验步骤及结果分析1.Dos功能调用。
《C程序设计》顺序结构程序设计实验报告5. 编序C程序,实现将560分钟表示成**小时**分钟的形式输出。
6. 编序C程序,输入一个三位整数x(999=>x>=100),将其分解出百位、十位、个位,并求出各位之和以及各位之积。
7. 编序C程序,要求从键盘任意输入一个3位数的正整数,输出其逆序数(例如输入123,输出321)。
三、实验过程与结论:(经调试正确的源程序(核心部分)和程序的运行结果)(三)编写程序1.#include<stdio.h>int main(){printf("*************\n Very good!\n*************\n");return 0;}2.#include<stdio.h>int main(){float a,b,c,s;a=38.9;b=27.2;c=2*(a+b);s=a*b;printf("周¨¹长¡è是º?%f,面?积y是º?%f\n",c,s);return 0;}3.#include<stdio.h>int main(){int a,b;printf("输º?入¨?两¢?个?整?数ºy:êo\n");scanf("%d %d",&a,&b);int x,y,z,m;x=a+b;y=a-b;z=a*b;m=a/b;printf("两¢?个?数ºy的Ì?和¨ª是º?%d,差?是º?%d,积y是º?%d,商¦¨¬是º?%d\n",x,y,z,m);return 0;}#include<stdio.h>#define PI 3.14int main(){float r,v;printf("请?输º?入¨?球¨°的Ì?半ã?径?:\n");scanf("%f",&r);v=4*PI*r*r*r/3;printf("球¨°的Ì?体¬?积y是º?%f\n",v);return 0;}5.#include<stdio.h>int main(){int a,b,c;a=560;b=a/60;c=a%60;printf("%d小?时º¡À,ê?%d分¤?钟¨®\n",b,c);return 0;6. #include<stdio.h>int main(){int a,b,c,d;int x,y;printf("请?输º?入¨?一°?个?三¨y位?数ºy:êo\n");scanf("%d",&a);b=a/100;c=a/10%10;d=a%10;x=b+c+d;y=b*c*d;printf("百㨴位?是º?%d,十º?位?是º?%d,个?位?是º?%d,个?位?之?和¨ª是º?%d,各¡Â位?之?积y 是º?%d\n",b,c,d,x,y);return 0;}7. #include<stdio.h>int main(){int a,b,c;int x,y;scanf("%d",&x);a=x/100;b=x/10%10;c=x%10;y=c*100+b*10+a;printf("%d\n",y);return 0;}四、实验总结:(实验中遇到的问题及解决方法,心得体会等)对于代码不熟悉,写代码速度慢,应在敲代码上花时间。
西安财经学院信息学院
《汇编语言程序设计》 实验报告
实验名 子程序结构程序设计 实验室 实验楼403 实验日期 2013/06/09 一、实验目的及要求
1. 学习子程序的编写,主子程序的调用
2. 不同模块间程序的调用和调试
二、实验环境
硬件环境:一台微型计算机; 软件环境:windows 7 链接程序:LINK.EXE
调试环境:DOSBOX 虚拟平台。
三、实验内容
数据段中的
6个字符,“ABCDEF ”,调用子程序将其逐个显示出来。
子程
序的功能是显示一个字符。
四、实验过程
1. 通过编译程序、链接程序分别生成OBJ 和EXE 文件后,直接运行查看结果
如下:
2. 反汇编,查看程序的指令,如下所示:
姓名 学号 10051704 班级 计本1004班 指导教师 张娟
3. 用-d 查看数据段内存放的数据:
4. 单步执行
查看堆栈段的内容:继续单步执行:
五、源程序清单
程序源代码如下:
DATA SEGMENT
MAG DB ‘ABC DEF’
DATA ENDS
CODE SEGMENT
ASSUME CS: CODE, DS: DATA
START: MOV AX, DATA
MOV DS, AX
MOV SI, 0
MOV CX, 6
LL: MOV DL, MAG[SI]
CALL MADD
INC SI
LOOP LL
MOV AH, 4CH
INT 21H
MADD PROC。
实验三 顺序结构程序设计实验报告 一、实验目的 1. 掌握掌握赋值语句的使用方法。 2. 各种类型数据的输入输出的方法,能正确使用各种格式转换符。 3. 进一步掌握编写程序和调试程序的方法。
二、实验内容(源代码)
1. sy3-(1) ①#include
int main() { int a,b; //基本整型 float d,e; //单精度浮点型 char c1,c2; //字符型 double f,g; //双精度浮点型 long m,n; //长整型 unsigned int p,q; //"unsiguld"改成"unsigned" 无符号整型 a=61,b=62; c1='a';c2='b'; //'a''b'的"'"不能掉了 d=3.56;e=-6.87; //d,e之间用";"隔开 f=3157.890121;g=0.123456789; m=50000;n=-60000; p=32768;q=40000; printf("a=%d,b=%d\nc1=%c,c2=%c\nd=%6.2f,e=%6.2f\n",a,b,c1,c2,d,e); //"""与"a"之间的","不能掉了,"\"不能写成"/" printf("f=%15.6f,g=%15.12f\nm=%1d,n=%1d\np=%u,q=%u\n",f,g,m,n,p,q); //f后的q改为g }
③#include
int main() { int a,b; //基本整型 float d,e; //单精度浮点型 char c1,c2; //字符型 double f,g; //双精度浮点型 long m,n; //长整型 unsigned int p,q; //"unsiguld"改成"unsigned" 无符号整型 a=61,b=62; c1=a;c2=b; //c1,c2之间用";"隔开 f=3157.890121;g=0.123456789; d=f;e=g; p=a=m=50000;q=b=n=-60000; printf("a=%d,b=%d\nc1=%c,c2=%c\nd=%6.2f,e=%6.2f\n",a,b,c1,c2,d,e); //"""与"a"之间的","不能掉了,"\"不能写成"/" printf("f=%15.6f,g=%15.12f\nm=%1d,n=%1d\np=%u,q=%u\n",f,g,m,n,p,q); //f后的q改为g
汇编语言实验报告实验一、汇编运行环境及方法、简单程序设计一、程序说明本程序用来比较两个字符串string1和string2所含的字符是否相同。
若相同’,否则显示‘No match’。
则显示‘Match在程序的数据段先定义两个字符串string1和string2,再定义两个字符串mess1’和‘Nomatch’。
再代码段比较字符串string1和string2,和mess2,分别代表‘Match通过比较判断是否相同。
若相同则显示‘Match’,否则显示‘No match’。
二、调试说明再EDIT中建立ASM文件,再用汇编程序对源程序汇编产生目标文件Obj,再用连接程序产生执行文件EXE。
再用Debug进行调试。
其中常用到的指令有:用-g命令来用运行程序,用-u命令来显示程序,用-d 命令来查看数据段的情况,-e或-f命令来修改需要改正的部分,用-t指令来逐步执行程序,用-r指令来查看寄存用器和修改寄存器的值,-q命令用来退出debug程序。
在这些命令的后面加上地址,可以将命令执行到相应的地方。
如用-g指令运行程序后,再用-u指令显示程序的执行借给如下:若将string2改为'Move the cursor backwards.',程序的其他部分不做改动,执行结果:若将mov cx,25语句改成mov cx,24,结果为:此时少做了一次循环,得到的结果就不正确了。
实验二、用DEBUG编程:使用堆栈段将AX和BX的内容进行交换等一、程序说明本实验包括两个部分,第一个部分是将AX和BX的内容进行交换,并用堆栈作为两寄存器交换内容的中间存储单元;第二部分是用DEBUG的命令将存储器偏移地AH, 0BH,0CH,0DH,0EH。
在DEBUG状态址300H,304H连续单元顺序装入0 下送入给出的程序中。
第一个程序先将AX的内容进栈,然后将BX的内容赋给AX,再将出栈的内容赋给BX即可。
第二个程序是在进入debug后,用-a指令输入给出的程序,然用-r指令安要求修改内存的内容,再用-t指令逐步执行每条指令,看修改的内存内容对指令执行结果的影响。
实验报告实验名称汇编语言程序设计||专业班级:信息安全学号:姓名:实验一汇编语言上机过程和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 文件名。
汇编语言顺序结构实验报告
————————————————————————————————作者: ————————————————————————————————日期:
ﻩ
实验二
实验目的:
1.掌握顺序结构程序的基本设计方法;
2.掌握数据传送指令和算术运算指令的用法;
3.掌握逻辑操作指令和移位操作指令的用法;
4.掌握状态标志位操作指令的用法;
5.掌握简单的I/O功能调用。
实验要求
1.熟练掌握DEBUG中的U,D,E,G命令的使用方法;
2.学会利用系统功能调用,来实现键盘输入字符、显示字符的方法;
3.了解大、小写字母及数字在计算机中的表示方法及转换方法。
实验内容
题目
编写十六进制的乘法程序。
要求从键盘上输入两个一位十六进制数据,乘积存入SUM单元
以下是我的汇编程序代码:
DSEG SEGMENT
SUM DW?
HTABDB '0123456789???????ABCDEF'
HTAA DB'0123456789ABCDEF'
DSEG ENDS
CSEGﻩSEGMENT
ﻩASSUMEﻩCS:CSEG,DS:DSEG
START: MOVAX,DSEG
ﻩﻩMOVﻩDS,AX ﻩ
MOVAH,01H
INT 21H
MOVﻩDL,'*'
MOV AH,02H
INT21H
SUB AL,30H
LEA BX,HTAB
ﻩﻩXLAT
MOV DL,AL
MOV AH,01H
INT21H
SUB AL,30H
ﻩXLAT
MOV BL,DL
MULBL
MOVSUM,AX
MOV BL,AL
MOV CL,AL
MOV DL,'='
ﻩMOVAH,02H
INT21H
SHR BL,4
MOV AL,BL
LEA BX,HTAA
XLAT
MOV DL,BL
MOV AH,02H
INT 21H
AND CL,0FH
MOV AL,CL
ﻩXLAT
MOVDL,AL
MOV AH,02H
INT21H
MOV DL,'H'
MOV AH,02H
INT21H
MOV AH,4CH
INT 21H
CSEG ENDS
ﻩENDﻩSTART
结果
ﻩ该程序不仅将结果存入了sum,且显示在了屏幕上,经测试无溢出。
调试,改错
在实验过程中,有几个问题出现了,
首先,一开始在编写代码过程中,由于我没有给输入内容表加逗号,导致数据溢出而使编译无法通过,经过修改后终于通过了编译。
但是之后结果一直都显示为同一个数字,经过单步指令语言执行后,我得到了以下的结果:
在执行INT 21H指令后,AL寄存器中的内容被改变,于是我将AL用DL保存起来后重新执行,发现仍然会显示乱码,进一步进行单步指令执行后,我发现,寄存器AL,在转存过程中被我记成了BL。
经过修改终于完成。
以下是正确的反汇编内容
以及储存器的最终状态
以及内存的最终状态,其中0000为SUM以3*A=1E为例,sum在第一个单元内。
一开始我编写了一个利用转移指令完成的汇编程序,能够顺利将结果保存到AX,和s um中
如下:SSEGﻩSEGMENT STACK
STK DBﻩ20 DUP(0)
SSEGﻩENDS
DSEGﻩSEGMENT
SUM DW ?
DSEGﻩENDS
CSEG SEGMENT
ﻩﻩASSUME CS:CSEG,DS:DSEG
ﻩASSUMESS:SSEG
START:MOVﻩAX,DSEG
MOVﻩDS,AX
ﻩMOVﻩAX,SSEG
ﻩMOVﻩSS,AX
ﻩMOVﻩSP,LENGTH STK
ﻩﻩMOVﻩAH,01H
ﻩINT 21H
ﻩCMPﻩAL,'A'
ﻩJAE ABOVE1
ﻩﻩSUB AL,'0'
ﻩMOV BL,AL
ﻩJMPﻩNEXT1
ABOVE1:ﻩSUB AL,'A'
ﻩADD AL,10
ﻩﻩﻩMOVﻩBL,AL
NEXT1: MOVﻩAH,01H
ﻩﻩINT 21H
ﻩﻩCMP AL,'A'
ﻩJAEﻩABOVE2
ﻩﻩﻩSUBAL,'0'
ﻩﻩJMPﻩNEXT2
ABOVE2:ﻩSUBﻩAL,'A'
ﻩﻩADD AL,10
NEXT2: MULﻩBL
ﻩMOVﻩSUM,AX
MOV AH,4CH
MOVﻩAL,0
ﻩﻩINT 21H
CSEG ENDS
ﻩENDﻩSTART
以下是反汇编内容
以下是输入及输出结果
即3*A=1E。