汇编语言实验报告 累乘
汇编语言程序设计实验报告四(算术运算程序实验)
汇编语言程序设计实验报告四(算术运算程序实验)汇编语言程序设计实验报告四(算术运算程序实验)一、实验目的1、熟悉算术运算指令的功能与应用。
2、学习编写加法和乘法运算程序。
二、实验内容1、二进制运算计算23579+7684和0A5H+34H(1)原始数据分别存于A、B、C、D开始听内存单元中,运算结果分别存E、G开始的内存单元中。
(低位数在低字节中)(2)前两个数据在程序中用十进制表示,后两个数据在程序中用十六进制表示。
(3)十进制数定义成字变量,用16位加法。
十六进制数定义成字节变量,用8位加法。
2、多字节加法在内存中以FIRST和SECOND开始的单元中分别存放有两个10位压缩型十进制数(BCD 码),低位在前。
求这两个数的压缩十进制数和,并存到THIRD 开始的单元中。
(1)压缩十进制数亦称组合十进制数,一个字节存放二位BCD 码。
(2)两个加数可直接直接在程序中设置。
3、二进制乖法(1)在内存DATA1和DA TA2单元中分别存放着两个8位无符号二进制数A和B 。
求AXB,结果存于DATA3开始的内存单元中。
(2)在FIRST和SECOND开始的内存单元中,分别存放着两个16位带符号二进制数D和E,求DXE,结果存于THIRD开始的内存单元中。
三、实验准备1、仔细阅读本实验教材。
2、认真预习加法、乖法和十进制调整指令。
精心设计运算使用的实验数据。
(注意:应准备多组不同数据以备实验。
)3、根据实验内容,分别画出各个程序的流程图,并在实验前编好各个源程序。
四、实验步骤1、二进制数运算(1)题目的具体要求,将原始数据及存放结果的内存单元分别定义成字变量或字节变量。
(2)辑程序,把编写好的源程序建立为汇编语言源程序文件并存盘。
(3)对源程序文件进行汇编、连接,且修改至无错误,然后运行程序。
(4)利用调试程序观察运行结果。
如果有错,分析并找出错误原因,改写程序并重新调试。
2、多字节加法程序(1)在FIRST 和SECOND开始的内存单元中建立各为10位的压缩型BCD码的数据区,数据要选择得当。
汇编语言程序设计实验报告
汇编语言程序设计实验报告汇编语言程序设计实验报告引言:汇编语言是计算机中最基本的语言,通常用于处理硬件相关问题。
在这个实验中,我们学习了汇编语言的基础知识和编程技巧,并实践了用汇编语言编写程序的方法和技巧。
以下是我们的实验报告。
正文:1. 实验环境我们使用的实验环境是Intel 8086微处理器与高级汇编语言。
微处理器使用的是PCB-512主板,而高级汇编语言是MASM。
2. 实验目的我们的实验目的主要是学习汇编语言的基础知识和编程技巧,包括了汇编语言的寄存器、指令、内存管理等方面的知识。
我们的另一个目的是掌握汇编语言的常用编程技巧,能够独立完成一些简单的汇编程序。
3. 实验内容我们的实验内容主要包括以下几点:(1)学习汇编语言的基础知识,包括寄存器、指令、内存管理等方面的知识。
(2)掌握汇编语言的常用编程技巧,包括数据输入输出、运算、跳转等基本操作。
(3)实践用汇编语言编写程序,如计算器、菜单等实用程序。
(4)了解8086微处理器的结构和原理。
4. 实验过程在这个实验过程中,我们完成了以下几个程序:(1)计算器计算器是一个简单的程序,主要用于实现两个数之间的加、减、乘、除等基本运算。
我们通过输入输出指令、存储指令等指令实现了这个程序的功能。
(2)菜单菜单是一个实用程序,主要用于展示一个简单的菜单并实现用户选择相关功能的功能。
我们使用了汇编语言中的跳转指令、输入输出指令等实现了这个程序。
5. 实验结果在我们的实验中,我们成功完成了上述两个程序。
我们通过输入输出指令、存储指令等指令实现了这个程序的功能。
6. 实验总结在这个实验过程中,我们学习汇编语言的基础知识和编程技巧,并实践了用汇编语言编写程序的方法和技巧。
我们通过编写计算器和菜单等简单实用程序,加深了对汇编语言的理解和认识。
我们认为这个实验对我们今后的学习和工作都有很大的帮助。
结论:通过这个实验,我们学习了汇编语言的基础知识和编程技巧,并实践了用汇编语言编写程序的方法和技巧。
微机原理实验报告---汇编语言n的阶乘
微机原理实验报告-------颜色的排列组合方式院系:自动化班级:学号:姓名:日期:成绩:1.题目在实际中,有红黄蓝绿等7种颜色,按照排列组合方式,分别计算出有多少种排列方式?如果减少一种颜色,又有多少中排列呢?2.题目分析题目中给去n种(n=7)颜色,要求我们计算可能出现的组合种数,这是数学中常见的排列组合问题。
题目的意思是指的传统的排列组合,不许有重复颜色的,否则与生活习惯就不符合了。
这个咱们就熟悉了,对于n种颜色,应该有nA种排列方式。
我们知道,nnA在数值上就是n的阶乘,现在程序的对象成为求阶乘了。
n对于阶乘,我的思路是利用循环,设计一个累加变量兼被乘数x,用n来作为结束判断,当x>n时,累乘循环结束,现在就得到了相应的种类数。
但是内存中的数值是以16进制存放的,还需要一步进制转换才能进行显示。
我的算法是:开辟5个空间的变量result1存放个位数字,给bx赋值10,(※)把dx清零,用{dx,ax}除以bx,得到的余数放在dx中,就是个位数的十进制表示,在转放到result1的第一个地址中。
此时商数存在ax中,再重复(※)之后的内容,直到全部转化完。
显示的算法是十进制数字加上30h,变为ASCII码,利用INT 21H中断循环显示各位数字。
程序还给阅读者提供了选择权,允许读者进行输入,当读者输入一个数据n(n<=7)时,程序会根据输入,显示出相应的运算结果,这样当给定的样色种类变化时,就不用对程序本身进行更改了,可谓更加方便灵活。
3.程序框图4.程序编写CRLF MACRO ;定义回车换行的宏MOV DL,0DHMOV AH,2INT 21HMOV DL,0AHMOV AH,2INT 21HENDMSTACK SEGMENT STACK ;初始定义DW 100 DUP(?)STACK ENDSDATA SEGMENTSTRING DB 'ENTER SORT OF COLOUR: ','$' ;输入提示字符串RESULT1 DB 5 DUP(0) ;用来存储结果的各位数字DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART:MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXMOV DX,OFFSET STRINGMOV AH,9INT 21HMOV AH,1 ;输入样色的种类INT 21HSUB AH,AHSUB AL,30HMOV CX,AX ;颜色的种类用来控制循环CRLFMOV AX,1MOV BX,1LP:MUL BXINC BXLOOP LPLEA DI,RESULT1 ;LP循环求阶乘MOV BX,10MOV CX,4LOOP1:DIV BXMOV [DI],DL ;LOOP1将16进制转为10进制INC DISUB DX,DXLOOP LOOP1DEC DIMOV CX,4DISPLAY: ;DISPLAY用来显示10进制的各位数字ADD BYTE PTR[DI],30HMOV DL,[DI]MOV AH,2INT 21HDEC DILOOP DISPLAYMOV AX,4C00HINT 21HCODE ENDSEND START5.运行结果6. 结果讨论排列中数是颜色种类n的阶乘,比较5种6种和7种的数值可发现,120,720和5450相差很大。
《汇编语言》实验报告
《汇编语言》实验报告实验名称:汇编语言实验报告实验目的:通过实验了解汇编语言的基本概念、语法结构和程序设计方法,掌握汇编语言的编写方法。
实验时间:2024年1月1日实验地点:实验室一、实验背景汇编语言是计算机硬件和软件之间的桥梁,通过汇编语言可以直接操作计算机的底层硬件。
汇编语言是一种低级语言,使用汇编语言可以实现对计算机内存、寄存器等硬件资源的直接操作,从而实现程序的功能。
本实验通过编写汇编语言程序,加深对汇编语言的理解。
二、实验过程1. 确定实验环境:使用DOSBox模拟DOS环境进行汇编程序编写和调试。
2. 编写第一个汇编程序:编写一个简单的汇编程序,将字符串“Hello, World!”输出到屏幕上。
3.程序分析:a.定义要输出的字符串,将字符串存储在数据段中。
b.设置段寄存器,将数据段地址加载到DS寄存器中。
c.设置显示模式和光标位置。
d.将字符串逐个字符输出到屏幕上。
e.关闭显示模式。
4. 编译运行:使用汇编语言的编译器将汇编程序转换成机器码,并在DOSBox中运行程序。
5.调试程序:根据程序运行结果和分析,调试程序中存在的错误,并进行改正。
三、实验结果与分析经过多次编写和调试,我们成功实现了将字符串“Hello, World!”输出到屏幕上的功能。
通过程序分析和调试过程,加深了对汇编语言的理解和掌握。
四、实验总结通过本次实验,我们深入了解了汇编语言的基本概念、语法结构和程序设计方法。
通过实际编写汇编语言程序,对汇编语言的编写方法有了更加深入的认识。
同时,通过调试程序的过程,我们也提高了自身的问题解决能力和分析能力。
在今后的学习和工作中,我们将继续学习和深入研究汇编语言,提高自己的编程能力和创新思维能力。
总体而言,本次实验给我们带来了很大的收获,我们以后将更加努力地学习汇编语言,提高自己的编程水平,为以后的学习和工作做好充分的准备。
(实验六)汇编语言课内实验报告
实验四循环结构程序设计上机实验
一、实验目的:
1、掌握循环结构程序设计的基本方法。
2、掌握用masm for Windows编辑、编译、连接汇编语言源程序的基本方法。
3、掌握DEBUG调试程序的U、D、R、T、G、Q常用命令的用法。
二、实验步骤:
1、用ASM masm for Windows将源程序输入,其扩展名为.ASM。
2、用MASM对源文件进行汇编,产生.OBJ文件和.LST文件。
若汇编时提示有错,则修改源程序后重新汇编,直至通过。
3、用LINK将.OBJ文件连接成可执行的.EXE文件。
4、用DEBUG调试程序并分析结果。
三、实验内容:
1. 在数据段中从变量DA1开始有N个带符号数。
把其中的正数、负数(设没有0)依次存入DA2、DA3开始的单元中并分别统计正、负数的个数存入DA4、DA5字节单元之中。
试编写程序。
将本例中的DEC指令修改为LOOP指令来实现循环程序的设计。
在修改过程中还应修改哪能些指令,请自己分析,为什么?
四、综合练习:
1.编写求100个正整数的和的程序。
如果和不超过16位字的范围(即65535),则将其和保存到WORDSUM单元中,若超过则显示OVERFLOW。
2.设有N个数,连续存放在以BUF为首址的字存储区中,试编写程序,统计其中最高的6位全1的数个数并将统计结果送入寄存器DX中。
五、实验报告(注意:将报告正反两面打印后用手写)附件如下:
实验四循环程序设计实验报告学号姓名成绩。
(最新版)汇编语言实验报告
(最新版)汇编语言实验报告汇编语言课程设计学院:专业:姓名:学号:汇编语言是计算机专业的一门重要的专业基础课,主要介绍汇编语言程序设计的基本原理和方法。
汇编语言是一门理论性和实践性较强的课程,辅助课堂教学的实验有助于帮助学生理解汇编语言的基本原理,锻炼学生的动手能力,提高学生的综合应用知识的能力。
目录1 利用DEBUG调试汇编语言程序段………………………………………2 初级程序的编写与调试实验(一).................................................................................3 初级程序的编写与调试实验(二)………………………………………...4 汇编语言程序上机过程 .......................................................................................................... 5分支程序实验……………………………………………………………6 循环程序实验……………………………………………………………..1 利用DEBUG调试汇编语言程序段一.课程目的1.熟悉DEBUG有关命令的使用方法;2.利用DEBUG掌握有关指令的功能;3.利用DEBUG运行简单的程序段。
二.课程内容1.进入和退出DEBUG程序;2.学会DEBUG中的1)D命令(显示内存数据D 段地址:偏移地址)例1:-D1002)E命令(修改指定内存)例1:-E100 41 42 43 44 48 47 46 45-D 100,L08结果:08F1:0100 41 42 43 44 48 47 46 45例2:-E 100:08F1:0100 76 42 :42是操作员键入此命令是将原100号内存内容76修改为42,用D命令可察看。
3)R命令(显示当前寄存器的内容)4)T命令(设置陷井,单步执行)5)A命令(将指令直接汇编成机器码输入到内存中。
汇编实验报告(详细版)
计算机组成与汇编语言(实验报告)内容: 实验一、六、七、八院系专业:计算机学院计算机科学与技术姓名:xxxxxxxxx学号:*******xxxxx完成时间:2012年12月1日计算机组成与汇编语言实验报告printf("输入的二进制数不正确!!");break;}}}if(a[15]=='1')s++;for(i=1;i<16;i++){if(a[15-i]=='1')s+=(1<<i);}printf("二进制: ");puts(a);printf("对应的十进制为: ");printf("%d\n",s);}程序1运行结果:实验情况与体会:运行过程中出现过不能判断是否输错的情况以及权位判断有误等情况,经过思考和修改后修改正确,说明理解好二进制与十进制之间的转换过程很重要。
编程过程中主要碰到的问题是,不够十六位的时候要在前面补零。
转换方法主要是除二求余的方法。
注:篇幅不够,可以另外附页。
计算机组成与汇编语言实验报告姓名xxxx 学号2011004xxxx 计分专业软件工程班级xxxxx 实验日期2012年 12 月 1日实验名称实验六分支结构程序设计实验目的●熟悉有符号定点数的表示。
●掌握原码、补码、反码之间的相互转换程序设计。
实验内容说明:该程序中X=23,Y=45,他们之差的绝对值为22,用16进制表示为0016H,即图中显示的结果2.调试程序2:DATA SEGMENTADD AL, 07HLP4: ADD AL, 30H ;将低四位转化为相应的ASCII码并以字符形式输MOV DL, ALMOV AH, 2INT 21HMOV AH, 4CHINT 21HCODE ENDSEND START上机运行该程序并检查运行结果是否正确。
上机实验过程:说明:求出三个数里面的最大数73;3. 编写程序1:编程实现从键盘输入一位数字,判断其奇偶性,并在屏幕上输出一个标志,若为奇数,则输出1,否则输出0。
汇编语言实验报告——累加器
《汇编语言》实验报告——累加器制作2014级计算机科学与工程学院学号:姓名一、实验要求:1.显示 INPUT N:,提示用户输入数字字串2.检测输入字串的合法性,非法给出提示3.将输入数字字串转化为数值,存入变量n4.累加1~n,存入变量sum5.以十进制显示sum二、流程图:三、源代码:DATAS SEGMENTstr1 db "Input N:","$"str2 db "sum=","$"str3 db 0ah,"error","$"n dw 0sum dw 0DATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS START:MOV AX,DATASMOV DS,AXLEA dx,str1;输出提示符mov ah,9int 21hinput:mov ah,01;输入数字int 21hcmp al,0dh;判断是否为回车jz step1cmp al,"0";判断字符合法性jb errorcmp al,"9"ja errorsub al,"0";转化为ASCII码mov ah,0;此段将高位乘10push axmov ax,nshl ax,1push axmov cl,2shl ax,clpop bxadd ax,bxmov bx,0;高位与低位相加pop bxadd ax,bxmov n,axxor cx,cx;设定累加次数mov cx,njmp inputstep1:mov ax,cxsub cx,1step2:add ax,cx;求累加和loop step2mov sum,axlea dx,str2mov ah,9int 21hmov cx,0mov ax,sumstep3:mov dx,0mov bx,10;将结果除以10并把余数压进栈div bxpush dxinc cxcmp ax,0hjnz step3step4:xor ax,axpop ax ;栈内依次输出mov dx,axadd dx,30hint 21hloop step4jmp lasterror:lea dx,str3;输出错误提示语mov ah,9int 21hlast:MOV AH,4CHINT 21HCODES ENDSEND START四、实验测试截图五、实验心得:本次试验的目的在于通过编辑累加器程序来熟悉汇编语言中对循环结构的使用,其中包括循环输入字符并判断合法性、累加计算、循环输出计算结果。
汇编语言程序设计实验报告
汇编语言程序设计实验报告汇编语言程序设计实验报告引言汇编语言是一种低级语言,用于编写计算机的底层程序。
在计算机科学与技术领域,汇编语言程序设计是一门重要的课程。
本篇实验报告将介绍我在汇编语言程序设计实验中所学到的知识和经验。
实验目的本次实验的目的是通过编写汇编语言程序,加深对计算机底层原理的理解,并掌握汇编语言的基本语法和编程技巧。
实验环境在实验中,我使用了一台运行Windows操作系统的计算机,并安装了MASM 汇编语言开发工具。
实验内容1. 汇编语言基础知识在实验开始前,我先学习了汇编语言的基础知识。
汇编语言使用助记符来代表机器指令,与机器指令一一对应。
了解了寄存器、内存和指令的概念,并学会了如何使用它们来编写汇编程序。
2. 汇编语言程序设计在实验中,我编写了一些简单的汇编语言程序,以加深对汇编语言的理解和应用。
例如,我编写了一个计算两个数之和的程序,通过将两个数存储在寄存器中,并使用加法指令进行运算,最后将结果保存到指定的内存位置。
3. 汇编语言程序调试在编写汇编语言程序时,我遇到了一些错误和问题。
为了解决这些问题,我学会了使用调试工具来定位错误。
通过逐步执行程序,并观察寄存器和内存的变化,我能够找到程序中的错误并进行修正。
4. 汇编语言程序优化在实验中,我也尝试了对汇编语言程序进行优化,以提高程序的性能和效率。
通过减少指令的数量和使用更高效的算法,我成功地改进了程序的执行速度。
实验心得通过本次实验,我深刻体会到了汇编语言程序设计的重要性和挑战性。
汇编语言虽然复杂,但它能够直接操作计算机的硬件,提供了更高的灵活性和效率。
通过编写汇编语言程序,我不仅加深了对计算机底层原理的理解,还提高了问题解决和调试能力。
总结汇编语言程序设计实验是一门重要的课程,它为我们提供了学习计算机底层原理和编程技巧的机会。
通过实验,我掌握了汇编语言的基本知识和技巧,并成功编写和优化了汇编语言程序。
这次实验不仅加深了我的理论知识,还培养了我的实际操作能力。
64位乘法运算实验报告
64位乘法运算实验报告一、实验任务实现两个64位无符号数的乘法,程序主体部分用汇编语言实现。
二、程序算法我们用两个16位数组x[4]和y[4]来保存64位无符号数,而相乘所得的积用一个16位数组r[11]的r[4]-r[11]8个16位数来存储,使用r[4]-r[11]这几个位置来存储只是为了编程时表示方便,举例如下:将64位数1234123412341234和1234567812345678表示成x[4]={1234 1234 1234 1234} 和y[4]={1234 5678 1234 5678}。
我们发现用mul语句实现乘法运算时,高16位在dx中,低16位在ax中,而每次x[4]中的某一位和y[4]中的某一位相乘时,比如说x[3]和y[3]相乘时,积的低16位可以存储在r[10]中,而积的高16位可以存储在r[9]中,依次类推,x[3]和y[2]相乘时,高低16位分别加到r[9]和r[8]中,然后将进位值加到相应位,这样一直推算到r[5]和r[4],便完成了所有的位相乘,最后得出结果。
三、源程序及注释//64位乘法程序#include <iostream.h>int main(int argc, char* argv[]){//x[4]和y[4]分别保存被乘数和乘数的各个位,r[11]保存积的各个位unsigned short int x[4],y[4],r[11];unsigned short int a,b,c,d,e,f,g,h;//提示输入两个64位无符号数cout<<"Please input two 64-bit Numbers:\n";cout<<"Number1:";cin>>a>>b>>c>>d; //输入被乘数cout<<"Number2:";cin>>e>>f>>g>>h; //输入乘数x[0] = a; //64位被乘数和乘数分四个16位存放x[1] = b;x[2] = c;x[3] = d;y[0] = e;y[1] = f;y[2] = g;y[3] = h;for(int k=0;k<11;k++) //积的各位赋初值0{r[k] = 0x0000;} //以i=0且j=0举例说明for(int i=0;i<4;i++) //i=0{for(int j=0;j<4;j++) //j=0{a = r[10-i-j]; //a=r[10]b = r[9-i-j]; //b=r[9]c = r[8-i-j]; //c=r[8]d = r[7-i-j]; //d=r[7]e = r[6-i-j]; //e=r[6]f = x[3-i]; //f=x[3],被乘数的最低位g = y[3-j]; //g=y[3],乘数的最低位_asm{mov ax,fmul g //两数的最低位相乘,积的低位保留在ax,高位保留在dxadd a,ax //积的低位存储在aadc b,dx //积的高位再加上进位存储在badc c,0 //若高位相加有进位,加上进位adc d,0 //若高位相加有进位,加上进位adc e,0 //若高位相加有进位,加上进位}r[10-i-j] = a; //保存运算结果r[9-i-j] = b;r[8-i-j] = c;r[7-i-j] = d;r[6-i-j] = e;}}cout<<"Theresultis:"<<x[0]<<x[1]<<x[2]<<x[3]<<"*"<<y[0]<<y[1]<<y[2]<<y[3]<<"="< <r[3]<<r[4]<<r[5]<<r[6]<<r[7]<<r[8]<<r[9]<<r[10]<<'\n';return 0;}四、实验结果。
汇编语言实验报告
汇编语言实验报告一、实验目的(1)熟悉汇编程序的汇编、连接、执行过程;(2)生成LST文件,查看LST文件;(3)生成OBJ文件,修改语法错误;(4)生成EXE文件;(5)执行程序。
二、实验涉及知识汇编程序从编写到执行的过程编程?.ASM?编译?.OBJ?连接?.EXE?加载?内存中的程序?执行1)编写源程序用EDIT或记事本输入各段,并存储成源程序(保存在MASM目录下),扩展名为ASM。
2)对源程序进行汇编、连接操作如下:(1)在DOS状态下,进入MASM目录;(2)输入命令:MASM 文件名(连同扩展名);(3)在系统出现的提示中输入:object filename[.obj]:按回车键。
Source listling[nul.lst]:输入:文件主名,生成lst文件,也可以不生成,直接按回车键。
Lst文件用于查看编译为目标文件的过程中产生的中间结果。
Cross-reference [nul.crf]:按回车键。
(4)如果系统没有提示出错,那么编译过程就完成了。
如果提示错误则应用edit打开源文件进行修改,然后再重复2和3步骤。
(5)输入:link 文件主名(不要输扩展名,也可以输入扩展名.obj)run file [.exe]:按回车键。
List file [nul.map]:按回车键。
Libraries [.lib]:按回车键。
(6)没有提示错误,汇编过程就结束了,产生了exe可执行文件。
如果出现‘no strack segment’的错误警告,不用理会。
3)执行程序(由DOS中的COMMAND命令将文件加载入内存)在DOS提示符下直接输入文件主名就可以执行文件了。
程序执行后,有的会显示结果,有的可能执行后什么结果都没有,是因为程序中没有显示命令。
三、实验内容1)将下面的数据段输入,取名1.ASM,保存在MASM文件夹下。
生成LST文件,(不必连接、运行)用EDIT查看1.LST文件。
《汇编语言》实验报告模板实验一
成 绩 评 定 教师签名: 2015 年 月 日
1. 熟练操作宏汇编的开发环境,熟悉汇编语言的编译工具(MASM6.11)及调试器
(Windbg)的使用。
2. 掌握汇编语言的寻址方式和常用指令。 3. 掌握汇编语言基本的程序设计方法和调试手段。 4. 掌握子程序和宏指令的设计和调试手段。
实验要求:
1. 上机前应做好充分的准备。对选定的实验题要先进行设计包括程序框图、数据
2、执行结果截图
内容包括:总结经验提高编程及调试能力。调试情况,如上机时遇到的问题及解决的办 法,观察到的现象及其分析,对程序设计技巧的总结及分析等;程序的输出结果及对结 果的分析;实验的心得体会等。
实 验 结 果 分 析 及 心 得 体 会
通过本次实验熟悉了汇编语言的寻址方式和一些常用指令(运算,循环,过程及 其调用) ,了解了汇编语言中程序的特点,掌握了汇编语言中程序编写的方法,完善了 编写一个完整的简单程序的整体思维结构。
grade 2 ? percent 2 ? grade 3 ? percent 3 ? 75 20 82 60
score is : 81 提示: 总评成绩 = (期中成绩×百分比 1+实验成绩×百分比 2+期末成绩×百分比 3)/100
1、程序清单。 数据段:
.DATA ; reserve storage for data grade1 DWORD ? grade2 DWORD ? grade3 DWORD ? string BYTE 20 DUP (?) prompt1 BYTE "Please input the grade1 : ",0 prompt2 BYTE "Please input the percent of the grade1 : ",0 prompt3 BYTE "Please input the grade2 : ",0 prompt4 BYTE "Please input the percent of the grade2 : ",0 prompt5 BYTE "Please input the grade3 : ",0 prompt6 BYTE "Please input the percent of the grade3 : ",0 prompt7 BYTE "The result is : ",cr,lf,0 sum DWORD ? result BYTE 20 DUP (?) BYTE cr,lf,0
汇编语言实验报告
院系:计算机科学学院专业:计算机科学与技术年级: 2009级课程名称:汇编语言程序设计学号: 09061138姓名:石强指导教师:童小念2011年6月16日;显示九九乘法表.386.MODEL FLATExitProcess PROTO NEAR32 stdcall, dwExitCode:DWORD INCLUDE io.hcr EQU 0dhLf EQU 0ah.STACK 4096.DA TAdirections BYTE cr,lf,"9x9 table is: "outvalue BYTE 11 DUP (?),0lable1 BYTE "*",0lable2 BYTE "=",0lable3 BYTE cr,lf,0nub dword 0.CODE_start:output directions ;输出提示output lable3mov ecx,0mov eax,9mov nub,eaxmov eax,0while_1: ;外循环控制各行output lable3inc ecxmov ebx,1cmp ecx,nubjna until1jmp endwhile1until1: ;内循环控制各列cmp ebx,ecxja while_1mov eax,ebxmul ecxdtoa outvalue,ecx ;输出被乘数output outvalue+9output lable1dtoa outvalue,ebx ;输出乘数output outvalue+9output lable2dtoa outvalue,eax ;输出乘积output outvalue+9inc ebxcmp ebx,ecxjna until1jmp while_1endwhile1:INVOKE ExitProcess,0PUBLIC _startEND实验心得:.386.MODEL FLATExitProcess PROTO NEAR32 stdcall, dwExitCode:DWORD INCLUDE io.hcr EQU 0dhLf EQU 0ahmaxNbrs EQU 10.STACK 4096.DA TAdirections byte "please enter ten numbers:",cr,lf,lf,0leiji dword 10tms dword 1prompt1 BYTE "The turn is:",0prompt2 BYTE cr,lf,lf,0prompt BYTE "Number? ",0number byte 20 DUP (?)nbrArray DWORD maxNbrs DUP (?)nbrElts DWORD ?avgLabel BYTE cr,Lf,Lf,"The sum is"outValue BYTE 11 DUP (?),0sum dword 0aboveLabel BYTE cr,Lf,"the numbers:",cr,Lf,Lf,0.CODE_start:output directionsmov nbrElts,0lea ebx,nbrArraywhilePos: cmp nbrElts,10 ;输入数组je endWhileoutput promptinput number,20atod numbermov [ebx],eaxinc nbrEltsadd ebx,4jmp whilePosendWhile:lea ebx,nbrArraymov tms,ebxdo_0:dec leiji ;比较次数累计cmp leiji,0je endpaixumov ecx,leijimov ebx,tmsdo_3:mov eax,[ebx+4] ;前后两数大小比较cmp eax,[ebx]jng do_2add ebx,4loop do_3cmp ecx,0je do_0do_2:xchg eax,[ebx] ;交换,小数在前大数在后mov dword ptr [ebx+4],eaxadd ebx,4loop do_3cmp ecx,0je do_0endpaixu:lea ebx,nbrArraymov ecx,nbrEltsoutput prompt1forout2:dtoa outValue,[ebx] ;输出output outValueadd ebx,4loop forout2INVOKE ExitProcess, 0 ;结束PUBLIC _startEND心得体会:通过本次试验我学会了一些字符串的基本操作,对字符串的基本运用有了一定的字符查找:;Program:;Author:;Date:.386.MODEL FLATExitProcess PROTO NEAR32 stdcall, dwExitCode:DWORDINCLUDE io.h ; header file for input/outputPublic _startcr EQU 0dh ; carriage return characterLf EQU 0ah ; line feed.STACK 4096 ; reserve 4096-byte stack.DA TA ; reserve storage for dataindex_1 Byte "please entry the string:",0index_2 Byte cr,lf,lf,"the character you found is:",0string Byte 80 DUP (?)char byte 5 DUP (?)inr DWORD ?ine DWORD ?put Byte 8 dup (?)byte cr,lf,".",0labell byte cr,lf,"the local of the character is :",0labell_1 byte "not found!",0crlf byte cr,lf,0.CODE ; start of main program code _start:output index_1input string, 80lea eax,stringpush eaxcall strlenmov ecx,eaxinc ecxmov inr,ecxmov edx,0output index_2input char,5mov al,charlea edi,stringcldoutput labellL2:cmp al,[edi]je L3inc ediloop L2cmp edx,1je L5jmp L4;dec EDIL3:mov ebx,inrmov ine,ebxinc inesub ine,ecx;mov ebx,inedtoa put,ineoutput putdec ecxmov edx,1inc edijmp L2L4 :output labell_1L5:INVOKE ExitProcess, 0 ; exit with return code 0strlen PROC NEAR32push ebpmov ebp,esppushfpush ebxsub eax,eaxmov ebx,[ebp+8]L1:cmp Byte Ptr [ebx],0je L1Endinc eaxinc ebxjmp L1L1end:pop ebxpopfpop ebpret 4strlen EndpEND ; end of source code。
汇编语言综合实验报告
汇编语言综合实验报告一、引言在计算机科学领域,汇编语言是一种低级别的编程语言,用来直接控制计算机硬件。
汇编语言编写的程序可以直接访问计算机的内存和寄存器,因此在一些特定领域,如嵌入式系统开发和操作系统内核编程中得到广泛应用。
本实验旨在通过编写汇编语言程序,加深对计算机底层工作原理的理解,并提升编程技能。
二、实验目的本实验旨在掌握使用汇编语言编写程序的基本方法和技巧,通过实践将理论知识转化为实际应用能力。
具体目标如下:1. 理解汇编语言的基本结构和语法;2. 掌握寄存器的使用方法和常见指令的含义;3. 实现特定功能的汇编语言程序,并验证其正确性。
三、实验内容本次实验共包含三个实际问题,分别是:求两个整数的和、判断一个数是否为素数以及计算斐波那契数列中的第n项。
下面将分别介绍每个问题的解决方法和实现步骤。
1. 求两个整数的和要求编写一段汇编语言程序,输入两个整数,输出它们的和。
程序的具体实现步骤如下:(1)将第一个整数存入寄存器A;(2)将第二个整数存入寄存器B;(3)将寄存器A和寄存器B的值相加,结果存入寄存器C;(4)将寄存器C的值输出,作为程序的结果。
2. 判断一个数是否为素数要求编写一段汇编语言程序,输入一个整数,判断它是否为素数,并输出结果。
程序的具体实现步骤如下:(1)将待判断的整数存入寄存器A;(2)用2到sqrt(A)之间的所有整数去除A,如果能整除则判定为非素数,跳转到步骤(4);(3)将寄存器A的值输出,作为结果,并结束程序;(4)将“非素数”输出,作为结果,并结束程序。
3. 计算斐波那契数列中的第n项要求编写一段汇编语言程序,输入一个正整数n,计算斐波那契数列中的第n项,并输出结果。
程序的具体实现步骤如下:(1)将n存入寄存器A;(2)将寄存器A的值减1得到n-1,并将其存入寄存器B;(3)将寄存器A的值减2得到n-2,并将其存入寄存器C;(4)计算n-1和n-2这两个值对应的斐波那契数列项的值,分别存入寄存器D和寄存器E;(5)将寄存器D和寄存器E的值相加,结果存入寄存器F,并将寄存器F的值输出,作为程序的结果。
汇编实验报告一实验总结
汇编实验报告一实验总结
实验报告一:汇编实验总结
实验目的:通过汇编实验,掌握汇编语言的基本语法和编程技巧,加深对计算
机底层工作原理的理解。
实验过程:在实验中,我们首先学习了汇编语言的基本语法和指令格式,包括
寄存器的使用、内存地址的访问、算术运算和逻辑运算等。
随后,我们进行了
一系列的编程练习,包括编写简单的程序来实现加法、乘法、比较大小等功能。
在实验的最后阶段,我们还学习了如何调用系统中断来实现输入输出操作。
实验结果:通过本次实验,我们深入了解了汇编语言的编程技巧和应用场景。
我们不仅掌握了汇编语言的基本语法,还学会了如何编写简单的汇编程序来实
现一些基本的功能。
同时,通过实验,我们对计算机底层的工作原理有了更深
入的理解,对计算机系统的运行机制有了更清晰的认识。
实验总结:本次汇编实验让我们深入了解了汇编语言的基本知识和编程技巧,
为我们今后的学习和工作打下了坚实的基础。
通过实验,我们不仅学会了如何
使用汇编语言编写程序,还对计算机系统的底层工作原理有了更深入的理解。
希望在今后的学习和工作中,我们能够继续深入研究汇编语言,不断提高自己
的编程水平,为计算机科学技术的发展贡献自己的力量。
汇编语言实验报告
汇编语言实验报告引言:汇编语言作为低级语言之一,在计算机科学领域具有重要的地位。
本篇文章将围绕汇编语言的实验进行讨论,重点探索汇编语言在计算机编程中的应用和优势。
通过实际的实验过程,我们能够更加深入地认识汇编语言的特点和使用方法。
本报告将从实验的准备工作、实验的步骤、实验结果以及实验心得等方面进行论述。
实验准备:在开始实验之前,准备工作是非常重要的。
首先,我们需要下载安装合适的汇编语言开发环境,比如MASM或者NASM。
接着,我们需要理解汇编语言的基本知识,包括寄存器、内存和指令等的概念。
此外,我们还需要掌握一些基本的汇编语言指令,比如MOV、ADD、SUB等。
这些准备工作对于我们能够顺利进行实验具有关键性的作用。
实验步骤:在实验过程中,我们经历了一系列的步骤,下面将一一进行介绍。
1. 确定实验目标:在进行实验之前,我们需要明确实验的目标和要达到的结果。
比如,我们可以选择实现一个简单的计算器程序,能够实现基本的加减乘除运算。
这样的目标可以帮助我们更好地理解汇编语言的使用方法和语法规则。
2. 编写代码:在明确了实验目标之后,我们开始编写汇编语言代码。
首先,我们需要定义一些变量和常量,以便在程序中使用。
然后,我们根据实验目标,逐步编写实现相应功能的代码段。
在这个过程中,我们需要注意汇编语言的特点,比如大小写敏感、指令的书写格式等。
3. 调试程序:编写完代码后,我们需要对程序进行调试,以确保其功能的正确性。
在调试过程中,我们会使用一些调试工具,比如调试器,帮助我们找出代码中的错误并进行修复。
通过调试,我们能够提高代码的质量和效率。
4. 运行程序:在完成调试之后,我们开始运行程序,观察程序的运行结果。
通过不断运行和测试,我们可以检验程序的正确性和可靠性。
如果程序能够输出我们预期的结果,那么说明我们的实验成功了。
实验结果:在我们进行实验的过程中,我们获得了一些令人满意的结果。
通过编写汇编语言代码,我们成功实现了一个简单的计算器程序。
汇编语言实验报告——累乘
《汇编语言》实验报告——累乘2014级计算机科学与工程学院学号:姓名:一、实验要求:1、输入一个数字字串,将字串转化为数值并存储到变量N中。
2、使用递归调用计算N!3、将计算结果转化为字串进行输出。
二、流程图:1.输入:2.计算:3.输出:三、源代码:data segmentstr1 db"Input n:","$"str2 db"n!=","$"n dw 0result dw 0data endscode segmentassume ds:data,cs:code start:mov ax,datamov ds,axlea dx,str1;显示输入提示语mov ah,9int 21hcall input;调用输入子程序lea dx,str2;显示结果提示语mov ah,9int 21hmov ah,0call fac;调用计算子程序call outp;调用输出子程序mov ah,4chint 21hinput proccin:mov ah,1;输入并判断是否为回车int 21hcmp al,0dhjz end1sub al,"0";转化为16进制数mov ah,0push ax;用堆栈保护数据mov ax,n;此段将前一次输入的数据*10shl ax,1push axmov cl,2shl ax,clxor bx,bxpop bxadd ax,bxxor bx,bx;得出输入结果并放进npop bxadd ax,bxmov n,axjmp cinend1:mov ax,1;将ax内容初始化为1retinput endpfac procxor bx,bxmov bx,ncmp bx,0;判断计算是否停止jz end2mul bx;将ax*bx结果放入axmov result,axdec bx;bx和n中的值-1mov n,bxcall fac;递归调用计算程序直至最后一个乘的数字为1 end2:retfac endpoutp proc ;定义子程序用于输出mov cx,0div1:mov dx,0;此段将结果的每一位由低到高放入堆栈mov bx,10div bxadd dx,"0"push dxinc cx;记录放入堆栈的位数cmp ax,0jnz div1output:mov dx,0;此段将堆栈中的数据逐个输出pop dxmov ah,02hint 21hloop outputretoutp endpcode endsend start四、运行结果截图:五、实验心得:本次实验的目的是通过对子程序的应用来实现对N!的计算,其特点在于利用子程序将主程序分为几个小部分,逐步解决问题;其中应用的难点在于对子程序的递归调用,调用自身来进行反复计算时要注意子程序开始执行以及递归调用时的条件,理清逻辑结构才能避免出现混乱。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
lea dx,str1;显示输入提示语 mov ah,9 int 21h
call input;调用输入子程序
lea dx,str2;显示结果提示语 mov ah,9 int 21h
mov ah,0
call fac;调用计算子程序
call outp ;调用输出子程序
mov ah,4ch int 21h
《汇编语言》实验报告
——累乘
2014 级计算机科学与工程学院 学号:
姓名:
一、实验要求:
1、输入一个数字字串,将字串转化为数值并存储到变量 N 中。
2、使用递归调用计算 N!
3、将计算结果转化为字串进行输出。
二、流程图:
开始
输入 N
计算 N!
输出结果
结束
1.输入:
开始
判断输入是
否
否为回车
ax 放入 堆栈
outp endp code ends
end start
四、运行结果截图:
五、实验心得:
本次实验的目的是通过对子程序的应用来实现对 N!的计算,其
特点在于利用子程序将主程序分为几个小部分,逐步解决问题;其中 应用的难点在于对子程序的递归调用,调用自身来进行反复计算时要 注意子程序开始执行以及递归调用时的条件,理清逻辑结构才能避免 出现混乱。
div1:mov dx,0;此段将结果的每一位由低到高放入堆栈 mov bx,10 div bx add dx,"0" push dx inc cx;记录放入堆栈的位数 cmp ax,0 jnz div1
output: mov dx,0;此段将堆栈中的数据逐个输出 pop dx mov ah,02h int 21h loop output ret
是
初始化 ax=1 便于计算
2.计算:
开始
N 移到 bx
结束
两次出栈并与 n*4 结果相加 得出新的 n
bx 是否为
是
0
ax 移至 result,bx 值减 1 并
移到 N
否
ax*bx 结果 放入 ax
n 值*2 放入堆
n*4
结束
3.输出:
开始
将结果除以 10 并将余
数放入堆栈
否
三、源代码:
data segment str1 db "Input n:","$" str2 db "n!=","$" n dw 0 result dw 0 data ends code segment assume ds:data,cs:code start: mov ax,data mov ds,ax
cmp bx,0;判断计算是否停止 jz end2 mul bx;将 ax*bx 结果放入 ax mov result,ax
dec bx;bx 和 n 中的值-1 mov n,bx call fac;递归调用计算程序直至最后一个乘的数字为 1 end2: ret fac endp
outp proc ;定义子程序用于输出 mov cx,0
cx 值 +1 记 录位数
判断商是 否为 0
将堆栈中 cx 记录位 数的数字输出
是
结束
input proc cin:
mov ah,1;输入并判断是否为回车 int 21h cmp al,0dh jz end1
sub al,"0";转化为 16 进制数 mov ah,0 push ax;用堆栈保护数据
mov ax,n;此段将前一次输入的数据*10 shl ax,1 push ax mov cl,2 shl ax,cl xor bx,bx pop bx add ax,bx
xor bx,bx;得出输入结果并放进 n pop bx add ax,bx mov n,ax jmp cin end1: mov ax,1;将 ax 内容初始化为 1 ret input endp fac proc xor bx,bx mov bx,n