{汇编语言} 在使用栈时出现的一个小问题

我想把寄存器中的数据保存到栈里,为什么使用的时候结果就会出问题,但如果直接在程序中打出来结果就是正确的

call enter_stack
=======================
call out_stack

enter_stack:push di
            push si
            push cx
            ret

out_stack  :pop cx
            pop si
            pop di
            ret

整个代码:

assume cs:code

data segment
   ;0123456789ABCDEF   07H黑底白字
db 'conversation'
data ends

stack segment
db 16 dup(0)
stack ends

code segment

start  :mov ax,data
        mov ds,ax
        mov ax,stack
        mov ss,ax
        mov sp,16

        mov ax,0B800H
        mov es,ax
        mov di,12*80*2+40*2-8*2
        mov cx,12
        mov si,0
        push di
        push si
        push cx
        call show           ;显示小写字符

        pop cx
        pop si
        pop di
        call cube           ;原字符变大写

        mov di,13*80*2+40*2-8*2
        mov cx,12
        mov si,0
        call show           ;显示大写字符


        mov ax,4c00h
        int 21h

show:   mov dl,ds:[si]
        mov dh,07H          ;白底黑字
        mov es:[di],dx
        inc si
        add di,2
        loop show
        ret

cube:   and byte ptr ds:[si],11011111b
        inc si
        loop cube
        ret

enter_stack:push di
        push si
        push cx
        ret

out_stack:pop cx
        pop si
        pop di
        ret

code ends

end start

直接用push和pop就没有问题,但用call enter__stack和out__stack就有问题了,想问为什么会这样?

1个回答

压栈吗,用nop填充或push

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问