新手求助
时间:2011-09-20
来源:互联网
王爽书中用栈传递参数的一个程序是这样的 设a=3、b=1 计算(a-b)^3 :
mov ax,1
push ax
mov ax,3
push ax
call difcube
difcube: push bp
mov bp,sp
mov ax,[bp+4]
sub ax,[bp+6]
mov bp,ax
mul bp
mul bp
pop bp
ret 4
他这个程序我觉得好像 push bp 和pop bp 没有也行 大哥们看看这样行吗
mov ax,1
push ax
mov ax,3
push ax
call difcube
difcube: mov bp,sp
mov ax,[bp+2]
sub ax,[bp+4]
mov bp,ax
mul bp
mul bp
ret 4
mov ax,1
push ax
mov ax,3
push ax
call difcube
difcube: push bp
mov bp,sp
mov ax,[bp+4]
sub ax,[bp+6]
mov bp,ax
mul bp
mul bp
pop bp
ret 4
他这个程序我觉得好像 push bp 和pop bp 没有也行 大哥们看看这样行吗
mov ax,1
push ax
mov ax,3
push ax
call difcube
difcube: mov bp,sp
mov ax,[bp+2]
sub ax,[bp+4]
mov bp,ax
mul bp
mul bp
ret 4
作者: y03128511 发布时间: 2011-09-20
是不是对 bp 进行保存和恢复,在自己的程序里,就看上一级子程是不是使用到了这个寄存器。
从通行的对寄存器的使用约定上来说,通用寄存器里,除了 ax/cx/dx 外,其它的寄存器,如果子程使用了,就应进行保存和恢复的操作。因为除了这三个寄存器外,程序是假的子程不会改变那些寄存器的内容的。dx:ax 通常是作为函数/子程的返回值,cx 作为 this 对象的引用。这些虽然是高级语言里的概念,但涉及到具体的汇编指令上,对寄存器的使用也统一了。
从通行的对寄存器的使用约定上来说,通用寄存器里,除了 ax/cx/dx 外,其它的寄存器,如果子程使用了,就应进行保存和恢复的操作。因为除了这三个寄存器外,程序是假的子程不会改变那些寄存器的内容的。dx:ax 通常是作为函数/子程的返回值,cx 作为 this 对象的引用。这些虽然是高级语言里的概念,但涉及到具体的汇编指令上,对寄存器的使用也统一了。
作者: zara 发布时间: 2011-09-21
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28