永发信息网

51单片机执行中断时是不是不将临时数据压入堆栈,比如一些临时变量。只是将断点的地址压入,

答案:2  悬赏:50  手机版
解决时间 2021-02-15 18:50
  • 提问者网友:那叫心脏的地方装的都是你
  • 2021-02-15 08:46
8086系列的cpu也是这样么?
最佳答案
  • 五星知识达人网友:鸠书
  • 2021-02-15 09:05
在汇编程序中,51单片机进入中断时,只是将断点的地址压入, 其他的都需要自己保存

在C语言中又不一样, 程序会自动保护一些寄存器中的临时数据,如寄存器,ACC
全部回答
  • 1楼网友:躲不过心动
  • 2021-02-15 09:46
尽管51可以通过栈操作的方式传递变量,但在通过c语言编译产生的代码当中,压栈和出栈操作更多的是用于保护操作,防止子程序调用造成一些寄存器的误修改。而局部变量则尽可能使用访问速度最快的或执行代码最少的内部ram,比如工作寄存器r0~r7等。 堆栈一般是汇编语言编程时需要考虑的问题,在c语言里可以不考虑堆栈,编译器会根据情况做优化,设定堆栈的起始地址和大小。另外需要说明一下:至少在51中堆栈与ram不是独立的两个部件,堆栈空间包含于直接寻址的内部ram中,其它的cpu我不了解,就不敢说了。 其实内部ram及外部ram都可以用于保存局部变量: 1、内部直接寻址ram(data):地址0x00h->0x7f的内部ram,长度128字节 2、内部间接寻址ram(idata):地址0x80h->0xff的内部ram,长度128字节 3、可位寻址ram(bdata):地址0x20h->0x3f的内部ram,长度16字节 4、外部ram(xdata):标准空间地址0x0000-->0xffff 5、及按页访问的外部ram(pdata):一般用的不多。 软件编程人员可以根据具体要求声明变量的存储类型进而确定使用哪个区域,或者在编译选项中选择数据存储模式。如果不做特殊声明,只要资源够用,一般编译器都会自动优化选择访问速度最快的直接寻址内部ram(也就是0x00->0x7f范围内的ram)。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯