+ -
当前位置:首页 → 问答吧 → 请问谁能分析下《自己动手写操作系统》堆栈使用

请问谁能分析下《自己动手写操作系统》堆栈使用

时间:2011-09-10

来源:互联网

第三章大量的用到了堆栈,晕了。
请高手们讲一下调用MemCpy前后的堆栈变化,MemCpy是另一个文件里的,被include进来的:
例如
C/C++ code

PagingDemo:
    mov    ax, cs
    mov    ds, ax
    mov    ax, SelectorFlatRW
    mov    es, ax

    push    LenFoo      ;函数长度
    push    OffsetFoo   ;函数起始地址
    push    ProcFoo     ;00401000h
    call    MemCpy
    add    esp, 12 ;相当于弹出压入的参数
         .......
 


C/C++ code

MemCpy:
    push    ebp
    mov    ebp, esp

    push    esi
    push    edi
    push    ecx

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

    mov    al, [ds:esi]        ; ┓
    inc    esi            ; ┃
                    ; ┣ 逐字节移动
    mov    byte [es:edi], al    ; ┃
    inc    edi            ; ┛

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

    pop    ecx
    pop    edi
    pop    esi
    mov    esp, ebp
    pop    ebp

    ret            ; 函数结束,返回
; MemCpy 结束-------------------------------------------------------------

作者: sygspjlsj   发布时间: 2011-09-10

一本不错的书,好好研读吧!讲的应该很清楚吧!

作者: zhongxiaowenhuman   发布时间: 2011-09-10