一个数据传送指令的实验,谁能说下程序运行结果?

来源:百度知道 编辑:UC知道 时间:2024/06/18 13:28:57
按下属要求连续送数:
1、8031片内RAM 60H到6FH单元置初值0E0H到0FFH
2、将60H到6FH的数送到片外RAM 4000H到400FH单元
3、将4000H到400FH数据送到片外RAM 5000H到500FH单元(用31H到40H过渡单元)

实验参考程序:
ORG 0000H
LJMP 0040H
ORG 0040H
MOV R0,#60H
MOV R2,#10H
MOV A,#0E0H
M1:MOV @R0,A
INC R0
INC A
DJNZ R2,M1
MOV R0,#60H
MOV DPTR,#4000H
MOV R2,#10H
M2:MOV A,@R0
MOVX @DPTR,A
INC R0
INC DPTR
DJNZ R2,M2
MOV SP,#30H
MOV DPTR,#4000H
MOV R2,#10H
M3:MOVX A,@DPTR
PUSH ACC
INC DPTR
DJNZ R2,M3
MOV DPTR,#500FH
MOV R2,#10H
M4:POP ACC
MOVX @DPTR,A
DEC DPL
DJNZ R2,M4
SJMP $
END

处理实验结果:
60H=
61H=
62H=
...
6FH=

4000=
4001=
4002=
...
400F=

31H=
32H=
33H=
...
40H=

5000=
5001=
5002=<

60H=0e0h
61H=0e1h
62H=0e2h
...
6FH=0efh
4000=0e0h
4001=0e1h
4002=0e2h
...
400F=0efh

31H=0e0h
32H=0e1h
33H=0e2h
...
40H=0efh

5000=0e0h
5001=0e1h
5002=0e2h
...
500F=0efh

MOV R0,#60H ;初始化R0,A,R2
MOV R2,#10H ;
MOV A,#0E0H ;
M1:MOV @R0,A ;将A内的数放入60H
INC R0 ;R0加1
INC A ;A加1
DJNZ R2,M1 ;循环16次(下次时,A为0E1H,R0为61H,那么MOV @R0,A 即将0E1H放入62H)

类似地,也是将数放入其他区间。另外,M3:MOVX A,@DPTR
PUSH ACC
INC DPTR
DJNZ R2,M3
MOV DPTR,#500FH
MOV R2,#10H
M4:POP ACC
MOVX @DPTR,A
DEC DPL
DJNZ R2,M4
对上面的程序,
现将4000H为首的数据放入栈堆,
再从栈堆中读出。因为栈堆是先进后出,后进先出,所以先将400FH的数据退栈,
对应地,放入500FH中,所以顺序是倒过来的