gpt4 book ai didi

assembly - 计算机如何区分数据和指令?

转载 作者:行者123 更新时间:2023-12-05 09:19:49 27 4
gpt4 key购买 nike

我看了一个video在 8 位电脑上输入程序 - 手动,使用物理开关。

美联储计划是:

MAIN:
0000 0001 0100 # 0 = LDA [4]
0001 0010 0101 # 1 = ADD [5]
0010 0101 0000 # 2 = OUT
0011 1111 0000 # 3 = HLT

DATA:
0100 00001110 # 4 = #14
0101 00011100 # 5 = #28

我想知道的是计算机如何区分数据和指令,因为没有标志将数据与指令分开。

0001 0001 0010 可以解释为:

1 = LDA [2]

或:

1 = #10

是不是因为在程序运行的时候,地址被当成了指令。但是由于 HLT,程序停止执行内存地址,就好像它们是指令一样,并留下更高的地址;然后 LDA/ADD/SUB 等将内存中的所有位置视为二进制值。

在那种情况下,会:

0000 0010 0000 解释为:

0 = ADD #32

不是

0 = ADD [ ADD [ ADD [ ADD ...]]]

** 在写这个问题的过程中,我意识到了一些新的东西

更好的例子:

如果不存在停止,程序是否可以正常工作,但随后继续向下处理数据并解释为:

0010 0000 1110      # 4 = NOP [14]
0101 0001 1100 # 5 = LDA [12]

如果是这样,计算机会不会崩溃 1:因为 NOP 被赋予了一个操作数,以及 2:因为内存地址 12 和 14 是未定义的。

最佳答案

您即将认识到一个重要的事实:没有元数据,数据就没有意义 - 为了理解给定的位序列,必须有一些“知识”来了解那些如何位应该被解释。

就指令而言,CPU 的指令集定义了每条指令及其附带数据的大小。每条指令都以操作码开头,随后的数据通常固定大小(大小取决于操作码)。每条指令按顺序执行(直到遇到跳转指令),从硬连线到 CPU 的某个初始地址开始。

因此,如果初始地址恰好是 MAIN 标签的地址,CPU 看到的第一个操作码将是 0000 0001,因此它会知道它是一个 LDA 指令,它知道后面应该跟着一个四位数。这四位之后的内容就是下一条指令。

如果稍后执行错误的跳转指令,将 CPU 发送到示例中的第三位组,会发生什么情况? (根据您的示例,我猜测 CPU 以四位“字节”运行。)然后确实,CPU 会将 0100 0001 误认为操作码和以下一些位作为该操作码的数据,事情很可能会出错。

关于assembly - 计算机如何区分数据和指令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39555288/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com