+ -
当前位置:首页 → 问答吧 → 新手求助

新手求助

时间: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
   
   

 

作者: y03128511   发布时间: 2011-09-20

是不是对 bp 进行保存和恢复,在自己的程序里,就看上一级子程是不是使用到了这个寄存器。
从通行的对寄存器的使用约定上来说,通用寄存器里,除了 ax/cx/dx 外,其它的寄存器,如果子程使用了,就应进行保存和恢复的操作。因为除了这三个寄存器外,程序是假的子程不会改变那些寄存器的内容的。dx:ax 通常是作为函数/子程的返回值,cx 作为 this 对象的引用。这些虽然是高级语言里的概念,但涉及到具体的汇编指令上,对寄存器的使用也统一了。

作者: zara   发布时间: 2011-09-21