汇编语言——子程序

合集下载

《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 )

汇编语言——子程序

汇编语言——子程序

6.2.2.2 RET指令 指令 【指令格式】RET 【功能】这是子程序返回指令,必须写在子程序的指令 序列之中。根据所在的子程序的类型不同,RET指令的功能 也分为两种情况: (1)如果RET所在子程序是NEAR类型,则从堆栈中出 栈一个字(当然,SP会加2),送给IP。 (2)如果RET所在子程序是FAR类型,则先从堆栈中出 栈一个字送到IP,再出栈一个字送到CS,栈顶指SP的值加4。
cr
PROC NEAR MOV AH,2 MOV DL,13 INT 21H MOV DL,10 INT 21H RET
cr ENDP main:MOV AX,dseg MOV DS,AX LEA DX,buf MOV AH,10 INT 21H CALL cr MOV AH,1 INT 21H MOV BL,AL ;输入一个字符 ;用BL保存读入的字符 ;输入一个符号串
【解】程序段(a)中,先把AX赋值为102H,再把BX赋 值为304H,然后用ADD指令把两数相加,和为406H,结果 放在ADD指令的目的操作数AX中。 程序段(b)的前两行与(a)完全相同,AX取值102H,BX 取值304H,但在相加之前调用了子程序cr。从例6.3中cr的 具体实现方法可以知道,调用过程中寄存器AH的值被改为 2,因为INT 21H输出功能,使AL的值也被修改,变成0AH, 并且这个值一直保持到调用结束,于是“CALL cr”指令调 用子程序后,AX的值不再是调用前的102H,而变成了 20AH,当ADD指令进行两个寄存器相加时,结果是50EH, 并放到目的操作数AX中。
6.3 应用子程序进行编程
6.3.1 子程序实例
【例6.3】分析下列程序,描述它的功能。 dseg SEGMENT buf DB 80,81 DUP(0) dseg ENDS sseg SEGMENT STACK DW 64 DUP(0) sseg ENDS cseg SEGMENT ASSUME CS:cseg,DS:dseg,SS:sseg

第5章 汇编语言程序

第5章 汇编语言程序

Y
条件满足?
N
处理段
例5-5 设内部RAM30H,31H单元存放两个无符号数, 将大数存在31H,小数存于30H。 ORG 1000H START:CLR C MOV A,30H SUBB A,31H JC NEXT ;次序符合,返回 MOV A,30H ;交换 XCH A,31H MOV 30H,A NEXT: NOP SJMP $ END
$
5-3 分支程序
由条件转移指令构成程序判断框,形成程序分支结构。 5-3-1 单重分支程序 一个判断决策框,程序有两条出路。 两种分支结构: 例1 求R2中补码绝对值,正数不变, 影响条件 负数变补。
MOV A,R2 JNB ACC.7,NEXT;为正数? CPL A ;负数变补 INC A MOV R2,A NEXT:SJMP NEXT ;结束
五、对源程序进行交叉汇编得到机器代码; 反汇编 —— 分析现成产品的程序,要将二进制 的机器代码语言程序翻译成汇编语言源程序。
六、程序调试。
通过微计算机的串行口(或并行口)把机器代 码传送到用户样机(或在线仿真器)进行程序 的调试和运行。
5.1.3评价程序质量的标准
(1)程序的执行时间。 (2)程序所占用的内存字节数。 (3)程序的逻辑性、可读性。 (4)程序的兼容性、可扩展性。 (5)程序的可靠性。
方法二:采用除10H取余数将BCD拆开 ORG 1000H MOV A,20H; 2B 1T MOV B,#10H ; 3B 2T DIV AB ; 1B 4T ORL B,#30H ; 3B 2T MOV 22H,B ; 3B 2T ORL A,#30H; 2B 1T MOV 21H,A ; 2B 1T SJMP $ END;7条指令、16个内存字节、13个机器周期。

汇编语言之子程序

汇编语言之子程序

汇编语言之子程序汇编语言是一种底层编程语言,是计算机指令的集合表示形式。

在汇编语言中,子程序是一段独立的、可重复使用的代码片段,可以在程序中被多次调用。

子程序可以帮助我们实现代码的模块化,提高代码的可读性和可维护性。

本文将介绍如何在汇编语言中使用子程序以及其工作原理。

一、子程序的定义和使用在汇编语言中,子程序由一系列指令组成,这些指令可以完成特定的功能。

子程序可以通过call指令被调用,执行完子程序后会返回到调用子程序的指令处,继续执行程序的下一条指令。

在使用子程序前,我们需要先定义子程序。

定义子程序的语法如下:```subroutine_name:; 子程序代码ret```其中,subroutine_name是子程序的名称,可以根据实际需求自定义。

ret指令用于返回到调用子程序的指令处,继续执行程序的下一条指令。

调用子程序的语法如下:```call subroutine_name```其中,subroutine_name是要调用的子程序的名称。

二、传递参数和返回值子程序可以接收参数,并且可以有返回值。

在调用子程序时,可以通过寄存器或栈来传递参数。

在子程序内部,可以通过相应的寄存器或栈地址来获取参数的值。

例如,我们定义一个计算两个数之和的子程序add:```add:mov ax, [bp+4] ; 获取第一个参数的值add ax, [bp+6] ; 获取第二个参数的值ret```在主程序中调用add子程序:```mov ax, 5 ; 第一个参数mov bx, 10 ; 第二个参数call add ; 调用add子程序; 此时ax寄存器中的值为15,即5+10的结果```在子程序add中,我们通过寻址方式获取传递的参数,并将计算结果存入ax寄存器中,供主程序使用。

三、保存和恢复寄存器在汇编语言中,调用子程序时需要保存和恢复寄存器的值,以保证程序的正确执行。

在调用子程序前,我们可以使用push指令将需要保存的寄存器值压栈,然后在子程序的开头使用相应的pop指令将值弹出并恢复。

汇编语言程序设计实例

汇编语言程序设计实例汇编语言是一种非常底层的编程语言,它允许程序员直接与计算机硬件进行交互。

汇编语言程序设计通常用于需要高性能或者对硬件有特定需求的场合。

以下是一些汇编语言程序设计的实例,以帮助理解其基本结构和应用。

实例一:数据传输在汇编语言中,数据传输是最基本的操作之一。

以下是一个简单的数据传输程序实例,它将一个立即数(即直接给出的数值)移动到寄存器中:```assemblymov ax, 1234h ; 将十六进制数1234h移动到ax寄存器```实例二:算术运算汇编语言支持基本的算术运算,如加法、减法、乘法和除法。

以下是一个进行加法运算的例子:```assemblymov ax, 5 ; 将数值5移动到ax寄存器add ax, 3 ; 将数值3加到ax寄存器中```实例三:条件跳转条件跳转是控制程序流程的重要手段。

以下是一个基于条件跳转的简单程序,它检查ax寄存器的值是否为0,并根据结果跳转到不同的代码段:```assemblymov ax, 0 ; 将数值0移动到ax寄存器jz zero ; 如果ax为0,则跳转到标签zero; 继续执行其他代码...zero:; 如果ax为0,执行这里的代码```实例四:循环结构循环结构在汇编语言中实现起来较为复杂,但可以通过重复使用跳转指令来模拟。

以下是一个简单的循环结构实例,它将ax寄存器的值减1,直到值为0:```assemblystart_loop:dec ax ; 将ax寄存器的值减1jnz start_loop ; 如果ax不为0,跳回start_loop```实例五:字符串处理汇编语言程序设计中,字符串处理是一个常见的任务。

以下是一个将字符串从源地址复制到目标地址的程序:```assemblymov si, source ; 将源字符串的地址移动到si寄存器mov di, dest ; 将目标地址移动到di寄存器mov cx, length ; 将字符串的长度移动到cx寄存器copy_loop:movsb ; 从si复制一个字节到diloop copy_loop ; 减少cx的值并重复循环直到cx为0```实例六:子程序调用在汇编语言中,子程序是一种将代码封装成模块化单元的方法。

浅谈汇编语言中子程序的设计

教材新探
r 。+ ”+ +
“+ + ” + + ‘+ + “+ “+ 。
。+ ’+ + ’
‘ ’ +
“+ ’+ ’
“+

浅谈汇编 中子 语言
■+ . . . .+ ” + . + 一 + . . + 一 + . . + - + 一 + + 一 + ” + 一 + ・ ・ 一 + + 一 + ・ ・

是 否按 “ 进 先 出” 后 的原 则 组 织 的 。 () 2堆栈保 护。子程 序是利用调用 C I AL 指令 和返 回 R T 指令来 实现正确 的调用 和返 回 的。因 E
为C Au 命令执 行 时压 入堆栈 的断 点地 址就 是供 子程序返 回主程序 时的地址 , 编程 时一定 要注 意子
程 序 的类 型 属 性 , 是 段 内 调 用 还 是 段 间 调 用 。段 即 内调 用 和 返 回为 N A 属 性 , 问 调 用 和 返 回 为 E R 段 F R 属性 。8 8 / 0 8的 汇编 程 序用 子 程序 定 义 A 0 68 8 P ( 的 类 型 属 性 来 确 定 C L和 R T 指令 的 属 R) C AL E 性 。如 果 所 定 义 的 子 程 序 是 F AR 属 性 , 么 对 它 那 的调用和返 回一定都是 F R A 属性 ; 如果所定义的子 程 序 是 NE R A 属性 , 么 对 它 的 调 用 和 返 回 也 一 定 那 是 NE R A 属 性 。这 样 用 户 只 是 在 定 义 子 程 序 时 考 虑它的属性 , C I 而 AL 和 R T指 令 的 属 性 就 可 以 E 由 汇 编 程 序 来 确 定 了 。另 外 , 入 子 程 序 后 再 使 用 进 堆 栈 时 也 必 须 保 证 压 人 和 弹 出 字 节 数 一 致 , 果 在 如 这 里 堆 栈 存 取 出错 , 然 会 导 致 返 回地 址 的 错 误 。 必 2 参 数传 递 . 主程序在调用子程序 时 , 经常要 向子程 序传递 些参数或控 制信息 , 子程序执行后 , 也常需要把运 行的结果返 回调用程序 。这种信息传递称 为参数传 递, 其常用 的方 法有 寄存 器传 递 、 内存 固定单 元传 递 、 栈传递 。 堆 ( ) 存 器 传 递 。 由 主 程 序 将 要 传 递 的参 数 装 1寄 入事先 约定 的寄存 器 中, 转入子 程序后 再取 出进行 处 理 , 种 方 法 受 C U 内 部 寄 存 器 数 量 限 制 , 此 这 P 因 只适 于传 递 少 量 参 数 的 场 合 , 一 些 常 见 的 软 件 延 如 时子程序 , 均是利用某寄存器传递循环计数 器初值 。 ( ) 过 内存 固 定 单 元 的 传 递 。此 方 法 适 于 大 2通 量传递参数时使用 , 它是在 内存 中开辟特 定 的一片 区域用于传递参数 。主程序和子程序都按事先约定 在指定 的存储单元 中进行数据 交换 , 这种 方法要 占

汇编语言-子程序


随着指令的丰富、子程序的引入,汇编语言的表达也越来越灵 活。为了方便地组织数据,引入了结构伪操作STRUC。 STRUC可以把不同类型的数据放在同一个结构里,方便处理。 a). 结构类型说明格式为: structure_name STRUC … ;DB、DW、DD等伪操作 structure_name ENDS 注意:ENDS之前为结构名,注意与段结束相区别。 例如:下列语句说明了一个名STUDENT的结构类型: STUDENT STRUC ID DW ? SCORE DB 0 NAME DB „ABCDEFGH‟ STUDENT ENDS 但是,定义一个结构类型的时候不进行任何存储器分配,只有 在定义结构变量时才进行存储分配。
b). 结构变量的定义 格式是: [变量名] 结构名 < [字段值表]> 例:Lisi STUDENT <103 , 88 , „LI‟> ;三个字段重新赋值 Wangwu STUDENT <104 ,, „WANG‟> ;字段SCORE仍用缺省 值 Zhangsan STUDENT <> ;三个字段均用缺省初值 Team STUDENT 50 DUP (<>) ;定义50个结构变量,初值不变 在定义结构变量时,如果某个字段有多值,就不能给该字段重 新赋初值(定义时存在“DUP”, “ , , , ”等)。 c). 访问方式 访问方式:结构变量名.结构字段名 该变量的地址实质少年宫是结构变量地址的偏移பைடு நூலகம்相应字段偏 移值之和。 例:Zhangsan.ID ;访问张三的学号,实际上是直接寻址 还可以把结构变量地址的偏移先存入某个基址或变址寄存器, 然后利用“[寄存器名]”来代替结构变量名。 例如:MOV BX , OFFSET Zhangsan MOV AL , [BX].SCORE

汇编子程序的一般结构组成。

汇编子程序的一般结构组成。

汇编子程序是一段独立的程序代码,可以被其他程序调用。

它的一般结构由以下几个部分组成:
1. 子程序头部:包括子程序的名称、输入参数和输出参数的说
明等。

2. 参数传递:子程序的输入参数和输出参数通过栈或寄存器传递。

3. 保存寄存器:在进入子程序之前,需要保存一些寄存器的值,以免在执行子程序时被覆盖。

4. 执行程序:这是子程序的核心部分,实现子程序的功能。

5. 恢复寄存器:在退出子程序之前,需要还原保存的寄存器的值。

6. 返回值:如果子程序有返回值,需要将其保存在寄存器或栈中,并通过ret指令返回给调用程序。

以上是汇编子程序的一般结构组成,不同的子程序可能会有差异。

编写子程序需要熟悉汇编语言的基础知识和调试技巧,能够理解程序的逻辑思路、掌握数据结构和算法,才能编写出高效、稳定的子程序。

- 1 -。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档