请教一个堆栈的问题
汇编吧
全部回复
仅看楼主
level 5
assume cs:code
stack segment
dw 8 dup (0)
stack ends
code segment
start: mov ax,stack
mov ss,ax
mov sp,10h
mov ax,4240h
mov dx,000fh
mov cx,0ah
call divdw
mov ax,4c00h
int 21h
divdw: push ax
mov ax,dx
mov dx,0
div cx
push ax
add sp,2
pop ax
div cx
mov cx,dx
sub sp,4
pop dx ---------进行到这里的时候出栈的数据不对了,但我核对过sp,未出栈前的sp和入栈后的sp是一样的
ret
code ends
end start
2013年04月13日 15点04分 1
level 5
指针没错,但内容却不对了,是不是之前有指令让堆栈内数据发生了变化呢?
2013年04月13日 15点04分 2
我也遇到同样问题 高手说栈是个复杂的过程全部出栈后栈内容会发生改变
2013年04月17日 00点04分
level 5
顺带提一下,这个是书上的题目,编程目的是进行不会溢出的除法运算
2013年04月13日 15点04分 3
level 5
我用debug跟了几次,发现在执行了add sp,2之后,之前入栈的数据就变化了,这是为什么?
2013年04月13日 16点04分 4
level 5
人工置顶!
2013年04月14日 02点04分 6
level 6
你不觉得ret之前缺东西吗?
2013年04月14日 06点04分 7
嗯,这是个问题,后来我补上试了下,数据还是不正常,跟踪发现在进行add sp,2操作后数据被覆盖了,现在我用寄存器来保存算了
2013年04月15日 04点04分
level 11
你小子没有声明ss指向stack段。
2013年04月25日 08点04分 8
level 12
  (1)首先,栈像个货场,是用来存放程序运行期间产生或者所需的临时数据的,或者用来传递参数。栈不仅你的程序可能用到,操作系统也会用到,所以栈的空间要留足,以免空间不够发生异常;
  (2)主程序向子程序通过栈传参(汇编语言比高级语言多了一个用寄存器传参,更高效),或者子程序需要栈来保存局部变量,其对栈的访问通常都是通过BP作为基地址而进行的。举例说明一下:
 
2013年04月25日 11点04分 9
1