首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

关于i386汇编有关问题

2012-02-02 
关于i386汇编问题intp1(intx,inty){returnx+y}intmain(void){intx,y,zx1y2zp1(x,y)}反汇编main{..

关于i386汇编问题
int   p1(int   x,int   y)
    {
        return   x+y;
    }

  int   main(void)
  {
          int   x,y,z;
          x=1;
            y=2;
            z=p1(x,y);
  }
反汇编
main
{.
  .
    80484b4:               c7   45   fc   01   00   00   00       movl       $0x1,0xfffffffc(%ebp)
  80484bb:               c7   45   f8   02   00   00   00         movl       $0x2,0xfffffff8(%ebp)
  80484c2:               ff   75   f8                                 pushl     0xfffffff8(%ebp)
  80484c5:               ff   75   fc                                 pushl     0xfffffffc(%ebp)
  80484c8:               e8   bf   ff   ff   ff                     call       804848c   <p1>
  .
  .
}

0804848c   <p1> :
  804848c:               55                                             push       %ebp
  804848d:               89   e5                                       mov         %esp,%ebp
  804848f:               8b   45   0c                                 mov         0xc(%ebp),%eax
  8048492:               03   45   08                                 add         0x8(%ebp),%eax
  8048495:               c9                                             leave
  8048496:               c3                                             ret
  8048497:               90                                             nop
谁能给解释一下0xfffffffc(%ebp)是什么意思?

[解决办法]
call 指令不将 cs 压栈的, 这里都是 near 类型的, 不是 far 类的调用
[解决办法]
call far ptr 标号(实现段间转移)相当于:



push cs

push ip

jmp far ptr 标号

而call 标号相当于:

push ip

jmp near ptr 标号

初学不对之处请原谅!!!.

热点排行