汇编子程序设计(n!)
- 格式:doc
- 大小:42.00 KB
- 文档页数:2
第4章习题-汇编语言程序设计(单片机第二版)(总20页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--第四章习题与参考答案程序设计语言有哪三种各有什么异同汇编语言有哪两类语言各有什么特点在汇编语言程序设计中,为什么要采用标号来表示地址标号的构成原则是什么使用标号有什么限制注释段起什么作用MCS-51汇编语言有哪几条常用伪指令各起什么作用汇编语言程序设计分哪几步各步骤的任务是什么汇编语言源程序的机器汇编过程是什么第二次汇编的任务是什么请用除法指令编写例的程序,并计算所占内存字节数和所需机器周期数。
设内部RAM 20H 单元有两个非零的BCD数,请编写求两个BCD数的积并把积送入21H单元的程序。
元。
请编写可以统计其中正数和负数个数并分别存入NUM和NUM+1单元的程序。
设自变量X为一无符号数,存放在内部RAM的VAX单元,函数Y存放在FUNC单元。
请编写满足如下关系的程序:X>=50时:Y=X;50>X>=20时:Y=5X;X<20时:Y=2X;在例的128分支程序中,若用LJMP指令代替AJMP指令,以便分支程序可以放在64KB 地址范围的任务位置。
请修改原程序,修改后的程序最多可实现多少个分支从外部RAM的SOUCE(二进制8位)开始有一数据块,该数据块以$字符结尾。
请编写程序,把它们传送到以内部RAM的DIST为起始地址的区域($字符也要传送)。
在例中,若SOUCE为二进制16位,则程序又该如何编。
在外部RAM的低256地址单元区,有起始地址为SOUCE且长度存放在LEN单元的数据块。
请编写能对它们进行奇偶校验的程序。
凡满足奇校验(奇数个1)的数据均送到内部RAM起始地址为DIST的存储区。
在例中,若SOUCE的地址不在外部RAM的滴56地址区,则程序该如何编写。
外部RAM从2000H到2100H有一数据块,请编写将它们传送到从3000H到3100H区域的程序。
汇编子程序设计阶乘汇编语言是一种底层的程序语言,用于编写机器指令的程序。
子程序设计是汇编语言的一个重要概念,用于将程序模块化以便重复使用。
阶乘是一个经典的数学问题,定义为对于正整数n,阶乘的值表示为n!,等于从1到n的所有正整数相乘的结果。
例如,5!=5×4×3×2×1=120。
在汇编语言中,实现阶乘可以通过递归或迭代的方式完成。
下面我们将详细讨论这两种方法。
一、递归方式实现阶乘:递归方式是一种将问题分解为更小规模的子问题的编程技术。
在实现阶乘时,可以通过递归方式计算出n-1的阶乘,然后将结果与n相乘得到n。
以下是使用递归方式实现阶乘的汇编代码示例:```assemblysection .dataresult db 1section .textglobal _start_start:mov eax, 5call factorialmov [result], eax;此处可添加输出结果的代码mov eax, 1int 0x80factorial:push ebpmov ebp, espmov eax, [ebp+8] ; 读取传入的参数n cmp eax, 1jle end_factorialdec eaxpush eaxcall factorialpop eaximul eax, [ebp+8] ; 计算阶乘结果end_factorial:mov esp, ebppop ebpret```以上代码中,_start是程序的入口点。
我们传入参数5给阶乘的子程序,然后将结果存储在result变量中。
请注意,在第一个call指令后,我们将使用eax寄存器存储结果。
factorial是计算阶乘的子程序。
我们通过比较n是否小于等于1来确定是否终止递归。
如果n大于1,则我们将n减1,并将其压入栈中作为下一次递归的参数。
然后,我们通过调用相同的子程序计算n-1的阶乘结果。
青岛理工大学课程实验报告
课程名称汇编语言程序设计班级实验日期
2013.11.3
姓名学号实验成绩
实验
名称
子程序
实验目的及要求1.掌握子程序设计相关指令和伪指令的使用方法
2.掌握子程序设计方法, 特别是参数传递方法
3.掌握主程序和子程序之间的调用关系和调用方法
4.熟悉循环和子程序结合应用解答问题的思路
实验环境1.命令行方式
2.MASM.EXE LINK.EXE DEBUG.EXE
实验内容1.设DATA1开始的内存单元中, 存放着一串带符号字数据, 要求采用冒泡排序算法(Bubble Sort)按照从小到大的顺序排序并将排好序的数据存在DATA1开始的单元。
然后在显示器输出排好序的数据, 中间用’,’隔开。
2.输出数据使用子程序方式。
算法描述及实验步骤步骤:
(1)设置数据段地址
(2)设置堆栈段地址
(3)设置堆栈指针
(4)调用9号功能, 输出一个提示性字符串。
(5)循环进入子程序, 输出原始数据。
(6)在子程序内循环输出每一位的十进制数字。
(7)主程序进行内外循环, 进行冒泡排序。
(8)再一次调用子程序输出排序后的结果。
调试过程及实验结果调试过程:
(2)(1)在输出时, 调用DOS 9号功能, 并不是只要语句MOV AH,09H
(3)它是存在入口条件的, 入口条件:DS:DX=输出字符缓冲区首地址。
所以前面必须加上MOV DX,OFFSET NOTE1。
(4)汇编语言是不会再输出汉字的。
(5)子程序结束时一定要有RET
(6)冒泡排序也遇到一些困难。
调试结果:。
汇编语言子程序设计实验心得(精选5篇)在刚进入大学得知数学专业也要学习程序设计的时候,我的内心充满了喜悦,因为我喜欢数学的同时,一样喜欢计算机。
虽说程序设计只是计算机专业的冰山一角,但这却是基础,所以我下定决心要学好它。
前段时间,我们学习了前五章的内容。
第一章主要对c语言进行了简单的介绍;第二章便是对最基础知识的介绍:C语言的数据类型、常用的简单符号、运算符的结合性等;而第三章就开始进行一些简单的算术运算了,千万别以为这就是小学数学水平的东西,其实这跟数学还是有差别的;第四章键盘输入和屏幕输出就是告诉我们如何进行人机交流,把自己的东西输入电脑,再在屏幕上显示出来;第五章便开始利用计算机进行程序设计来解决生活中的实际问题,而这就需要一个很重要的结构——选择控制结构。
虽然刚开始学习的内容还不是很多,但我却在这为时不长的学习中,深深地感受到了c语言的魅力,以及它强大的“功效”:C语言语言虽简单,但表达能力却强,使用起来灵活方便,而且程序设计自由度大,我们可以从多角度寻找解决问题的方案。
虽然人的能力很强,但不是所有问题解决的最佳途径依赖于人,有时候依靠C语言既省时又省力。
就像对很多的数据进行运算时,对人来说可谓是一项大工程,一点不注意就会全盘皆输,要重新来过,让人头大;而对计算机来说,它只会执行你的指令,不管其他,没有枯燥,不懂乏味,更重要的是,效率尤其高。
不止计算,C语言还有很多用处。
刚开始的时候,我错误的认为C语言跟数学没有太大差别。
然而接触过后我才发现自己错的很离谱。
虽然C语言与数学有着难舍难分的关系,但C语言就是C 语言,它有着自己的语言,自己的思想跟自己的规则。
我们可以借助数学更好的掌握C语言,但不能因此混淆二者。
就像数学语言在程序中是不一定能够识别的(“=”在数学中是等于,在C语言中是赋值,C语言中的等于是“==”),虽然数学对C语言帮助很大,但C语言却不会因此就放你程序通过,不识别就是不识别,除非你用我自己的东西。
汇编子程序设计实验心得(精选5篇)汇编子程序设计实验心得【篇1】经过了一周左右密集的学习,仔细地回顾和评估了自己学习的过程,我切实地发现28定律在编程学习中同样发挥着作用。
在很长一段时间以前的学习中,我总是试图把一本书从头读到尾,或者是找一个视频课,想要从头到尾跟着做,但结果不是做不完放弃,就是看完之后感觉到还是什么都不会。
这一周我发现了编程学习中那百分之二十产生效益的地方在哪,因此将改善学习方法,提升效率。
简要地说,编程学习的那百分之二十飞速提升效率的地方就在代码上。
这听起来很荒谬,编程不就是写代码吗?但在实际的学习中,我确实时常犯下这个错误,就是绝大多数的精力并没有放在代码上。
我思考了一下改善学习的流程:在资料充分的情况下,理当先拿到源代码,然后查看源代码的输入和输出。
搞清楚这一段源代码的效果是什么.然后接下来对源代码写注释,逐行搞清楚源代码中每一句的意思,并且借此补充知识,不需要记忆,就是通过注释写明就好了。
搞清楚原理,然后写作出来。
尝试清楚明确地讲明白这段代码背后的概念是什么,原理是什么。
做完这三步之后马上循环写下一个项目,以项目到项目的方式来进展,试图把前面写过的项目追加到后面的项目中去,去连接学过的内容,并且就此复习。
同样不需要记忆,只要查看原来写过的东西就好了了。
接下来的学习中将彻底实践此方法论,并且在下一个阶段评估学习的效率。
汇编子程序设计实验心得【篇2】经过五天的Java实训,感触很深,收获也很大,对自己的缺点也有了很多的认识,回首本学期JAVA学习,重点还是在学习概念等一些常识性的东西,关于类型、变量、接口、输入输出流、分析异常、抛出异常,后期主要是小程序运用,Gui界面设计和事件。
在我学习的语言中,我自己认为Java是一门比较强大的面向对象的编程语言,不仅仅是因为它的跨平台型还有它的较强的实用性,强悍的嵌入性。
本次实训主要是针对我们对项目流程不熟悉和对整体项目的把握不清楚,学习数据库的设计和表的建设以及表与表之间的联系,还有一些代码的编写,这些都是我们所不熟悉的也是我们最薄弱的部分。
南通大学计算机类课程实验报告MOV [Z],AX ;将最后的结果送给ZMOV AH,4CH ;返回DOSINT 21HCODE ENDSEND START(如不够,请另附纸)六、实验结果七、实验存在问题和解决办法问题:在实验过程中,对指令不熟悉,以至于不熟悉命令的应用及debug的调用命令。
代码还不能灵活运用,编写代码有所困难。
解决办法:多试调试。
八、实验心得和建议对于DEBUG的追踪还不熟悉,不过在指导老师的认真教导下,我们渐渐了解了汇编语言。
也能读懂一些简单的汇编语言。
我觉得在以后的学习中,我们必须要加强汇编语言的学习力度。
在学习过程中,不仅要大量阅读源程序,分析其功能,而且要借鉴他人的经验,练习编写完成特定功能的源程序。
南通大学计算机类课程实验报告MOV AH,2INT 21HMOV AH,4CH ;返回DOSINT 21HCODE ENDSEND START(如不够,请另附纸)六、实验结果七、实验存在问题和解决办法问题:在实验过程中,对指令不熟悉,以至于不熟悉命令的应用及debug的调用命令。
代码还不能灵活运用,编写代码有所困难。
解决办法:多试调试。
八、实验心得和建议第二次做汇编实验了,在心理上已没有了第一次做实验的那种茫然不知。
在实验中遇到的错误很多,并且无论怎样修改都还是不能使程序达到完美的状态的时候,情绪会比较不稳定,这时候才知道,编写程序除了有思路,有想法,有语言知识,还要有很强大的心理,要有耐心,才能去面对这一连串的错误。
在学习过程中,不仅要大量阅读源程序,分析其功能,而且要借鉴他人的经验,练习编写完成特定功能的源程序。
南通大学计算机类课程实验报告PUSH DXMOV DL,0AHMOV AH,2INT 21HPOP DXPOP AXRETCRLF ENDPCODE ENDSEND START(如不够,请另附纸)(如不够,请另附纸)六、实验结果七、实验存在问题和解决办法问题:在实验过程中,对指令不熟悉,以至于不熟悉命令的应用及debug的调用命令。
学生课程实验报告书
2014--2015学年第1学期
实验项目:子程序设计(n!)
实验时间: 2014-10-30
实验原理:
在一个程序中如果其中有些内容完全相同或相似,为了简化程序,可以把这些重复的程序段单独列出,并按一定的格式编写成子程序。
用递归方式求出n!。
实验仪器:
Emu8086编译器
实验步骤(纸张不够写可另外加纸并应装订):
DATA SEGMENT
NUM DW 5
FNUM DW ?
DATA ENDS
STACKS SEGMENT
DW 100 DUP(?)
STACKS ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
BEGIN: MOV AX,DATA
MOV DS,AX ;将数据段基值装入DS
MOV AX,NUM ;取N
PUSH AX ;利用堆栈传递参数
CALL FAC ;调用递归子程序
POP FNUM ;送结果
MOV AX,4C00H ;返回DOS
INT 21H
FAC PROC
PUSH AX ;保存调用参数
PUSH BP ;保存每帧的帧地址(偏移量)
MOV BP,SP ;当前帧地址(栈顶地址)送BP寄存器 MOV AX,[BP+6];取参数N
CMP AX,0 ;N = 0 ?
JNZ FACSUB ;N≠0,继续递归调用
INC AX ;若N=0,则0!=1
JMP EXIT ;由递归调用过程转递次返回过程FACSUB: DEC AX ;N-1送AX
PUSH AX ;保护各次调用参数
CALL FAC ;递归调用
POP AX ;从堆栈中弹出每次压入的参数
MUL WORD PTR [BP+6];计算各参数的乘积EXIT: MOV [BP+6],AX ;保存中间结果和最后结果
MOV DX,AX
POP BP ;恢复BP内容
POP AX ;恢复AX内容
RET ;返回所调用程序
FAC ENDP
CODE ENDS
END BEGIN
指导教师评语:
实验成绩_______________ 指导教师_______________。