汇编语言中编写子程序的标准框架及简单运用举例
来源:互联网 发布:山姆店 知乎 编辑:程序博客网 时间:2024/05/18 05:03
为了避免主函数中使用的寄存器和在子函数中使用的寄存器相互干扰,就有了一种方法去解决这个问题
这种方法是用栈来实现的
主函数中,用到了很多的寄存器,但是寄存器的数量有限,而且功能很有限制,在调用子函数之前应该把这个子函数中需要用到的寄存器先进行入栈操作,那么就相当于把主函数中用到的寄存器保存在栈中了,等子函数操作结束后,再进行出栈操作,这样一来一回就不会相互干扰了
所以有了通式:
子程序开始:子程序中使用的寄存器入栈
子程序内容
子程序中使用的寄存器出栈
返回主函数
capital: push cx ...... pop cx ret
下面举个例子,这里的要求是计算将四组字符串都改成大写的
这里会遇到的问题就是cx在主函数和子函数中都需要背调用,于是就有了冲突,就用上面的方式解决就可以了
assume cs:code, ds:data, ss:stackdata segmentdb 'word', 0db 'unix', 0db 'wind', 0db 'good', 0data endsstack segment ;用来储存寄存器的栈,由于使用较多的都是16位的寄存器,所以开辟的是8个字空间的栈,而且栈是操作的16位数据dw 8 dup(0)stack endscode segmentstart:mov ax, data ;将数据段初始化mov ds, axmov ax, stack ;将代码段初始化mov ss, axmov sp, 16 ;栈的指针指向栈顶mov bx, 0mov cx, 4 ;循环四次让四个字符串都转为大写的s0: call m ;调用子函数inc bx ;这句很重要",不加会使程序因为cx=0跳出到ok处loop s0mov ax, 4C00Hint 21H;该子函数的作用是将一个字符串转换为大写m:push cx ;子函数的开始,先将子函数中用到的cx入栈s:mov cl, ds:[bx]mov ch, 0jcxz ok ;如果cx==0,那么jcxz就会跳到ok处执行jmp s1s1:and byte ptr ds:[bx], 11011111Binc bxjmp sok:pop cx ;子函数结束,将之前入栈的cx拿出来ret ;返回主函数code endsend start
0 0
- 汇编语言中编写子程序的标准框架及简单运用举例
- 汇编语言:简单的子程序设计
- sturts框架的简单搭建及举例
- 拓展:汇编语言的子程序
- 子程序的运用
- 汇编语言(王爽)实验十 编写子程序
- 王爽《汇编语言》实验10:编写子程序show_str
- 编写子程序的原则
- 汇编语言编写十进制数到二进制数的进制转换并显示的子程序
- 汇编语言编写十进制数到二进制数的进制转换并显示的子程序
- 汇编语言编写十进制数到二进制数的进制转换并显示的子程序
- action中json数据的运用举例
- 汇编语言----实验16--编写包含多个功能子程序的中断例程
- 王爽《汇编语言》实验16——编写包含多个功能子程序的中断例程
- 王爽《汇编语言》实验17——编写包含多个功能子程序的中断例程
- ***汇编语言 实验16 编写包含多个功能子程序的中断例程
- 标准容器的共性及举例
- 王爽《汇编语言》第10章 实验10 编写子程序
- 关于C++输入输出笔记
- 【机器学习中的数学】贝叶斯框架下二元离散随机变量的概率分布
- codeforces #483B# Friends and Presents(二分+math)
- PAT 1033. To Fill or Not to Fill (25)
- UVA - 10970 Big Chocolate
- 汇编语言中编写子程序的标准框架及简单运用举例
- Codeforces 167B Wizards and Huge Prize 概率dp
- synchronized锁住的是括号里的对象,而不是代码。
- 关于CSDN高校俱乐部的几个想法
- myeclipse 配置服务器
- 条款 39: 避免"向下转换" 继承层次
- 我的征程是未来!带你展望2015年最重要的网页设计趋势
- getResource()和getResourceAsStream以及路径问题
- 循环语句