汇编语言实验报告 累乘

合集下载

汇编语言程序设计实验报告四(算术运算程序实验)

汇编语言程序设计实验报告四(算术运算程序实验)

汇编语言程序设计实验报告四(算术运算程序实验)汇编语言程序设计实验报告四(算术运算程序实验)一、实验目的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的阶乘

微机原理实验报告---汇编语言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四、实验测试截图五、实验心得:本次试验的目的在于通过编辑累加器程序来熟悉汇编语言中对循环结构的使用,其中包括循环输入字符并判断合法性、累加计算、循环输出计算结果。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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
相关文档
最新文档