单片机中堆栈指令是什么寻址方式
4个回答
展开全部
寄存器间接寻址范围总结:
1、外部RAM 64KB。对外部RAM64KB的间接寻址,应使用@DPTR作间址寻址寄存器,其形式为:@DPTR。
例如MOVX A,@DPTR;其功能是把DPTR指定的外部RAM的单元的内容送入累加器A中。
外部RAM的低256单元是一个特殊的寻址区,除可以用DPTR作间址寄存器寻址外,还可以用R0或R1作间址寄存器寻址。
例如MOVX A,@R0;这条指令的意思是,把R0指定的外部RAM单元的内容送入累加器A。
2、堆栈操作指令(PUSH和POP)也应算作是寄存器间接寻址,即以堆栈指针SP作间址寄存器的间接寻址方式。
3、内部RAM低128单元。对内部RAM低128单元的间接寻址,应使用R0或R1作间址寄存器,其通用形式为@Ri(i=0或1)。
4、内部RAM的高128单元也可以访问。但是注意不能用间接寻址的方式去访问特殊功能寄存器,虽然SFR与内部高128字节RAM地址相同,但是当一个指令访问高于7HF的内部位置时,CPU是根据寻址方式来区分是访问高128字节的内部RAM数据还是访问SFR.
1、外部RAM 64KB。对外部RAM64KB的间接寻址,应使用@DPTR作间址寻址寄存器,其形式为:@DPTR。
例如MOVX A,@DPTR;其功能是把DPTR指定的外部RAM的单元的内容送入累加器A中。
外部RAM的低256单元是一个特殊的寻址区,除可以用DPTR作间址寄存器寻址外,还可以用R0或R1作间址寄存器寻址。
例如MOVX A,@R0;这条指令的意思是,把R0指定的外部RAM单元的内容送入累加器A。
2、堆栈操作指令(PUSH和POP)也应算作是寄存器间接寻址,即以堆栈指针SP作间址寄存器的间接寻址方式。
3、内部RAM低128单元。对内部RAM低128单元的间接寻址,应使用R0或R1作间址寄存器,其通用形式为@Ri(i=0或1)。
4、内部RAM的高128单元也可以访问。但是注意不能用间接寻址的方式去访问特殊功能寄存器,虽然SFR与内部高128字节RAM地址相同,但是当一个指令访问高于7HF的内部位置时,CPU是根据寻址方式来区分是访问高128字节的内部RAM数据还是访问SFR.
展开全部
51 单片机:
入栈时,指令是:PUSH dir,其中的源操作数是《直接寻址》,目的是《间接寻址》。
出栈时,指令是:POP dir,其中的源操作数是《间接寻址》,目的是《直接寻址》。
这里使用的间址寄存器是 SP。
----
入栈时:
源操作数,是直接寻址。
可以使用片内RAM的低128字节、SFR。
不可使用:R0~R7、@R0、@R1,和片内RAM的高128字节。
目的操作数,用 SP 间址,可以使用片内RAM的低128字节和高128字节(仅52单片机)。
----
出栈时:
……
入栈时,指令是:PUSH dir,其中的源操作数是《直接寻址》,目的是《间接寻址》。
出栈时,指令是:POP dir,其中的源操作数是《间接寻址》,目的是《直接寻址》。
这里使用的间址寄存器是 SP。
----
入栈时:
源操作数,是直接寻址。
可以使用片内RAM的低128字节、SFR。
不可使用:R0~R7、@R0、@R1,和片内RAM的高128字节。
目的操作数,用 SP 间址,可以使用片内RAM的低128字节和高128字节(仅52单片机)。
----
出栈时:
……
追问
那我们一般看一条指令时什么寻址方式是看源操作数还是目的操作数?还有为什么是POP ACC而不是POP A?谢谢帮我回答~
追答
一般,不加以说明,就是讨论《源操作数》的寻址方式。
那么,堆栈指令:
PUSH dir,其中的源操作数是《直接寻址》;
POP dir,其中的源操作数是《间接寻址》。
POP A,理论上成立,写给人看,还可以。
但是,编译软件,只是认得 POP ACC。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
51的单片机指令只有PUSH/POP direct,从指令上来看,应属直接寻址
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
堆是堆,栈是栈,不要混为一谈。
一般入栈出栈都是间接寻址的。
一般入栈出栈都是间接寻址的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询