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

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

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

各位前辈小弟有一问题
    16位单片机中压栈是不是按16位进行的,函数调用中变量传递是不是只能按8位  数进行
谢谢大虾[em02][em02]
飞思卡尔的16位单片机虽然有16位的数据和地址总线,但其基本操作单位还是8位的字节(BYTE)。它的压栈动作还是一个字节一个字节地压的。但函数调用的变量传递并非只能按8位进行,这是编译器的功能,与CPU的压栈是两回事。
海纳百川  有容乃大
但其基本操作单位还是8位的字节(BYTE)。它的压栈动作还是一个字节一个字节地压的。??
StrongChen, 你又错了。
哪里错了?请指教。
海纳百川  有容乃大
strongchen,

现在还不知错在那里? 看来版主老兄对S12也许不大了解,请参阅S12 CPU 手册,看看压8位的CCR和压16位的[B:A], [XH:XL], [YH,YL]和[RTNH:RTNL]有什么不同。
如还看不明白,才再上贴。
S12是16位的单片机,它的地址和堆栈指针都是16位的,但每一个16位地址指向的是一个8位的字节。堆栈操作时,CPU会根据操作的内容自动调整指针的加减值是1还是2。所以完全可以理解为堆栈操作是以字节为单位进行的。
海纳百川  有容乃大

[讨论]

PSHD是不是16位呢?还是一个字节8位呢?為什麼理解为堆栈操作是以字节为单位进行的呢?
PSHD也可以理解为把A和B这两个字节分别压入堆栈。
海纳百川  有容乃大

[讨论]

但是它是16位堆栈操作,單一週期(single cycle)可完成的,為什麼硬要理解为堆栈操作一,定是以字节为单位进行的呢???我氣昏了!!! [em01]
错了不是问题,版主错了也不是问题。问题是有错不认、不认又不认![em22]
要不是strongchen你是版主,我真怀疑你把S12说成像个8位微控的动机呢![em26]


[此贴子已经被作者于2005-5-25 2:05:49编辑过]

各位不必气恼。实际上我只是针对楼主的问题,强调S12虽然是16位的单片机,但其数据操作的基本单位还是字节。它可以对单字节进行操作,当然也就可以传递8位的参数,而且也可以传递16位,甚至32位等等其他长度的参数。S12当然可以在一个指令周期内完成对16位数据的操作。
海纳百川  有容乃大
S12虽然是16位的单片机,数据操作的基本单位还是字节。看来它还不是一个真16位的单片机。

[讨论]

S12不单只是16位的单片机,它也照顾到8位字节操作,特别是处理外挂廉价8位存储器,而内部就能发挥8位和16位变量传递,可称一绝o所以它内部数据传递可以用16位字词(双字节)不应把它只当8位单字节进行操作o不像其他16位单片机,只能提供16位变量传递,而处理8位变量传递时,只可16位变量作8位用,而白白牺牲余下8位存储器,变量处理就不能发挥最大效益啦o
楼上的说:它内部数据传递可以用16位字词(双字节)不应把它只当8位单字节进行操作o
三楼的说: 但其数据操作的基本单位还是字节。
那一位大侠说的才对呢?
干啥你们不看看S12 CPU手册,自己理解理解S12是一个啥么样的16位MCU?
返回列表