- UID
- 65892
注册时间2010-3-1
阅读权限50
最后登录1970-1-1
感悟天道
 
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
复制代码 |
|