| 
注册时间2010-3-1
阅读权限50
最后登录1970-1-1UID65892 感悟天道  
 
 TA的每日心情|  | 慵懒 2024-12-4 10:07
 | 
|---|
 签到天数: 444 天 [LV.9]以坛为家II | 
 
| 本帖最后由 sdnyzjzx 于 2010-12-29 21:54 编辑 
 用汇编多次写了下这个题目的代码,后来想,数据在主程序里已经入栈了,就可应该可以直接用,本着这个原则来修改的。修改后,在 add 与 sub 两个函数里,寻址的偏移稍微麻烦了点,中间有个 sub sp,2 也要占一个字节空间,这点开始是没想到,所以没找对,后来观察了下堆栈,明白了,这样写法也不知道是好还是坏,刚开始写代码,也不懂,还请多多指教!
 复制代码assume cs:code
stack segment
        db 100h dup (0)
stack ends
code segment
fun_add:
        push bp
        mov bp,sp
        mov ax,[bp+12]
        mov dx,[bp+10]
        add ax,dx
        mov sp,bp
        pop bp
        ret
fun_sub:
        push bp
        mov bp,sp
        mov ax,[bp+12]
        mov dx,[bp+10]
        sub ax,dx
        mov sp,bp
        pop bp
        ret
fun_fun:
        push bp
        mov bp,sp
        sub sp,2        ;申请出了空间
        call fun_add
        mov [bp-2],ax
        call fun_sub
        add ax,[bp-2]
        mov sp,bp
        pop bp
        ret
start:        mov ax,stack
        mov ss,ax
        mov sp,100h
        mov ax,20h
        push ax
        mov ax,10h
        push ax
        call fun_fun
        add sp,4
        mov ax,4c00h
        int 21h
code ends
end start
 | 
 |