指令如何与数据区分开来?

MS.*_*MS. 14 cpu arm cpu-architecture

在阅读ARM核心文档时,我对此表示怀疑.CPU如何区分读数据与数据总线,是将其作为指令执行还是作为可以操作的数据执行?

请参阅文件摘录 -

"数据通过数据总线进入处理器内核.数据可能是执行指令或数据项."

在此先感谢您的启发!/女士

小智 10

简单的答案 - 它没有.机器代码指令只是二进制数字,数据也是如此.更复杂的答案 - 您的处理器可能(或可能不)提供内存分段,这意味着尝试执行已指定为数据的内容会导致某种陷阱.这是"分段错误"的含义之一 - 处理器试图执行未标记为可执行代码的内容.


Bri*_*new 6

每个操作码将由N个字节的指令组成,然后期望随后的M个字节是数据(存储器指针等).因此,CPU使用每个操作码来确定以下字节数是多少.

当然对于旧处理器(例如旧的8位类型,例如6502等),没有区别.您通常会将程序计数器指向内存中程序的开头,并从内存中的其他位置引用数据,但程序/数据存储为简单的8位值.处理器本身无法区分这两者.

完全有可能将程序计数器指向那些被视为数据的东西,事实上我记得一个旧的大学教程,我的教授正是这样做的,我们不得不把错误指向他.他的回答是"但这是数据!它无法执行!它可以吗?",此时我用有效的操作码填充我们的数据,以证明它确实可以.

  • 仍然可以这样做. (2认同)