跟我一起学编程系列课程: 第一篇汇编语言 16位汇编.

Slides:



Advertisements
Similar presentations
输入输出程序设计 输入输出的基本概念 无条件方式输入输出 查询方式输入输出 中断方式输入输出.
Advertisements

第10章 DOS功能调用与BIOS中断调用.
第四章 汇编语言 程序设计 任课教师:王晓甜
本周实验安排 实验内容:(P231)人名排序的例子。
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年10月30日.
第3章 80x86汇编语言程序设计(下).
4.1 汇编语言 4.2 顺序结构程序 4.3 分支程序设计 4.4 循环程序设计 4.5 子程序设计
9.1 可编程并行输入/输出接口芯片8255A 9.2 可编程计数器/定时器 可编程串行输入/输出接口芯片8251A
3.3.5 程序控制指令 控制转移指令分为: 转移指令 循环控制指令 调用和返回指令 中断指令.
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月26日.
第5章 循环与分支程序设计  循环程序设计  分支程序设计.
汇编语言程序设计 Assembly Language Programming
第三章 寻址方式与指令系统 3.1 寻址方式 一条指令通常由两大部分构成: 操作码 操作数
第九章 计数器和定时器电路 第一节 概述 第二节 Intel 8253的控制字 第三节 Intel 8253的工作方式 第九章 计数器和定时器电路 第一节 概述 第二节 Intel 8253的控制字 第三节 Intel 8253的工作方式 第四节 Intel 8253在IBM PC机上的应用.
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年12月10日.
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月05日.
第八章 输入输出程序设计 总线 CPU MEM I/O接口 I/O设备.
第一章 8086程序设计 第二章 MCS-51程序设计 第三章 微机基本系统的设计 第四章 存贮器与接口 第五章 并行接口
微型计算机原理及应用.
第3章 微型计算机输入输出接口 3.1 输入/输出接口 3.2 输入输出数据传输的控制方式 3.3 开关量输入输出接口 欢迎辞.
第六章 子程序结构 §6.1 子程序的设计方法 §6.2 嵌套与递归子程序 §6.3 子程序举例 §6.4 DOS系统功能调用.
第九章 高级宏汇编语言 9.1 结构 结构就是将逻辑上有一定关系的一组数据,以某种方式组合在一起所形成的数据形式。
第5章 循环与分支程序设计 学习目标: 了解并掌握循环程序的构造方法,尤其是对循环控制条件的设置以及可能出现的边界情况的考虑。掌握起泡排序算法这种多重循环程序设计中的常用方法。交换标志位的设置在此算法中更能提高效率。学会在数组排序算法中采用折半查找法来提高查找效率。学会使用跳跃表法实现CASE结构。
4.1 汇编语言程序格式 4.2 MASM中的表达式 4.3 伪指令语句 4.4 DOS系统功能调用和BIOS中断调用
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月19日.
本节内容 字符编码 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第4章 汇编语言程序格式  汇编程序功能  伪操作  汇编语言程序格式  汇编语言程序的上机过程.
本节内容 随机读取 视频提供:昆山爱达人信息技术有限公司.
本节内容 消息的分发 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第九章 BIOS和DOS中断 在存储器系统中,从地址0FE000H开始的8K ROM(只读存储器)中装有BIOS(Basic Iuput /output System)例行程序。驻留在ROM中的BIOS给PC系列的不同微处理器提供了兼容的系统加电自检,引导装入,主要I/O设备的处理程序以及接口控制等功能模块来处理所有的系统中断。使用BIOS功能调用,给程序员编程带来很大方便,程序员不必了解硬件操作的具体细节,直接用指令设置参数,然后中断调用BIOS中的子功能,所以利用BIOS功能编写的程序简洁,可读性好,
第二章 Java基本语法 讲师:复凡.
_04Combox控件和ListBox控件的使用
_05MessageMap的原理 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司 官网地址:
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月13日.
《微型计算机原理与接口技术》 第4版 王良 宁德师范学院 吴宁 乔亚男 编著 清华大学出版社 出版
<编程达人入门课程> 本节内容 内存的使用 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群: ,
第5章 循环与分支程序设计  循环程序设计  分支程序设计.
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年12月17日.
Select模型 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang 官网地址:
编译OpenSSL 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang 官网地址:
本节内容 Win32 API中的宽字符 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
_08文件的基本操作 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司 官网地址:
本节内容 类成员的访问控制 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
本节内容 内存复制指令 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
本节内容 Private Memory 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
<编程达人入门课程> 本节内容 计算机编程语言 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群: ,
本节内容 结构体 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
本节内容 线性地址的管理 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
本节内容 文件系统 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
本节内容 模块隐藏 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
3.1私有内存的分配.
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月06日.
本节内容 C语言的汇编表示 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
_03宽字符与Unicode编程 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司 官网地址:
第二章 Java基本语法 讲师:复凡.
本节内容 结构体.
本节内容 指针类型的使用 视频提供:昆山爱达人信息技术有限公司.
本节内容 通用寄存器 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
_08文件操作 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司 官网地址:
MFC控件 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang 官网地址:
本节内容 动态链接库 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
本节内容 导出表 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第6章 子程序结构 在程序设计中,我们会发现一些多次无规律重复的程序段或语句序列。解决此类问题一个行之有效的方法就是将它们设计成可供反复调用的独立的子程序结构,以便在需要时调用。在汇编语言中,子程序又称过程。 调用子程序的程序称为主调程序或主程序。 2019/7/20 ch6.
微机原理与接口技术 第5章 汇编语言程序设计 西安邮电大学计算机学院 王 钰.
本节内容 如何调试驱动程序? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
本节内容 进程 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
编程达人-- 从零开始学UI系列教程 第九节、布尔运算 先行者 YC.
第三章 8086的指令系统 8086指令特点 8086的寻址方式 8086的指令格式及数据类型 8086的指令集.
<编程达人入门课程> 本节内容 有符号数与无符号数 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
本节内容 this指针 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
Presentation transcript:

跟我一起学编程系列课程: 第一篇汇编语言 16位汇编

第三部分汇编语言程序设计基础 第二节 子程序设计 ●子程序设计 ●参数传递 ●递归和重入

参数传递 分类 1.寄存器传参 2.约定内存单元传参 3.堆栈传参 4.call后续区传参 1、利用寄存器传递参数 优点:简单方便 缺点:寄存器数量有限,适用参数较少的情况

参数传递 例1:写一个把大写字母改写为小写字母的子程序 ;子程序名:uptolw ;功能:大写字母转换为小写字母 ;入口参数:AL=字符ASCII码 ;出口参数:AL=字符ASCII码 ;说明:如果字符是大写字母,则转换为小写字母,其他字符不变 ;---------------------------------------------------------- uptolw proc pushf ;保护标志寄存器 cmp al,'A' jb uptolw1 cmp al,'Z' ja uptolw1 add al,'a'-'A' ;可以直接写20h uptolw1: popf ;恢复标志寄存器 ret uptolw endp

参数传递 ;例2:一个判别字符是否为数字符的子程序。并利用该子程序把一个字符串中的所有数字符删除。 ;程序名:t4-2.asm ;功能:判断数字字符并删除 ;CF为0表示数字符,CF=1为非数字符 ;------------------------------- assume cs:code,ds:data data segment string db 'AB=C950-asd',0 ;假设的字符串 data ends code segment ;子程序名:isdecm ;功能:判别一个字符是否是数字符, ;入口参数:AL=字符 ;出口参数:CF为0表示数字符,CF=1为非数字符 ;说明:不需要保护寄存器 isdecm proc cmp al,'0' jb isdecm1 cmp al,'9' ja isdecm1 clc ;cmp影响标志位 ret isdecm1: stc isdecm endp

参数传递 start: mov ax,data mov ds,ax mov si,offset string ;置取指针 mov di,si ;置存指针 next: mov al,[si] inc si or al,al ;判断是否0结尾 jz ok call isdecm jnc next ;CF=0,是数字字符,不保存,下一个字符 mov [di],al inc di jmp next ok: mov [di],al mov ax,4c00h int 21h code ends end start

参数传递 2、利用约定存储单元传递参数 在参数较多的情况下,可以利用约定内存变量来传递参数。 优点:数据或送出的结果都有独立的存储单元,不容易出错。 缺点:占用存储单元,通用性差 ;例3:写一个实现32位数相加的子程序 ;子程序名:madd ;功能:32位数相加 ;入口参数:data1和data2缓冲区存放要相加的32位数 ;出口参数:data3缓冲区存放结果 ;说明:1.32位数据的存放依次采用‘高高低低’的原则;2.可能产生进位存放在data3开始的第5字节中 ;--------------------------------------------------------- madd proc push ax push cx push si mov cx,2 xor si,si ;cf=0 madd1: mov ax,word ptr data1[si] adc ax,word ptr data2[si] ;16位相加 mov word ptr data3[si],ax inc si loop madd1 mov al,0 ;进位处理 adc al,0 mov byte ptr data3+4,al pop si pop cx pop ax ret madd endp

参数传递 n ...... DS:BX n个十进制数字 缓冲区结构图 设十进制数字串各位对应的BCD码是dn、dn-1、...、d2、d1 ;例4:设计一个以ASCII码表示的十进制数字串转换为二进制数的子程序。设表示的十进制数不大于65535。 ;子程序名:dtobin ;功能:把用ASCII码表示的十进制数字串转换为二进制数 ;入口参数:DS:BX=缓冲区首地址,第一个字节为十进制数字串长度n ;出口参数:AX=转换得到的二进制数 ;算法:迭代法y=y*10+di,y初始值为0 ;--------------------------------------------------- dtobin proc push bx push cx push dx xor ax,ax mov cl,[bx] inc bx xor ch,ch ;cx=n jcxz dtobin2 dtobin1: mov dx,10 mul dx ;ax=Y*10 mov dl,[bx] ;取下一个数字符 and dl,0fh xor dh,dh add ax,dx loop dtobin1 dtobin2: pop dx pop cx pop bx ret dtobin endp ;这个程序有两点不足,一是没有检查数字串中是否有非十进制数字符的存在,二是不适用于大于65535 DS:BX n ...... n个十进制数字 缓冲区结构图 设十进制数字串各位对应的BCD码是dn、dn-1、...、d2、d1 那么它所表示的二进制数可由下式计算出: Y=((((0*10+dn)*10+dn-1)*10+...)*10+d1 迭代公式:Y=Y*10+di (i=n,n-1,...1),Y初始值为0

本节视频的课后练习 1、在汇编语言中,主程序和子程序之间如何传递参数?请举例说明每种方法,并进行比较 2、编写一个求32位补码的程序。通过寄存器传递出入口参数 课后练习请务必完成后,再继续学习后面的课程。官网视频播放页面有参考答案。

0512-57882866 www.bcdaren.com 昆山爱达人 1250121864 昆山爱达人信息技术有限公司 视频录制:编程达人 视频提供 视频录制:编程达人 联系电话: 0512-57882866 官网地址: www.bcdaren.com 联系公众号: 昆山爱达人 联系QQ: 1250121864 编程达人APP: