[KeilC51] 有关出栈时sp原子性的疑虑

原问题地址 http://www.amobbs.com/thread-5565900-1-1.htm

已知 (sp)=32H (32H)=50H 执行 pop sp
之后(sp)= ?到底是50H呢还是4FH呢?

 

查询了下指令集:

 

照此分析,(sp)应该等于4F。

不过用代码,keilc51 4 ,89C51单片实物仿真后发现答案不是4F。。。奇怪的说。。。

 

一、KEIL4C51 仿真。

仿真代码:

org 0000
        jmp main
        
main:
        
        mov a,#50H
        mov 32H,a
        mov sp,#32H
        nop
        pop sp
        nop
        
        jmp $
        
end

结果:

 

二、89C51单片机上测试。。。

测试代码:

org 0000
    jmp main
    
main:
    mov a,#255
    mov P0,a
    
    mov a,#50H
    mov 32H,a
    mov sp,#32H
    nop
    pop sp
    nop
    
    mov a,sp
    subb a,#50H
    jnz LED7_ON
LED2_ON:
    clr c
    mov P0.2,c   ;发现P0.2亮了。
    jmp end_asm
LED7_ON:
    clr c
    mov P0.7,c  
    
end_asm:
    jmp $
    
end

 

单片机上发现。。。P0.2口的LED亮了。。额

 

为毛和指令集说的有出入?

 

难道是我的测试代码有问题。。。。囧。。。。

 

posted @ 2014-01-10 11:04  Alimy  阅读(571)  评论(0编辑  收藏  举报