首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

[讨论]关于16位机压栈的问题

飞思卡尔的16位单片机虽然有16位的数据和地址总线,但其基本操作单位还是8位的字节(BYTE)。它的压栈动作还是一个字节一个字节地压的。但函数调用的变量传递并非只能按8位进行,这是编译器的功能,与CPU的压栈是两回事。
海纳百川  有容乃大
哪里错了?请指教。
海纳百川  有容乃大
S12是16位的单片机,它的地址和堆栈指针都是16位的,但每一个16位地址指向的是一个8位的字节。堆栈操作时,CPU会根据操作的内容自动调整指针的加减值是1还是2。所以完全可以理解为堆栈操作是以字节为单位进行的。
海纳百川  有容乃大
PSHD也可以理解为把A和B这两个字节分别压入堆栈。
海纳百川  有容乃大
各位不必气恼。实际上我只是针对楼主的问题,强调S12虽然是16位的单片机,但其数据操作的基本单位还是字节。它可以对单字节进行操作,当然也就可以传递8位的参数,而且也可以传递16位,甚至32位等等其他长度的参数。S12当然可以在一个指令周期内完成对16位数据的操作。
海纳百川  有容乃大
基本单位是字节,并不是说每次操作只能对单字节进行。S12可以单字节操作,也可以双字节同时操作。它是一个真正的16位单片机,但为了有更大的灵活性,它把基本的操作单位仍定为字节,每个16位地址指向的是一个字节的空间。
海纳百川  有容乃大
返回列表