《零基础入门学习汇编语言》第五十讲
本帖最后由 shuiyu 于 2017-9-2 10:15 编辑越努力,越幸运。欢迎大家来看我的笔记{:10_297:} 小白刚学,不对的请各位大佬指正,谢谢{:10_254:}
一、call 和 ret 的配合使用
(1)从上面的讨论中我们发现,可以写一个具有一定功能的程序段,我们称其为子程序,在需要的时候,用call指令转去执行。
(2)可是执行完子程序后,如何让CPU接着call指令向下执行?没错,答案就是ret。call指令后面的指令的地址将存储在栈中,所以可以在子程序的后面使用 ret 指令,用栈中的数据设置IP的值,从而转到 call 指令后面的代码处继续执行。
(3)其实和C语言中定义一个自定义函数一样的,需要用到这个函数的时候调用就可以了。
二、mul 指令
(1)相乘的两个数:要么都是8位,要么都是16位。(如果是8位与16位相乘则遵循16位相乘原则,把8位换算成16位)
8 位: AL中和 8位寄存器或内存字节单元中;
16 位: AX中和 16 位寄存器或内存字单元中。
(2)如果是8位与16位相乘则遵循16位相乘原则,把8位换算成16位
(3)计算结果存放位置
8位:AX中;
16位:DX(高位)和AX(低位)中。
三、模块化程序设计
(1)call 与 ret 指令共同支持了汇编语言编程中的模块化设计。在实际编程中,程序的模块化是必不可少的。利用 call和ret指令,我们可以用简洁的方法,实现多个互相联系、功能独立的子程序来解决一个复杂的问题。
(2)子程序一般都要根据提供的参数处理一定的事务,处理后,将结果(返回值)提供给调用者。其实,我们讨论参数和返回值传递的问题,实际上就是在探讨,应该如何存储子程序需要的参数和产生的返回值。
(3)注意,我们在编程的时候要注意良好的风格,对于程序应有详细的注释。子程序的注释信息应该包含对子程序的功能、参数和结果的说明。因为今天写的子程序,以后可能还会用到;自己写的子程序,也很可能要给别人使用,所以一定要有全面的说明。
(4)调用者将参数送入参数寄存器,从结果寄存器中取到返回值;子程序从参数寄存器中取到参数,将返回值送入结果寄存器。
四、参数和结果传递的问题
编程:计算data段中第一组数据的 3 次方,结果保存在后面一组dword单元中。
data segment
dw 1,2,3,4,5,6,7,8
dd0,0,0,0,0,0,0,0
data ends
请课后先思考一下……尽管书中有答案……
这个是我没看答案前做的,没能成功运行{:10_258:}
实在是找不出问题,只能看答案了{:10_277:} 看了答案后发现被小甲鱼坑了{:10_291:} ,视频教程中小甲鱼说定义的两组元素都是dw字型数据,写成dd是因为教材小甲鱼他写错了。。。。{:10_258:} 其实就该是dd双字型数据。下面的是答案,很简单我就不细说了:
谢谢小甲鱼带来的视频教程,感谢!! {:10_303:}
本节结束,多谢览阅!
越努力,越幸运。谢谢大家来看我的笔记{:10_297:} 小白刚学,不对的请各位大佬指教,谢谢{:10_254:}
的点点滴滴多多多多多多多多多多多多多多多多多多多多多多多多多多多多多
页:
[1]