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

二十、子程序设计(函数)相关推荐

  1. python二十:内置函数

    # 求绝对值 abs(-1)# 遍历可迭代对象,如果每个可迭代对象中的元素都是true,则返回true # 如果可迭代对象为空,也返回true all(''), all([]) all([''])# ...

  2. 【C语言进阶深度学习记录】二十九 main函数与命令行参数

    文章目录 1 main函数的返回值 2 main函数的参数 2.1 main函数的参数的代码案例分析 3 main函数不一定是程序中第一个执行的函数 4 总结 1 main函数的返回值 main函数是 ...

  3. python学习 (二十九) range函数

    1:list函数可以将其他类型转成list. print(list(range(0, 10))) 2: list函数把元组转成list t = (1, 3, 3, 5) print(list(t)) ...

  4. C++语法(二十)常函数、常对象

    1.常函数 常函数无法修改成员变量,除非这个成员变量用mutable修饰了. #include <iostream> using namespace std;class Person{ p ...

  5. python3.4学习笔记(二十) python strip()函数 去空格\n\r\t函数的用法

    https://www.cnblogs.com/zdz8207/p/python_learn_note_20.html

  6. OpenCV学习笔记(二十一)——绘图函数core OpenCV学习笔记(二十二)——粒子滤波跟踪方法 OpenCV学习笔记(二十三)——OpenCV的GUI之凤凰涅槃Qt OpenCV学习笔记(二十

    OpenCV学习笔记(二十一)--绘图函数core 在图像中,我们经常想要在图像中做一些标识记号,这就需要绘图函数.OpenCV虽然没有太优秀的GUI,但在绘图方面还是做得很完整的.这里就介绍一下相关 ...

  7. (98)利用函数function实现半字节加法功能,面试必问(二十二)(第20天)

    (98)利用函数function实现半字节加法功能,面试必问(二十二)(第20天) 1 文章目录 1)文章目录 2)FPGA初级课程介绍 3)FPGA初级课程架构 4)利用函数function实现半字 ...

  8. PX4模块设计之二十六:BatteryStatus模块

    PX4模块设计之二十六:BatteryStatus模块 1. BatteryStatus模块简介 2. 模块入口函数 2.1 主入口battery_status_main 2.2 自定义子命令cust ...

  9. BetaFlight模块设计之二十:CMS菜单模块分析

    BetaFlight模块设计之二十:CMS菜单模块分析 CMS菜单模块 CMS菜单按键控制 CMS菜单Elements CMS_Menu OSD_Etnry Element类型 可调Element类型 ...

  10. BetaFlight模块设计之二十六:接收机任务分析

    BetaFlight模块设计之二十六:接收机任务分析 接收机任务 配置情况 硬件配置 软件配置 驱动配置 sbus驱动函数分析 sbusDataReceive函数 sbusFrameStatus函数 ...

最新文章

  1. 如何在 GPU 上优化卷积
  2. css媒体查询移动优先和pc优先
  3. Linux内核启动速度优化,嵌入式Linux启动时间优化的秘密之五-Bootloader
  4. 团队作业第二次—项目选题报告(追光的人)
  5. opengl 大作业_「陪玩时光」糕妈:说说年糕的小学生活,先从陪作业和家长群聊起...
  6. C#中的异步调用剖析
  7. c++ placement new
  8. LeetCode 3Sum (Two pointers)
  9. 网景R6400做无线中继服务器,网件R6400刷梅林后5G掉线假死怎么办解决办法
  10. 运动重构(SFM)学习笔记一
  11. 关于lua加密luac的有关问题
  12. airplay连接电脑 linux,苹果手机怎么无线投屏,AirPlay怎么连接电脑
  13. Fall 2020 Berkeley cs61a hw03答案
  14. mybatis多表联合查询
  15. 小米笔记本双固态硬盘安装win10+ubantu20双系统 实录
  16. python stdin stdout_Python子进程:给出stdin,读取stdout,然后给出更多stdin
  17. 数据库入门基本知识(一)
  18. 拉格朗日对偶问题的一些介绍
  19. 前端页面 原生php+H5 视频播放一 专辑列表页(专辑页list)
  20. CI框架获取数据库错误码

热门文章

  1. 没钱买KEGG怎么办?REACTOME开源通路更强大
  2. java如何获得集合的长度_Java集合长度
  3. java 上溯_java中Instrument的上溯造型
  4. 产品经理职业发展前景的剖析
  5. element-ui clearable 不显示_从ElementUI的loading组件说起
  6. C++|Linux工作笔记-C++获取Linux中shell命令结果
  7. OllyDbg笔记-对标志寄存器中ZF的理解(逆向方面)
  8. 系统架构师学习笔记-基于构件的开发
  9. C/C++ OpenCV图像的载入,显示,输出
  10. android html 启动app,Android js交互 与 Html启动App