那些年,我们一起学过的汇编----之子程序设计
在我的上一篇博文中,我简单的向大家介绍了汇编语言程序设计的三种基本方式。在一个程序中的不同地方,常常需要多次非循环的使用完成特定功能的程序段,这些程序段除了某些变量的赋值不同外,具有相同的指令序列,这时,我们为了减少重复编写程序,缩短目标代码,节省内存空间,把视线这一功能的指令序列组成一个相对独立的程序段。这也就是我们这片文章中所要讨论的子程序。
- PROC_NAME PROC [NEAR/FAR]
- ......
- PROC_NAME ENDP
- DATA SEGMENT
- BIN1 DB 35H
- BIN2 DW 0AB48H
- ASCBUF DB 20H DUP (?)
- DATA ENDS
- STACK1 SEGMENT PARA STACK
- DW 20H DUP (0)
- STACK1 ENDS
- CODE SEGMENT
- ASSUME CS:CODE, DS:DATA, SS:STACK1
- BEGIN: MOV AX, DATA
- MOV DS, AX
- XOR DX, DX
- LEA DI, ASCBUF ;存放ASCII码的单元首地址送DI
- MOV DH, BIN1 ;待转换的第一个数据送DH
- MOV AX, 8 ;待转换的二进制数的位数送AX
- CALL BINASC
- MOV DX, BIN2
- MOV AX, 16
- LEA DI, ASCBUF
- ADD DI, 8 ;设置下一个数的存放首地址
- CALL BINASC
- MOV AH, 4CH
- INT 21H
- BINASC PROC
- MOV CX, AX
- LOP: ROL DX, 1 ;最高位移入最低位
- MOV AL, DL
- AND AL, 1 ;保留最低位,屏蔽其他位
- ADD AL, 30H
- MOV [DI], AL ;存结果
- INC DI ;修改地址指针
- LOOP LOP
- RET
- BINASC ENDP
- CODE ENDS
- END BEGIN
- DATA SEGMENT
- BIN1 DB 35H
- BIN2 DW 0AB48H
- ASCBUF DB 20H DUP (?)
- DATA ENDS
- STACK1 SEGMENT PARA STACK
- DW 20H DUP (0)
- STACK1 ENDS
- CODE SEGMENT
- ASSUME CS:CODE, DS:DATA, SS:STACK1
- BEGIN: MOV AX, DATA
- MOV DS, AX
- MOV AH, BIN1
- PUSH AX ;待转换数据压栈
- MOV AX, 8
- PUSH AX ;待转换位数压栈
- LEA DI, ASCBUF
- PUSH DI ;存放ASCII码的首地址压栈
- CALL BINASC ;调用转换子程序
- MOV AX, BIN2
- PUSH AX
- MOV AX, 10H
- PUSH AX
- ADD DI, 8
- PUSH DI
- CALL BINASC
- MOV AH, 4CH
- INT 21H
- BINASC PROC
- PUSH AX
- PUSH CX
- PUSH DX
- PUSH DI
- MOV BP, SP
- MOV DI, [BP+10] ;从堆栈取出入口参数
- MOV CX, [BP+12]
- MOV DX, [BP+14]
- LOP: ROL DX, 1
- MOV AL, DL
- AND AL, 1
- ADD AL, 30H
- MOV [DI], AL
- INC DI
- LOOP LOP
- POP DI
- POP DX
- POP CX
- POP AX
- RET 6 ;返回并从堆栈中弹出6个字节
- BINASC ENDP
- CODE ENDS
- END BEGIN
转载于:https://blog.51cto.com/yiluohuanghun/940566
那些年,我们一起学过的汇编----之子程序设计相关推荐
- 生物系统和疾病的多组学数据整合考虑和研究设计
生物系统和疾病的多组学数据整合考虑和研究设计 1 生物系统 生物系统--组成 生物系统很复杂,具有许多调节功能,例如DNA,mRNA,蛋白质,代谢物,以及表观遗传功能(例如DNA甲基化和组蛋白翻译后修 ...
- 东方时尚网上约车的用户名密码是什么_网站制作要学什么、在现代网页设计中,动效常见的几种用法...
常听到有人这样问:"网站制作要学什么"和"在现代网页设计中,动效常见的几种用法"有什么关系和内在关联?导航设计是网页可用性的基石.记住,如果用户在您的网站里找不 ...
- 学美工、平面设计、UI设计,哪个有前途?
首先,在分析学美工.平面设计.UI设计,哪一个更有前途的时候,先要对三类设计有一个大概的了解. 比如"学美工.平面设计.UI设计是什么"等知识,才能更好地去进行选择. 01 阐述美 ...
- 汇编-循环结构程序设计和子程序设计
循环结构程序设计和子程序设计 实验内容 算法描述 实验结果 源程序清单 实验内容 设DATA1开始的内存单元中,存放着一串带符号字数据,要求采用冒泡排序算法(Bubble Sort)按照从小到大的顺序 ...
- 学美工、平面设计、UI设计,哪个更有前途?
首先,在分析学美工.平面设计.UI设计,哪一个更有前途的时候,先要对三类设计有一个大概的了解. 比如"学美工.平面设计.UI设计是什么"等知识,才能更好地去进行选择. 01 阐述美 ...
- 合肥工业大学宣城校区计算机大赛,合肥工业大学宣城校区“建行杯”计算机设计大赛 颁奖典礼举行...
4月11日下午,合肥工业大学宣城校区"建行杯"计算机设计大赛颁奖典礼在教学楼114室举行.宣城校区领导陈朝阳.田作淳.蒋传东.胡学钢及各部门负责人.各系部主任,学校教务部副教务长张 ...
- 那些年,我们一起学过的汇编----之伪指令
弄懂了前面几篇关于基础的文章,下面就开始我们真正的汇编之旅了,在这一篇中我们着重来强调下汇编语言的伪指令.伪指令是汇编语言程序设计中的一个主要的部分,属于控制命令,在汇编语言中的数据定义.存储单元分配 ...
- 哈哈日语 日语五十音学记资料汇编
每个小格内从左至右依次为:平假名.片假名.罗马读音.(括号内是与其他重复的) 新人加+日语群:376675070,,每天都有免费课程~! 表的横向称为[行],每行五个假名,共十行. 纵向称为[段],每 ...
- ui设计和python哪个容易学_软件开发和ui设计那个容易学?
感谢邀请,以下是我的一些亲身经历,想和大家分享. 真心的!建议哪怕是念完一个普通高中,也比现在直接去学那些职业技能要好,学历高一点,你面对的选择.能做的选择也会更多一些,能够拓宽你未来的职业路. 初中 ...
- 【嵌入式实验】《ARM汇编与接口设计》
嵌入式实验 一.实验目的 二.实验内容 三.预备知识 四.实验设备及工具(包括软件调试工具) 五.实验步骤 5.1 ADS开发工具安装和使用 插话 5.2 arm-linux-gcc编译工具安装和使用 ...
最新文章
- Javapinyin4J实现中文名转拼音
- java 连接数据库之一个完整的函数
- zend studio for Eclipse注册码及汉化
- C# 中奇妙的函数 -- 1. ToLookup
- 【数据结构与算法】之深入解析“K个一组翻转链表”的求解思路与算法示例
- 搜索旋转排序数组—leetcode31
- python字符串截取方法_如何使用python语言中的字符串方法截取字符串
- LeetCode 92反转链表||-中等
- Java剪切板操作大全
- I Think I Can!
- 蚂蚁课堂二期视频(每特学院二期)
- js通过开始时间和结束时间计算出中间的所有日期
- Mac重装Homebrew
- [USACO] Team Tic Tac Toe
- 计算机社团感恩节免费维修周策划书,【关于感恩节的活动策划】大学感恩节活动策划案_早教感恩节活动策划方案_(2)_亲亲宝贝网...
- python Gstreamer 播放不同编码格式的视频文件
- linux快速查找文件
- KeilC51_v960版201905((含汉字补丁,STC15说明书,stc-isp-15xx-v6.86S).7z
- oracle创建视图与生成唯一编号
- System.Globalization 命名空间
热门文章
- 从零基础入门Tensorflow2.0 ----一、3.4 实战深度神经网络(dropout)
- pyinstaller库的使用——将Python语言脚本打包成可执行文件的第三方库
- 重写Java中equals和hashcode方法的一般规则
- arcpy 创建弧度制与十进制互换的个人工具箱
- ArcGIS 地表TIN面数据的符号化
- 【ArcGIS|空间分析】图像纠正
- PHP kafka消息队列的使用
- java 枚举嵌套枚举_java – 如何使用枚举与分组和分组层次/嵌套
- 安卓直播详细教程(一)-----bilibili开源播放器
- 老码农最后都去哪了?