汇编子程序设计(n!)

合集下载

汇编语言程序设计

汇编语言程序设计

6)组合运算符(属性修改运算符) ① PTR运算符:运算符PTR可以指定或修改存储器操作数的 类型。注意,这种修改是临时性的,仅在该语句内有效。 下面是使用PTR运算符的例子: 例10 INC BYTE PTR[BX] 该语句的目的操作数是内存单元,用寄存器作为地址指 针。如果仅仅使用[BX]来表示该操作数,则汇编该语句时 ,不能确定该存储单元是字节单元还是字单元。因此,必 须使用BYTE PTR说明它为字节操作数(若为字操作数, 则使用WORD PTR说明)。
4)分析运算符:分析运算符有:SEG、OFFSET、TYPE、 LENGTH和SIZE。 ① SEG运算符:利用SEG运算符可以得到一个标号或变量的段 基值。下面的指令将ARRAY的段基值送给DS寄存器。 例4 MOV AX,SEG ARRAY MOV DS,AX ② OFFSET运算符:利用OFFSET运算符可以得到一个标号或 变量的偏移量。下面的指令将STRING的偏移地址送给DX。 例5 MOV DX,OFFSET STRING ③ TYPE运算符:运算符TYPE的运算结果是一个数值,这个数 值与操作数类型的对应关系见表4-1。
4.1.3
汇编语言的表达式
(3)表达式。表达式是操作数常见的形式,它由常数、变量 、标号通过操作运算符连接而成。 汇编语言中有:算术运算符、逻辑运算符和关系运算符等 。 1)算术运算符:常用的有:+(加)、–(减)、*(乘)、/ (除)和MOD(模运算)等,算术运算的结果是一个数值 。 例1 MOV AX,VARX+2 表示VARX的地址加2后对应的存储字单元内容送给AX。 2)逻辑运算符:AND(逻辑“与”)、OR(逻辑“或”) 、NOT(逻辑“非”)和XOR(逻辑“异或”)。逻辑运算 用于数值表达式中对数值进行按位逻辑运算,并得到一个数 值结果。 例2 MOV AL,0FH AND 35H 表示将0FH与35H按位相与后得到05H送给AL, 这条指令 与MOV AL, 05H 等效。

《IBM PC 80X86汇编语言程序设计》PPT电子课件教案-第六章 子程序设计

《IBM PC 80X86汇编语言程序设计》PPT电子课件教案-第六章 子程序设计

《IBM PC 80X86汇编语言程序设计》
冶金工业出版社
第6章
1、子程序的概念和特点
子程序:把在程序中多次出现,具有独立功能 的程序段写成程序模块,该模块可被多次调用, 称之为子程序。
特点:①可重复使用(调用) ②具有通用性(可通过入口参数实现) ③可浮动性(存放位置灵活) ④可递归性和可重入性
第6章
第六章 子程序设计
一、子程序的定义 二、子程序的结构形式
三、子程序的设计和调用 四、子程序的参数传递方法 五、子程序的嵌套和递归调用 六、子程序的设计举例 七、多模块程序设计 八、汇编语言和高级语言的混合编程
《IBM PC 80X86汇编语言程序设计》
冶金工业出版社
第6章
一、子程序的定义
1、子程序的概念和特点 2、子程序的定义 3、子程序的调用和返回
《IBM PC 80X86汇编语言程序设计》
冶金工业出版社
第6章
2、子程序的定义
子程序的定义是由过程定义伪指令PROC和ENDP 来完成的。其格式如下:
过程名 PROC [NEAR/FAR]

过程名 ENDP
其中PROC表示过程定义开始,ENDP表示过程定 义结束。过程名是过程入口地址的符号表示。
一般过程名同标号一样,具有三种属性,即段 属性、偏移地址属性以及类型属性。
《IBM PC 80X86汇编语言程序设计》
冶金工业出版社
第6章
3、子程序的调用和返回
❖ 调用
①段内直接调用
格式:CALL 子程序名
功能:将子程序返回地址(断点)入栈
SP←SP-2
(SP)←IP,
并转到子程序入口地址去执行子程序。
❖ 返回指令

汇编语言程序设计方法

汇编语言程序设计方法

C 名字前加 下划线
从右到左 调用程序

SYSCALL
从右到左 被调用程序

STDCALL 名字前加
下划线 (注)
被调用程序

PASCAL 名字变大写
BASIC 名字大写
FORTRAN 名字大写
从左到右 被调用程序

从左到右 被调用程序

从左到右 被调用程序

12
PROTO是过程声明伪指令,用于事先声明过程的结构。它的格 式如下:
结束处理部分
AGAIN: ADD AX,CX
;从20,19,……2,1倒序累加到AX
LOOP AGAIN ;每循环一遍,CX自动减1
MOV SUM,AX ;将累加和送入SUM单元
.EXIT 0
END
初始化部分
循环结束? 是 否
工作部分 修改部分 结束处理部分
7
二、用MASM 6.x循环控制伪指令实现循环结构
.CODE
.STARTUP
MOV AL, B
IMUL AL
MOV BX,AX MOV AL,A
;BX中为B的平方
IMUL C
MOV CX,4
IMUL CX
;AX中为4AC
.IF SWORD PTR BX>=AX ;比较B的平方和4AC的大小
MOV SIGN,1
;条件成立,SIGN得到1
.ELSE
MOV SIGN,0
.IF 条件表达式 ;条件为真(非0),执行分支体
分支体
[.ELSEIF 条件表达式
分支体
;前面IF条件为假,并且当前ELSEIF条件为真执行分支体
[.ELSE
;前面IF条件为假执行分支体

“汇编语言与微机原理”课程教学中汇编子程序实验设计

“汇编语言与微机原理”课程教学中汇编子程序实验设计

5 8 ・
Co mp u t e r Er a No. 2 2 01 3
“ 汇 编语言与 微机原理’ ’ 课 程教学中 汇编子 程序实 验设计
赵 永标 。张 其林 ,詹 彬 ,康长 青
( 湖北文理学院数学与计算机科学学院,湖北 襄阳 4 4 1 0 5 3 )
摘 要 :“ 汇编语 言与微 机原理” 是 计算机科 学与技术 专业 的必修基 础课 程。在教 学中汇编语 言子程序 实验设计普遍存
关键词 :汇编语言 ;子程序 ;宏 ;中断 ;实验设计 中图分类号 : G6 4 2 文献标志码 : B 文章 编号 : 1 0 0 6 — 8 2 2 8 ( 2 0 1 3 ) 0 2 — 5 8 — 0 2
Ex p e r i me n t a l d e s i g n o f a s s e mb l y s u b — r o u t i n e s i n “ a s s e mb l y l a n g u a g e a n d mi c r o c o mp u t e r p r i n c i p l e ’ ’
Z h a o Y o n g b i a o ,Z h a n g Qi l i n ,Z h a n Bi n ,Ka n g C h a n g q i n g
( S c h o o l o f M a t h e m a t i c s a n d C o m p u t e r S c i e n c e , H u b e i U n i v e r s i t y f o A r t a n d S c i e n c e , X i a n g y a n g , H u b e i 4 4 1 0 5 3 ,C h i n a )

汇编语言程序设计

汇编语言程序设计

第4章 汇编语言程序设计
例4.4 显示两位压缩BCD码值(00~99) ,要求不显示前导0。 本例一方面要排除前导0的情况,另一方面 对于全0情况又必须显示一个0,所以形 成了两个双分支结构的程序。
第4章 汇编语言程序设计 DATA SEGMENT BCD DB 04H ; 给出一个BCD码数据 DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA BEGIN: MOV AX, DATA MOV DS, AX MOV DL,BCD ;取BCD码 TEST DL,0FFH ;如果这个BCD码是0,则显示为0 JZ ZERO TEST DL,0F0H ;如果这个BCD码高位是0,不显示 JZ ONE MOV CL,4 ;BCD码高位右移为低位 SHR DL,CL OR DL,30H ;转换为ASCII码 MOV AH,2 ;显示 INT 21H
第4章 汇编语言程序设计 ADC MOV MOV MUL ADD DX,0 W+4,DX AX,A B+2 W+2,AX ;部分积2的高16位与进位相加 ;结果保存到从W+4开始的内存单元 ;取被乘数的低16位 ;与乘数的高16位相乘,得到部分积3 ;部分积3的低16位与W+2开始的内存单元相加 ;结果保存在从W+2开始的内存单元 ;部分积3的高16位与W+4开始的内存单元及 ;进位相加,结果保存在从W+4开始的内存单元 ;把进位值保存在从W+6开始的内存单元 ;取被乘数的高16位 ;与乘数的高16位相乘,得到部分积4 ;部分积4的低16位与W+4开始的内存单元相加 ;结果保存在从W+4开始的内存单元 ;部分积4的高16位与W+6开始的内存单元及 ;进位相加,结果保存在从W+6开始的内存单元

汇编语言程序设计的基本方法

汇编语言程序设计的基本方法

01
例2 编写程序,计算(W-(X*Y+Z-100))/W,其中W、X、Y、Z均为16位带符号数,计算结果的商存入AX,余数存入DX。
02
例3 把非压缩十进制数DAT1转换为压缩十进制数
例2编写程序,计算(W-(X*Y+Z-100))/W,其中W、X、Y、Z均为16位带符号数,计算结果的商存入AX,余数存入DX。
通常,编制一个汇编语言源程序应按如下步骤进行:
1
明确任务,确定算法。
2
绘制流程图(包括确定内存单元和分配寄存器)。
3
根据流程图编写汇编语言程序。
4
上机调试程序。
5
程序的基本结构有四种:顺序结构、分支结构、循环结构和子程序结构。
6
5.6 汇编语言程序设计的基本方法
5.6.1 顺序程序设计
顺序结构也称线性结构,其特点是其中的语句或结构被连续执行。 顺序程序是最简单的,也是最基本的一种程序结构。这种结构的程序从开始到结尾一直是顺序执行的,中途没有任何分支。从这种结构的流程图来看,除了有一个起始框,一个终止框外,就是若干执行框,没有判断框。指令指针IP值线形增加,IP=IP+1
条件
N

例4用比较指令和条件转移指令实现两路分支的程序段。
两路分支程序设计
例4用比较指令和条件转移指令实现两路分支的程序段。 … MOV AX,M ;假定M和N为有符号数 MOV BX,N CMP AX,BX ;比较 M和N的大小,影响标志位,准备条件 JG NEXT ;M>N时转移,注意若M、N为无符号数时用JA指令 …… ;分支程序2 JMP DONE NEXT: …… ;分支程序1 …… DONE:RET
X+20 (X≥0)

习题-汇编语言程序设计

习题-汇编语言程序设计

第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区域的程序。

汇编语言程序设计

汇编语言程序设计

段寄存器赋值
在DOS环境下运行程序时,DOS的装载程序对寄 存器CS:IP、SS:SP作正确的初始化,而将段寄存 器DS、ES初始化为程序段前缀PSP的起点,而不是用 户所需的地址。因此段寄存器DS、ES的赋值还要有程 序本身来完成。如 MOV AX,DATA MOV DS,AX 注意这里的MOV 指令,其源操作数是段名,它是把 段名对应段的基地址送给目的操作数,这是传送指令 中的一个特殊情况。
汇编语言程序语句的格式
注释域以分号打头,注释部分是编程者对指令的作 用所作的言简意赅的说明。汇编语言不对这部分汇编。
• 汇编语言中的标号或名字或其他变量名(统称标识符)


必须是由字母或特殊字符打头的字母数字串,中间不能 有空格。合法的字符包括:字母 A~Z 或 a~z ;数字 0~9 ; 特殊字符有问号(?)、圆点(.)、@、下横线(_) 和美元符号($),圆点只能作为第一个字符。 标号和名字的长度不超过31个字符,超过部分均被删 去。 标识符不能和保留字重名
MASM.EXE是用于8088/8086、80286、80386等CPU的微机上的一种宏汇编 程序。它支持多模块的程序设计,由它生成的目标程序可直接和其他模块的汇编 语言程序的目标程序相连接,也可直接和其它高级语言程序的目标程序模块相连 接。
8088/8086汇编语言程序的上机操作过程:
1)根据任务要求,应用指令系统给定的指令编制程序; 2)利用编辑软件如EDIT等将程序输入计算机,程序名后缀*.asm; 3)应用MASM.EXE对.asm程序进行汇编,得到*.obj和*.lst文件; 4)应用LINK.EXE程序对.obj文件进行连接定位,得到*. exe文件; 5)执行*. exe文件,应用文件进行调试、查看文件执行情 况。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

学生课程实验报告书
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
指导教师评语:
实验成绩_______________ 指导教师_______________。

相关文档
最新文档