飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 4016|回复: 1

[C/C++] 汇编写 c = add(a,b) + sub(a,b) 修改版

[复制链接]
  • TA的每日心情
    开心
    2024-3-7 15:25
  • 签到天数: 442 天

    [LV.9]以坛为家II

    发表于 2010-12-29 21:50:09 | 显示全部楼层 |阅读模式
    本帖最后由 sdnyzjzx 于 2010-12-29 21:54 编辑

    用汇编多次写了下这个题目的代码,后来想,数据在主程序里已经入栈了,就可应该可以直接用,本着这个原则来修改的。修改后,在 add 与 sub 两个函数里,寻址的偏移稍微麻烦了点,中间有个 sub sp,2 也要占一个字节空间,这点开始是没想到,所以没找对,后来观察了下堆栈,明白了,这样写法也不知道是好还是坏,刚开始写代码,也不懂,还请多多指教!
    1. assume cs:code

    2. stack segment

    3.         db 100h dup (0)

    4. stack ends

    5. code segment

    6. fun_add:
    7.         push bp
    8.         mov bp,sp
    9.         mov ax,[bp+12]
    10.         mov dx,[bp+10]
    11.         add ax,dx
    12.         mov sp,bp
    13.         pop bp
    14.         ret

    15. fun_sub:
    16.         push bp
    17.         mov bp,sp
    18.         mov ax,[bp+12]
    19.         mov dx,[bp+10]
    20.         sub ax,dx
    21.         mov sp,bp
    22.         pop bp
    23.         ret

    24. fun_fun:
    25.         push bp
    26.         mov bp,sp
    27.         sub sp,2        ;申请出了空间

    28.         call fun_add
    29.         mov [bp-2],ax
    30.         call fun_sub
    31.         add ax,[bp-2]
    32.         mov sp,bp
    33.         pop bp
    34.         ret

    35. start:        mov ax,stack
    36.         mov ss,ax
    37.         mov sp,100h

    38.         mov ax,20h
    39.         push ax
    40.         mov ax,10h
    41.         push ax
    42.         call fun_fun
    43.         add sp,4

    44.         mov ax,4c00h
    45.         int 21h

    46. code ends

    47. end start
    复制代码
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2010-12-30 13:41:06 | 显示全部楼层
    这样 不通用哦  这个函数 可以COPY到其他工程么
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表