汇编语言子程序设计

合集下载

汇编语言子程序设计实验心得总结 汇编语言程序设计实验心得体会汇总

汇编语言子程序设计实验心得总结 汇编语言程序设计实验心得体会汇总

汇编语言子程序设计实验心得总结汇编语言程序设计实验心得体会汇总心得体会是指一种读书、理论后所写的感受性文字。

那么我们写心得体会要注意的内容有什么呢?接下来我就给大家介绍一下如何才能写好一篇心得体会吧,我们一起来看一看吧。

汇编语言子程序设计实验心得总结汇编语言程序设计实验心得体会篇一做了两周的课程设计,有很多的心得体会,更多的是同学之间的合作精神,这道课程设计花了我们一到两周的时间,几人合作,老师的帮助才完成。

我第一次完成这么完美的杰作,心理有一份别样的滋味,在设计过程中,我付出了很多,也懂得了只有付出才有回报。

在这次设计中,我遇到了很多困难,但我没有向困难低头,通过查询资料,虚心向同学、老师请教,才一一得到理解决。

我发现平时学的太少了,在今后我要把老师在课堂讲的弄懂,弄透,在此根底上利用课余时间多看课外书籍,拓宽知识面。

在设计过程中,合作精神必不可少。

单凭一个人的力量是不能完成的,毕竟一个人学的很有限。

每个人掌握的不同。

我相信:态度决定一切,只有努力才有收获。

第二天我就着手画计数器图形,虽然有些人图形已画好,可我没有着急,毕竟别人花的时间比我多,为了使图形美观我不断运行、调试,直到自己满意为止。

接下来是星期五,说实话那天蛮难熬的,一天都泡在机房。

眼睛有点吃不消,可没有方法,将来我们就靠计算机吃饭,再苦再累也要坚持。

在已编好的程序上又加了一点精华,怎样使字符闪烁,这也是我们几个人互相讨论的结果。

第二周,通过周末到网上查的资料,和参考资料又参加计数器的灵魂算法。

接下来几天再将程序不断完善、加工,计数器程序初露头角。

小结:程序设计过程有如解决一实际问题,从解决实际问题的角度,我们可以这样来看:要理解这个问题的根本要求,即输入、输出、完成从输入到输出的要求是什么;从问题的要害入手,从前到后的解决问题的每个方面,即从输入开始入手,着重考虑如何从输入导出输出,在这个过程中,可确定所需的变量、数组、函数,确定处理过程--算法。

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

北京理工大学汇编实验五实验报告概要

北京理工大学汇编实验五实验报告概要

本科实验报告实验名称:子程序设计实验实验五子程序设计实验(设计性实验)一、实验要求和目的1.熟悉汇编语言程序设计结构;2.熟悉汇编语言子程序设计方法;3.熟悉利用汇编语言子程序参数传递方法;4.熟悉汇编语言字符串处理基本指令的使用方法;5.掌握利用汇编语言实现字符串的输入输出程序设计方法;6.掌握数制转换程序实现方法。

二、软硬件环境1、硬件环境:计算机系统windows;2、软件环境:装有MASM、DEBUG、LINK、等应用程序。

三、实验涉及的主要知识A)子程序知识要点:1、掌握子程序的定义语句;过程名PROC [near/far] 过程体RET过程名ENDP2.子程序结构形式一个完整的子程序一般应包含下列内容:1. )子程序的说明部分在设计了程序时,要建立子程序的文档说明,使用户能清楚此子程序的功能和调用方法.说明时,应含如下内容:.子程序名:命名时要名中见意..子程序的功能:说明子程序完成的任务;.子程序入口参数:说明子程序运行所需参数及存放位置;.子程序出口参数:说明子程序运行结果的参数及存放位置;.子程序所占用的寄存器和工作单元;.子程序调用示例;2、)掌握子程序的调用与返回在汇编语言中,子程序的调用用CALL,返回用RET指令来完成。

.段内调用与返回:调用子程序指令与子程序同在一个段内。

因此只修改IP;.段间调用与返回:调用子程序与子程序分别在不同的段,因此在返回时,需同时修改CS:IP。

3.)子程序的现场保护与恢复保护现场:在子程序设计时,CPU内部寄存器内容的保护和恢复。

一般利用堆栈实现现场保护和恢复的格式:过程名PROC[NEAR/FAR]PUSH AXPUSH BX..PUSH DX...POP DX...POP AXRET过程名ENDP4.子程序的参数传递方法1.寄存器传递参数这种方式是最基本的参数传递方式。

2.存储器单元传(变量)递参数这种方法是在主程序调用子程序前,将入口参数存放到约定的存储单元中;子程序运行时到约定存储位置读取参数;子程序执行结束后将结果也放在约定存储单元中。

单片机应用技术(第三版)第四章汇编语言程序设计课件

单片机应用技术(第三版)第四章汇编语言程序设计课件
第4章 汇编语言程序设计
第4章 汇编语言程序设 计 实训4 信号灯的控制2
4.1 概述 4.2 简单程序设计 4.3 分支程序设计 4.4 循环程序设计 4.5 查表程序 4.6 子程序设计与堆栈技术 本章小结 习题4
第4章 汇编语言程序设计
实训4 信号灯的控制2
1. 实训目的 (1) 掌握汇编语言程序的基本结构。 (2) 了解汇编语言程序设计的基本方法和思路。 2. 实训设备与器件 (1) 实训设备:单片机开发系统、微机等。 (2) 实训器件与电路:参见实训1电路图。 3. 实训步骤与要求 (1) 运行程序1,观察8个发光二极管的亮灭状态。
ORG 0000H ;程序从地址0000H开始存放
START: MOV P1,#00H
;把立即数00H送P1口,点亮
;所有发光二极管
ACALL DELAБайду номын сангаас ;调用延时子程序
MOV P1,#0FFH
;灭掉所有发光二极管
第4章 汇编语言程序设计
(2) 在单片机开发调试环境中,将内部RAM的20H单元内
容修改为00H,运行程序2,观察8个发光二极管的亮灭状态;
重新将内部RAM的20H单元内容修改为80H,再次运行程序2,
观察8个发光二极管的亮灭状态。
(3) 运行程序3,观察8个发光二极管的亮灭状态。
程序1:所有发光二极管不停地闪动。

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

浅谈汇编语言中子程序的设计
教材新探
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通 量传递参数时使用 , 它是在 内存 中开辟特 定 的一片 区域用于传递参数 。主程序和子程序都按事先约定 在指定 的存储单元 中进行数据 交换 , 这种 方法要 占

汇编语言实验报告_6

汇编语言实验报告_6

青岛理工大学课程实验报告
课程名称汇编语言程序设计班级实验日期
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)冒泡排序也遇到一些困难。

调试结果:。

微机原理软件实验报告

微机原理软件实验报告

实验名称:汇编语言程序设计实验日期:2023年3月10日实验地点:计算机实验室实验者:张三一、实验目的1. 熟悉汇编语言的基本语法和指令系统。

2. 掌握汇编语言程序设计的基本方法。

3. 通过实验,加深对微机原理的理解。

二、实验内容本次实验主要涉及以下内容:1. 数据传送指令的应用2. 算术运算指令的应用3. 控制转移指令的应用4. 子程序设计三、实验步骤1. 编写一个简单的程序,实现以下功能:(1)将数据0x1234存入寄存器AX;(2)将数据0x5678存入寄存器BX;(3)计算AX和BX的乘积,并将结果存入寄存器DX;(4)将乘积的高16位和低16位分别存入寄存器CX和AX。

2. 编写一个程序,实现以下功能:(1)将数据0x1A2B3C4D存入内存单元[0x1000];(2)从内存单元[0x1000]开始,读取连续4个字节的数据;3. 编写一个程序,实现以下功能:(1)定义一个子程序,实现两个整数的加法运算;(2)在主程序中调用该子程序,实现两个整数的加法运算。

四、实验结果与分析1. 数据传送指令的应用(1)将数据0x1234存入寄存器AX;MOV AX, 0x1234(2)将数据0x5678存入寄存器BX;MOV BX, 0x5678(3)计算AX和BX的乘积,并将结果存入寄存器DX;MUL BX(4)将乘积的高16位和低16位分别存入寄存器CX和AX; MOV CX, DXMOV AX, DX2. 算术运算指令的应用(1)将数据0x1A2B3C4D存入内存单元[0x1000];MOV [0x1000], 0x1A2B3C4D(2)从内存单元[0x1000]开始,读取连续4个字节的数据; MOV AX, [0x1000]MOV BX, [0x1000+2]MOV CX, [0x1000+4]MOV DX, [0x1000+6]MOV AH, 0x0EINT 0x103. 控制转移指令的应用(1)定义一个子程序,实现两个整数的加法运算;ADD procedure:ADD AX, BXRET(2)在主程序中调用该子程序,实现两个整数的加法运算;MOV AX, 0x1MOV BX, 0x2CALL ADDMOV CX, AX五、实验心得通过本次实验,我深刻理解了汇编语言的基本语法和指令系统,掌握了汇编语言程序设计的基本方法。

汇编语言的16位除法子程序

汇编语言的16位除法子程序
;占用:A、B。
;-------------------------------------
R23DIVR45:
MOV DPTR, #0
D_LOOP:
CLR C
MOV A, R3
SUBB A, R5
MOV B, A
MOV A, R2
SUBB A, R4 ;R2R3-R4R5
JC DIV_E ;有借位转移
INC DPTR
MOV R3, B
MOV R2, A
SJMP D_LOOP
DIV_E:
RET ;不够减就结束
下列程序,对数值范围的要求很宽松,被除数、除数和商,都可以是16位数,这比网上常见的16位除8位的除法程序,适用面要广得多。
注意,除数为0的问题,应该在主程序中进行检测。
;-------------------------------------
;16位/16位的子程序
;被除数:R2R3、除数:R4R5;商:DPTR、余数:R2R3。
汇编语言的16位除法子程序
应邀写个汇编语言的除法子程序。
编写除法子程序,有两种算法,移位相减的方法和循环相减的方法。
移位相减的方法是仿照人们做除法的竖式编写,执行速度较快,但是计算的原理,一般人不好理解,难以让大家推广到更多的字节。故此下面采用循环相减的思路来编写程序。
设计思路:所谓除法,就是要求出在被除数中,含有多少个除数。那么就用被除数连续的减去除数,直到不够减为止,够减的次数,就是商,不够减的数值,就是余数。
;-------------------------------------
;பைடு நூலகம்
对于R2R3中的余数,还应该有个“四舍五入”的程序。

汇编语言程序设计实验报告

汇编语言程序设计实验报告

班级 :
二、实验内容 求 1+2+3+4+5+6+7+8+9 的和,并将和显示在屏幕上; 具体要求: 1. 利用重复宏定义实现 1、2、39 数据的定义; 2. 将单个字符显示定义成宏,利用宏调用来实现和的显示。 3. 利用 PWB 集成环境完成程序的编辑、汇编及连接,并最终生成 COM 可执行文件。
二、实验内容 P131 作业 29。
实验三子Βιβλιοθήκη 序设计实验一、实验目的 1.掌握汇编语言源程序子程序设计方法; 2.会使用 CV 软件工具。
二、实验内容 把实验二作为子程序,编写主程序来对能否构成三角形进行 10 判断。
姓名:
汇编语言程序设计实 验报告
实验四
宏汇编程序设计实验
一、实验目的 1.掌握宏汇编程序编程技术及宏调用的方法; 2. 了解 COM 文件的编程方法及特点; 2.会使用 PWB 及 CV 软件工具。
实验五
混合程序的开发实验
一、实验目的 1.了解混合调用中的参数设置; 2. 掌握混合调用的方法;
姓名:
二、实验内容 P156 第 5 题。
汇编语言程序设计实 验报告
班级 :
姓名:
汇编语言程序设计实 验报告
实验一
单指令功能测试实验
一、实验目的 1.会使用 DEBUG 软件; 2.利用 DEBUG 单步执行功能测试指令的执行。
班级 :
二、实验内容 P129,14 题
实验二
完整的汇编语言程序设计实验
一、实验目的 1.掌握完整的汇编语言源程序的设计方法; 2.掌握汇编语言源程序的执行过程。
实验五
多模块程序设计实验
一、实验目的 1.掌握汇编段的属性的含义; 2. 掌握利用 LINK 将多模块连接起来的方法; 3.掌握利用库文件将多模块连接起来的方法。

汇编子程序设计实验心得(精选5篇)

汇编子程序设计实验心得(精选5篇)

汇编子程序设计实验心得(精选5篇)汇编子程序设计实验心得【篇1】经过了一周左右密集的学习,仔细地回顾和评估了自己学习的过程,我切实地发现28定律在编程学习中同样发挥着作用。

在很长一段时间以前的学习中,我总是试图把一本书从头读到尾,或者是找一个视频课,想要从头到尾跟着做,但结果不是做不完放弃,就是看完之后感觉到还是什么都不会。

这一周我发现了编程学习中那百分之二十产生效益的地方在哪,因此将改善学习方法,提升效率。

简要地说,编程学习的那百分之二十飞速提升效率的地方就在代码上。

这听起来很荒谬,编程不就是写代码吗?但在实际的学习中,我确实时常犯下这个错误,就是绝大多数的精力并没有放在代码上。

我思考了一下改善学习的流程:在资料充分的情况下,理当先拿到源代码,然后查看源代码的输入和输出。

搞清楚这一段源代码的效果是什么.然后接下来对源代码写注释,逐行搞清楚源代码中每一句的意思,并且借此补充知识,不需要记忆,就是通过注释写明就好了。

搞清楚原理,然后写作出来。

尝试清楚明确地讲明白这段代码背后的概念是什么,原理是什么。

做完这三步之后马上循环写下一个项目,以项目到项目的方式来进展,试图把前面写过的项目追加到后面的项目中去,去连接学过的内容,并且就此复习。

同样不需要记忆,只要查看原来写过的东西就好了了。

接下来的学习中将彻底实践此方法论,并且在下一个阶段评估学习的效率。

汇编子程序设计实验心得【篇2】经过五天的Java实训,感触很深,收获也很大,对自己的缺点也有了很多的认识,回首本学期JAVA学习,重点还是在学习概念等一些常识性的东西,关于类型、变量、接口、输入输出流、分析异常、抛出异常,后期主要是小程序运用,Gui界面设计和事件。

在我学习的语言中,我自己认为Java是一门比较强大的面向对象的编程语言,不仅仅是因为它的跨平台型还有它的较强的实用性,强悍的嵌入性。

本次实训主要是针对我们对项目流程不熟悉和对整体项目的把握不清楚,学习数据库的设计和表的建设以及表与表之间的联系,还有一些代码的编写,这些都是我们所不熟悉的也是我们最薄弱的部分。

汇编语言子程序设计

汇编语言子程序设计

汇编语言子程序设计汇编语言子程序设计一、介绍在计算机编程中,汇编语言是一种低级语言,它与机器语言非常接近。

汇编语言使用助记符来表示计算机指令,可以直接操作计算机硬件。

而子程序是一种独立的代码块,可以重复使用,实现功能模块化和代码的复用。

二、子程序的定义与声明1:定义子程序:子程序可以通过标签来定义,使用关键字PROC表示开始,使用关键字ENDP表示结束。

例如:```MySubproc PROC:::MySubproc ENDP```2:声明子程序:可以使用EXTERN关键字声明一个外部子程序,以便在代码中调用。

例如:```EXTERN MyExternalSubproc:PROC```三、子程序的参数传递1:寄存器传递:参数可以通过寄存器来传递,常用的寄存器包括AX、BX、CX、DX等。

例如:```MOV AX, 5 ; 将参数5传递给AX寄存器CALL MySubproc ; 调用子程序```2:堆栈传递:参数也可以通过堆栈来传递,使用PUSH指令将参数压入堆栈,使用POP指令将参数从堆栈中取出。

例如:```PUSH 5 ; 将参数5压入堆栈CALL MySubproc ; 调用子程序```四、子程序返回值1:使用寄存器返回值:子程序的返回值可以通过寄存器来传递,常用的寄存器包括AX、BX、CX、DX等。

例如:```MOV AX, 10 ; 子程序返回值为10,存储在AX寄存器中RET ; 返回至调用处```2:使用堆栈返回值:子程序的返回值也可以通过堆栈来传递,使用PUSH指令将返回值压入堆栈,使用RET指令返回至调用处。

例如:```PUSH 10 ; 将子程序返回值10压入堆栈RET ; 返回至调用处```五、子程序的调用1:使用CALL指令调用子程序:使用CALL指令可以调用子程序,调用子程序之前需要将参数准备好,并将返回值保存在适当的寄存器或堆栈中。

例如:```MOV AX, 5 ; 将参数5传递给AX寄存器CALL MySubproc ; 调用子程序```2:使用CALL FAR指令调用外部子程序:如果需要调用位于其他模块或库中的子程序,可以使用CALL FAR指令。

第4章-汇编语言程序设计教案

第4章-汇编语言程序设计教案

第四章教学实施计划3课堂教学实施计划第 8 课教学过程设计:复习 0 分钟;授新课 100 分钟讨论 0 分钟;其它 0 分钟授课类型(请打√):理论课√讨论课□实验课□习题课□其它□教学方式(请打√):讲授√讨论□示教□指导□其它□教学手段(请打√):多媒体√模型□实物□挂图□音像□其它□4.1 汇编语言程序设计概述程序实际上是一系列计算机指令的有序集合。

我们把利用计算机的指令系统来合理地编写出解决某个问题的程序的过程,称为程序设计。

程序设计是单片机应用系统设计的重要组成部分,单片机的全部动作都是在程序的控制下进行的。

随着芯片技术的发展,很多标准的或功能型的硬件电路都集成到了芯片中,所以,软件设计在单片机应用系统开发中占的比重越来越大。

一、汇编语言和高级语言汇编语言:用助记符表示的指令称为汇编语言,用汇编语言编写的程序称为汇编语言源程序汇编语言也是面向机器的,它仍是一种低级语言。

汇编语言离不开具体计算机的硬件,与硬件紧密相关。

高级语言:高级语言不受具体“硬件”的限制,具有通用性强,直观、易懂、易学,可读性好等优点。

多数的51单片机用户使用C语言来进行程序设计。

C语言已经成为人们公认的高级语言中高效、简洁而又贴近51单片机硬件的编程语言。

二、汇编语言的特点•助记符指令和机器指令一一对应,所以用汇编语言编写的程序效率高,占用存储空间小,运行速度快,因此汇编语言能编写出最优化的程序。

•使用汇编语言编程比使用高级语言困难,因为汇编语言是面向计算机的,汇编语言的程序设计人员必须对计算机硬件有相当深入的了解。

•汇编语言能直接访问存储器及接口电路,也能处理中断,因此汇编语言程序能够直接管理和控制硬件设备。

•汇编语言缺乏通用性,程序不易移植,各种计算机都有自己的汇编语言,不同计算机的汇编语言之间不能通用。

三、汇编语言的语句格式•指令语句:每一条指令语句在汇编时都产生一个指令代码(也称机器代码),执行该指令代码对应着机器的一种操作。

第二章--第四节--汇编语言程序设计方法(二)

第二章--第四节--汇编语言程序设计方法(二)
VCC GND 31 19 C2 3 0p F Y1 6 . 00 0M HZ 18 E A/VP X1 AT 8 9C5 1 P0. 0 P0. 1 P0. 2 P0. 3 P0. 4 P0. 5 P0. 6 P0. 7 P2. 0 P2. 1 P2. 2 P2. 3 P2. 4 P2. 5 P2. 6 P2. 7 RD WR PSE N AL E /P T XD RXD 39 38 37 36 35 34 33 32 21 22 23 24 25 26 27 28 17 16 29 30 11 10 VCC R9 4 . 7K GND SW
A+30HA A(22H) 结束
R0
0010 0000
END
BCD码十进制转换成二进制
例:假如在内部RAM40H单元中存储有一个压缩BCD编码 的两位十进制数,设计一段程序把这个数转换成二进制数 并存入41H单元中。 解题思路: (40H) 16 商为二进制的高四位
余数
余为二进制的低四位
将高四位乘以0AH,再加上低四位即可。
数据排序程序 例:将片内RAM中20H-27H中的数据按照从小到大的顺序重新排列。 解题思路:见下图
RAM地址 原始数据
20H 66H
21H 11H
22H 10H
23H 34H
24H 67H
25H 01H
26H 89H
27H A0H
1
2 3 4 5 6 7
01H
01H 01H 01H 01H 01H 01H
11H
10H 10H 10H 10H 10H 10H
10H
11H 11H 11H 11H 11H 11H
34H
34H 34H 34H 34H 34H 34H
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
7.2.1 子程序调用指令
段内直接调用
段内调用
第7章 子程序设计
汇 编 语 言 程 序 设 计
格式: CALL DST/NEAR PTR DST 功能:(1)SP←SP-2 (SP)←IP (2)IP←IP+D16
类 型
格式: CALL DST/WORD 例:CALL MULLPTR DST 段内间接调用 功能 :(1)SP←SP 主程序和子程序处在同一代码段 ,只改变 IP值 -2 (SP)←IP (2)IP←(EA) 格式 : CALL 例: CALLFAR BX PTR DST 段间直接调用 功能:(1) SP← SP-2(SP)← CS CALL WORD PTR [SI] SP← SP-2(SP)← IP (2) IP←子程序偏移地址 CS←子程序段地址 段间调用 格式 :例: CALL DWORD DST 主程序和子程序处不在同一代码段 ,既改变 CALL IP 值也改变 FARPTR PTR CS 值 MULL 段间直接调用 功能:(1) SP← SP-2(SP)← CS SP← SP-2(SP)← IP (2) IP←(EA) CS←(EA+2) 例:CALL DWORD PTR [BX]
第7章 子程序设计
2.子程序调用方法说明 包括: (1)子程序名; (2)子程序功能; (3)占用寄存器; (4)入口参数; (5)输出参数; (6)子程序调用示ห้องสมุดไป่ตู้。
汇 编 语 言 程 序 设 计
第7章 子程序设计
3.现场保护和现场恢复 现场保护:在子程序的功能实现前把将要用到的寄存器中的原有内 容保存起来 现场恢复:子程序的功能实现后,将数据取出再送回原来的寄存器中
例:子程序SUB1中用到了寄存器AX、BX、CX、DX, 注意:现场保护应与现场恢复的顺序正好相反。 则可能的现场保护和现场恢复如下: SUB1 PROC PUSH AX PUSH BX PUSH CX PUSH DX ┆ POP DX POP CX POP BX POP AX RET SUB1 ENDP ;现场保护
含义:被独立出来的程序段称为子程序或过程
主程序与子程序之间的关系
主程序 CALL SUB1 (断点1:) 子程序 SUB1:
汇 编 语 言 程 序 设 计
RET
CALL SUB2 (断点2:)
SUB2:
HTL
RET
7.1.2 子程序的特性
(1)功能独立 (2)通用性
第7章 子程序设计
汇 编 语 言 程 序 设 计
调用SUB1子程序
AX/BX(即m!/n!)送BX
m—n送CX
调用SUB1子程序 AX(即(m—n)!)送BX AX/BX(即m!/n!/ (m—n)!)送AX
存储AX 结束
第7章 子程序设计
DATA SEGMENT M EQU 8 N EQU 3 RES DW ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV CX,N CALL SUB1 ;调子程序计算n! MOV BX,AX MOV CX,M CALL SUB1 ;调子程序计算m! DIV BX ;m!/n!送 AX MOV BX,AX MOV CX,M SUB CX,N CALL SUB1 ;调用子程序,计算(m-n)! XCHG BX,AX DIV BX ;m!/n!/ (m-n)! 送AX MOV RES,AX MOV AH,4CH INT 21H SUB1 PROC ;计算阶乘的子程序 MOV AX,1 NEXT:MUL AX,CX LOOP NEXT RET SUB1 ENDP CODE ENDS END START
RET
7.3 子程序的定义、调用和返回
7.3.1 子程序定义
1.子程序定义伪指令 格式: 〈子程序名〉 PROC NEAR/FAR ┆ ┆ RET 〈子程序名〉 ENDP
第7章 子程序设计
汇 编 语 言 程 序 设 计
说明: (1)主程序和子程序在同一代码段中,定义为NEAR型。 (2)主程序和子程序不在同一代码段中,定义为FAR型。 (3)可将主程序定义为FAR型,看作是DOS调用的一个过程。
第7章 子程序设计
本章主要教学内容
1.子程序调用与返回指令。 2.子程序设计的基本过程和设计方法。
汇 编 语 言 程 序 设 计
本章主要教学目的及要求
1.理解掌握子程序调用与返回指令;
2.掌握子程序设计的基本过程和设计方法;
3.能熟练设计子支程序。
第7章 子程序设计
7.1 概述
7.1.1 子程序设计的概念
汇 编 语 言 程 序 设 计
;子程序功能段 ;现场恢复
4.子程序的设计方法
第7章 子程序设计
汇 编 语 言 程 序 设 计
(1)利用过程定义伪指令声明; (2)利用RET指令返回主程序; (3)对堆栈的压入和弹出操作要成对使用; (4)现场保护和现场恢复; (5)应安排在代码段的主程序之外,也可以放在主程序开始之前; (6)允许嵌套和递归; (7)可以与主程序共用一个数据段,也可以使用不同的数据段; (8)编写可以很灵活,但一定要保证堆栈操作的正确性; (9)处理好子程序和主程序间的参数传递问题(见7.4节); (10)提供必要的子程序说明信息。
子程序定义应用举例 【例7-1】求两个数的最大公约数子程序
第7章 子程序设计
汇 编 语 言 程 序 设 计
子程序调用方法说明: ;子程序名:MCDST ;功 能:求两个正整数的最大公约数; ;入口参数:AX和BX中存放两个正整数; ;出口参数:CX中存放求得的最大公约数; ;寄存器占用:使用AX、BX、CX、DX寄存器,CX中内容被改变, AX、BX、DX中的内容保持不变。
汇 编 语 言 程 序 设 计
第7章 子程序设计
7.4 子程序的参数传递方法
入口参数:主程序调用子程序前,把要加工的数据传给子程序,这
些数据称为入口参数 出口参数:子程序执行完后,要把执行结果传回主程序,这些数据
汇 编 语 言 程 序 设 计
称为出口参数
参数传递方式:寄存器传递、堆栈传递和存储单元传递
[BX]=AX,SI=SI=2,DI=DI+2 BX=BX+2,CX=CX-1
7.4.1 通过寄存器传递参数
第7章 子程序设计
汇 编 语 言 程 序 设 计
含义:主程序把入口参数送入某些寄存器,然后调用子程序,子程序中 直接使用存放入口参数的寄存器进行处理。子程序处理完数据, 将执行结果作为出口参数存入寄存器中,回到主程序,主程序对 存放在寄存器中的出口参数进行相应处理 特点:方便、直观,适于参数较少的情况 注意:用于传递出口参数的寄存器不能进行现场保护和恢复
7.2.2 返回指令
含义:实现子程序执行完后要返回主程序的指令 功能:从堆栈的栈顶弹出数据作为返回地址 分类:段内返回和段间返回
第7章 子程序设计
汇 编 语 言 程 序 设 计
格式: RET 从栈顶弹出一个字数据送入 从栈顶弹出两个字数据分别送入 IP IP和CS 功能: IP←(SP) SP ←SP+2 段内返回
汇 编 语 言 程 序 设 计
第7章 子程序设计 【例7-4】将给定的一组字数据X、Y代入Z=((X+Y)×2-X)×4公式中,计算 相应的Z值
汇 编 语 言 程 序 设 计
开始
取数据区X、Y、Z的首地址分别 送SI、DI、BX,数据个数送CX AX=[SI],DX=[DI] 调SUBR子程序 开始 保护BX、CX寄存器内容 BX=AX AX=((AX+DX)*2-BX)*4 恢复CX、BX寄存器内容 返回 (b)子程序框图
元。并且要求边转换边显示这些ASCII码
第7章 子程序设计
DATA SEGMENT BCDBUF DB 12H,24H,96H,87H,71H,79H,56H,34H,63H,45H COUNT EQU $-BCDBUF ASCBUF DB 20 DUP(?) DATA ENDS STACK SEGMENT PARA STACK ‘STACK’ STAPN DB 100 DUP (?) TOP EQU LENGTH STAPN STACK ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA,SS:STACK START:MOV AX,DATA MOV DS,AX MOV ES,AX MOV AX,STACK MOV SS,AX MOV AX,TOP MOV SP,AX MOV SI,OFFSET BCDBUF;BCD码的内存区首地址 MOV DI,OFFSET ASCBUF;ASCII码的内存区首地址 MOV CX,COUNT ;组合BCD码个数 CLD ;DF=0,按地址递增方式 LP:LODSB ;取一个组合BCD码 MOV BL,AL ;暂存 AND AL,0FH ;屏蔽高4位 OR AL,30H ;BCD码低位转换为ASCII码 MOV DL,AL ;存入DL STOSB ;存入ASCII码存储区 CALL DISP ;调用显示子程序 MOV AL,BL ;取回BCD码 PUSH CX ;保存计数值 MOV CL,4 SHR AL,CL ;取BCD码高4位 OR AL,30H ;BCD码高位转为ASC码 MOV DL,AL ;存入DL STOSB ;存入ASCII码存储区 CALL DISP ;调用显示子程序 POP CX ;弹出计数值 LOOP LP ;计数不为0则继续 MOV AH,4CH;为0则返回DOS INT 21H ;子程序名:DISP ;功能:显示ASCII码字符 ;入口参数:ASCII码在DL中 DISP PROC ;子程序定义开始 MOV AH,2 ;显示ASCII码 INT 21H MOV DL,’ ’ MOV AH,2 INT 21H RET ;返回主程序 DISP ENDP CODE ENDS END START
相关文档
最新文档