【问题标题】:How does a computer distinguish whether a binary pattern is an instruction or just a number?计算机如何区分二进制模式是指令还是数字?
【发布时间】:2018-02-22 18:13:19
【问题描述】:

我正在阅读 Hamacher 的《计算机组织和嵌入式系统》一书,我的问题是:“计算机如何区分二进制模式是指令还是数字?”

谁能帮我理解这个概念?

【问题讨论】:

  • 你如何理解一个字母是一个单词的一部分还是一个随机字母?上下文。
  • 字母没有意义,但单词会。
  • 想一想……
  • 对于哈佛架构,指令和数据内存是不同的,但是冯诺依曼架构呢?
  • 人类如何区分00000100是指令还是数字?指令数字。冯诺依曼架构,如果你把一个数字放在期望指令的地方,它将被视为指令,如果你把它放在期望数据的地方,它将被视为数据。

标签: cpu-architecture von-neumann


【解决方案1】:

冯诺依曼处理器(几乎所有处理器)无法区分内存中的代码和数据。 CPU 的指令指针指向的任何内容都将作为指令加载到指令解码器中。如果它不是有效指令,它将在 CPU 中引发异常。

这使程序能够在内存中创建新的可执行代码,甚至更改自己的代码。另一方面,这会导致许多代码注入攻击。

【讨论】:

  • 是的,没错。如果它解码为有效指令,它就会运行,即使它不是 有用 指令,例如导致来自潜在无效地址的加载。 (如果您在 x86 等体系结构中省略函数底部的 ret 非常常见,其中像 00 00 这样的常见填充模式是有效指令 (add [rax], al)。
【解决方案2】:

计算机区分指令和数字的方式仅取决于读取数据的对象和位置。例如,一个简单的算术逻辑单元 (ALU) 将包括一个用于要完成的操作的输入和两个用于操作数的输入。进入操作数端口的数据被读取为数字,而进入操作符输入的数据被读取为指令。

这完全取决于读取数据的计算机架构单元,以及该单元读取数据的输入。

【讨论】:

    猜你喜欢
    • 2017-12-19
    • 2017-01-26
    • 2015-09-12
    • 1970-01-01
    • 2013-07-06
    • 2019-11-09
    • 2012-04-03
    • 2014-12-03
    相关资源
    最近更新 更多