二十、子程序设计(函数)
1. 模块化程序设计
把具有一定功能的程序段封装成子程序,以供它人调用。
参数:告诉子程序将要处理哪些数值。
结果:子程序运算后的结果值。
;加法运算
assume cs:code,ds:data,ss:stack
data segment
data endsstack segmentdw 256 dup (0H)
stack endscode segment
start:mov ax,stcakmov ss,axmov sp,60Hmov ax,10Hmov bx,11Hcall s0mov ax,12Hmov bx,31Hcall s0mov ax,bxmov ax,bx;功能:计算两个数值相加后的结果
;参数:AX与BX寄存器中存放加数
;结果:cx寄存器用于存放结果
s0:mov cx,axadd cx,bxretmov ax,4c00Hint 21H
code ends
end start
2. 子程序数据传递
a 通过寄存器传递
b 通过内存传递
c 通过栈传递
;1111H + 2222H + 0333H + 0001H + 0002H
assume cs:code,ds:data,ss:stack
data segmentdw 256 dup (0H)
data endsstack segmentdw 256 dup (0H)
stack endscode segment
start:mov ax,stcakmov ss,axmov sp,60Hmov ax,datamov ds,axmov bx,0000Hmov word ptr ds:[bx+0000H],1111Hmov word ptr ds:[bx+0002H],2222Hmov word ptr ds:[bx+0004H],0333Hmov word ptr ds:[bx+0006H],0001Hmov wprd ptr ds:[bx+0008H],0002Hcall s0nopnop;功能:计算5个连续数值的和
;参数:通过内存存储参数,起始地址值在bx寄存器中
;结果:cx寄存器是运算结果
s0:mov cx,ds:[bx+0000H]add cx,ds:[bx+0002H]add cx,ds:[bx+0004H]add cx,ds:[bx+0006H]add cx,ds:[bx+0008H]retmov ax,4c00Hint 21H
code ends
end start
3. 子程序安全调用
子程序的设计要以保持寄存器值的平衡,栈空间的平衡为原则。
函数执行前将参数使用的寄存器源数据保存push栈,函数结束后再pop栈恢复源寄存器数据。
assume cs:code,ds:data,ss:stack
data segmentdw 256 dup (0H)
data endsstack segmentdw 256 dup (0H)
stack endscode segment
start:mov ax,stcakmov ss,axmov sp,60Hmov ax,datamov ds,axmov ax,0011Hmov bx,0022Hcall s0nopnop;甲编写代码
;xx,bx作为参数,cx作为返回值
s0:push axpush bxpush dxmov cx,axadd cx,bx;注意出栈顺序pop dxpop bxpop ax retmov ax,4c00Hint 21H
code ends
end start
二十、子程序设计(函数)相关推荐
- python二十:内置函数
# 求绝对值 abs(-1)# 遍历可迭代对象,如果每个可迭代对象中的元素都是true,则返回true # 如果可迭代对象为空,也返回true all(''), all([]) all([''])# ...
- 【C语言进阶深度学习记录】二十九 main函数与命令行参数
文章目录 1 main函数的返回值 2 main函数的参数 2.1 main函数的参数的代码案例分析 3 main函数不一定是程序中第一个执行的函数 4 总结 1 main函数的返回值 main函数是 ...
- python学习 (二十九) range函数
1:list函数可以将其他类型转成list. print(list(range(0, 10))) 2: list函数把元组转成list t = (1, 3, 3, 5) print(list(t)) ...
- C++语法(二十)常函数、常对象
1.常函数 常函数无法修改成员变量,除非这个成员变量用mutable修饰了. #include <iostream> using namespace std;class Person{ p ...
- python3.4学习笔记(二十) python strip()函数 去空格\n\r\t函数的用法
https://www.cnblogs.com/zdz8207/p/python_learn_note_20.html
- OpenCV学习笔记(二十一)——绘图函数core OpenCV学习笔记(二十二)——粒子滤波跟踪方法 OpenCV学习笔记(二十三)——OpenCV的GUI之凤凰涅槃Qt OpenCV学习笔记(二十
OpenCV学习笔记(二十一)--绘图函数core 在图像中,我们经常想要在图像中做一些标识记号,这就需要绘图函数.OpenCV虽然没有太优秀的GUI,但在绘图方面还是做得很完整的.这里就介绍一下相关 ...
- (98)利用函数function实现半字节加法功能,面试必问(二十二)(第20天)
(98)利用函数function实现半字节加法功能,面试必问(二十二)(第20天) 1 文章目录 1)文章目录 2)FPGA初级课程介绍 3)FPGA初级课程架构 4)利用函数function实现半字 ...
- PX4模块设计之二十六:BatteryStatus模块
PX4模块设计之二十六:BatteryStatus模块 1. BatteryStatus模块简介 2. 模块入口函数 2.1 主入口battery_status_main 2.2 自定义子命令cust ...
- BetaFlight模块设计之二十:CMS菜单模块分析
BetaFlight模块设计之二十:CMS菜单模块分析 CMS菜单模块 CMS菜单按键控制 CMS菜单Elements CMS_Menu OSD_Etnry Element类型 可调Element类型 ...
- BetaFlight模块设计之二十六:接收机任务分析
BetaFlight模块设计之二十六:接收机任务分析 接收机任务 配置情况 硬件配置 软件配置 驱动配置 sbus驱动函数分析 sbusDataReceive函数 sbusFrameStatus函数 ...
最新文章
- 如何在 GPU 上优化卷积
- css媒体查询移动优先和pc优先
- Linux内核启动速度优化,嵌入式Linux启动时间优化的秘密之五-Bootloader
- 团队作业第二次—项目选题报告(追光的人)
- opengl 大作业_「陪玩时光」糕妈:说说年糕的小学生活,先从陪作业和家长群聊起...
- C#中的异步调用剖析
- c++ placement new
- LeetCode 3Sum (Two pointers)
- 网景R6400做无线中继服务器,网件R6400刷梅林后5G掉线假死怎么办解决办法
- 运动重构(SFM)学习笔记一
- 关于lua加密luac的有关问题
- airplay连接电脑 linux,苹果手机怎么无线投屏,AirPlay怎么连接电脑
- Fall 2020 Berkeley cs61a hw03答案
- mybatis多表联合查询
- 小米笔记本双固态硬盘安装win10+ubantu20双系统 实录
- python stdin stdout_Python子进程:给出stdin,读取stdout,然后给出更多stdin
- 数据库入门基本知识(一)
- 拉格朗日对偶问题的一些介绍
- 前端页面 原生php+H5 视频播放一 专辑列表页(专辑页list)
- CI框架获取数据库错误码
热门文章
- 没钱买KEGG怎么办?REACTOME开源通路更强大
- java如何获得集合的长度_Java集合长度
- java 上溯_java中Instrument的上溯造型
- 产品经理职业发展前景的剖析
- element-ui clearable 不显示_从ElementUI的loading组件说起
- C++|Linux工作笔记-C++获取Linux中shell命令结果
- OllyDbg笔记-对标志寄存器中ZF的理解(逆向方面)
- 系统架构师学习笔记-基于构件的开发
- C/C++ OpenCV图像的载入,显示,输出
- android html 启动app,Android js交互 与 Html启动App