免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3868 | 回复: 0
打印 上一主题 下一主题

请教《自己动手写操作系统》里的堆栈使用 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-09-10 16:12 |只看该作者 |倒序浏览
第三章大量的用到了堆栈,晕了。
请高手们讲一下调用MemCpy前后的堆栈变化,MemCpy是另一个文件里的,被include进来的:
例如
  1. PagingDemo:
  2.         mov        ax, cs
  3.         mov        ds, ax
  4.         mov        ax, SelectorFlatRW
  5.         mov        es, ax

  6.         push        LenFoo      ;函数长度
  7.         push        OffsetFoo   ;函数起始地址
  8.         push        ProcFoo     ;00401000h
  9.         call        MemCpy
  10.         add        esp, 12 ;相当于弹出压入的参数
  11.            ................
复制代码

  1. MemCpy:
  2.         push        ebp
  3.         mov        ebp, esp

  4.         push        esi
  5.         push        edi
  6.         push        ecx

  7.         mov        edi, [ebp + 8]        ; Destination
  8.         mov        esi, [ebp + 12]        ; Source
  9.         mov        ecx, [ebp + 16]        ; Counter
  10. .1:
  11.         cmp        ecx, 0                ; 判断计数器
  12.         jz        .2                ; 计数器为零时跳出

  13.         mov        al, [ds:esi]                ; ┓
  14.         inc        esi                        ; ┃
  15.                                         ; ┣ 逐字节移动
  16.         mov        byte [es:edi], al        ; ┃
  17.         inc        edi                        ; ┛

  18.         dec        ecx                ; 计数器减一
  19.         jmp        .1                ; 循环
  20. .2:
  21.         mov        eax, [ebp + 8]        ; 返回值

  22.         pop        ecx
  23.         pop        edi
  24.         pop        esi
  25.         mov        esp, ebp
  26.         pop        ebp

  27.         ret                        ; 函数结束,返回
  28. ; MemCpy 结束-------------------------------------------------------------
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP