我在一台8位电脑上观看video正在使用物理开关手动输入程序。
美联储的节目是:
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 0001 0010可以解释为:1 = LDA [2]
或:
1 = #10
是否因为程序运行时,地址被视为指令。但由于HLT,程序停止执行内存地址,就像它们是指令一样,并留下更高的地址;然后LDA / ADD / SUB等将内存中的所有位置视为二进制值。
在这种情况下,会:
<00> 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未定义。
答案 0 :(得分:5)
你正处于一个重要的实现的边缘:数据没有元数据没有意义 - 为了理解给定的比特序列,必须有一些&#34;知识和# 34;关于如何解释这些比特。
就指令而言,CPU的指令集定义了每条指令的大小及其伴随数据。每条指令都以操作码开头,以下数据通常是固定大小(大小取决于操作码)。每个指令按顺序执行(直到遇到跳转指令),从硬连接到CPU的某个初始地址开始。
因此,如果初始地址恰好是MAIN
标签的地址,则CPU看到的第一个操作码将为0000 0001
,因此它将知道它是LDA
它知道应该跟随一个四位数的指令。无论如何,这四位是下一条指令。
如果稍后执行错误的跳转指令,将CPU发送到示例中的第三个位组,会发生什么? (根据你的例子,我猜测CPU使用四位&#34;字节&#34 ;.)然后,CPU确实会将0100 0001
误认为操作码和一些数字的跟随位作为该操作码的数据,事情可能会非常错误。
答案 1 :(得分:0)
在计算机系统中,指令的地址来自PC(程序计数器),而数据的地址并非来自PC。这就是它们的区别。