当前位置: 代码迷 >> 汇编语言 >> 增多sp的值会改变栈内的数据?sp的值变化引起的栈内数据变化
  详细解决方案

增多sp的值会改变栈内的数据?sp的值变化引起的栈内数据变化

热度:153   发布时间:2016-05-02 04:29:31.0
增加sp的值会改变栈内的数据?sp的值变化引起的栈内数据变化
ASSUME CS:CODES,SS:STACKS

STACKS SEGMENT
    dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
STACKS ENDS

    codes segment
START:
    MOV AX,STACKS
    MOV SS,AX
    mov sp,16
    
    mov bp,sp
    sub sp,6
    mov word ptr [bp-6],0001
    mov word ptr [bp-4],0002
    mov word ptr [bp-2],0000
    push [bp-2]
    push [bp-4]
    push [bp-6]
   
    call addr1
       ;add sp,6;此处如果不注释掉的话,栈内的数据会有很大的改变,这是为什么?
    inc word ptr [bp-2]

    MOV AH,4CH
    INT 21H
    
    addr1: push bp
     mov bp,sp
     mov ax,[bp+4]
     add ax,[bp+6]
     mov [bp+14],ax
     mov sp,bp
     pop bp
     ret
    
CODES ENDS
    END START


这个程序时有汇编实现c=a+b,参数存在栈里面。但是有个问题:运行add sp,6前后,栈内的数据会有很大变化(如图),不清楚这个变化是由什么引起的,请大家帮我解析一下,万分感谢!

------解决思路----------------------
单步中断功能用的吧;你这堆栈太小,没出异常已属幸运的了。
  相关解决方案