Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MARIE assembly中,为什么MAR有时包含PC-1(如PC-1的内容),但并非始终包含PC-1?_Assembly_Cpu Architecture_Marie - Fatal编程技术网

在MARIE assembly中,为什么MAR有时包含PC-1(如PC-1的内容),但并非始终包含PC-1?

在MARIE assembly中,为什么MAR有时包含PC-1(如PC-1的内容),但并非始终包含PC-1?,assembly,cpu-architecture,marie,Assembly,Cpu Architecture,Marie,我是新来的,所以我想先弄清楚基本原理,所以我研究了MARIE assembly,我注意到MAR有时只是PC的值,但减去1,这背后有什么原因,还是只是巧合 现在研究它,我也注意到IR和MBR有时有相同的值;为什么会这样?这不是巧合。您看到的是不同指令类型的组合,以及模拟器暂停以显示这些寄存器的值(可能在指令之间)的情况 MAR(内存地址寄存器)是该处理器与内存通信的唯一方式,用于读取/加载或写入/存储位置 MBR(内存缓冲寄存器)用于保存内存传输操作期间读取或写入的数据 MAR用于指令获取和任何数

我是新来的,所以我想先弄清楚基本原理,所以我研究了MARIE assembly,我注意到MAR有时只是PC的值,但减去1,这背后有什么原因,还是只是巧合


现在研究它,我也注意到IR和MBR有时有相同的值;为什么会这样?

这不是巧合。您看到的是不同指令类型的组合,以及模拟器暂停以显示这些寄存器的值(可能在指令之间)的情况

MAR(内存地址寄存器)是该处理器与内存通信的唯一方式,用于读取/加载或写入/存储位置

MBR(内存缓冲寄存器)用于保存内存传输操作期间读取或写入的数据

MAR用于指令获取和任何数据加载或数据存储操作

指令获取序列包括

MAR:=PC MBR:=内存[MAR] IR:=MBR 处理器通过将PC值复制到MAR中并断言读取信号来获取指令-内存通过读取该内存位置并将其内容放入MBR来响应。处理器然后将MBR中的指令复制到IR中进行指令解码

在指令执行期间,PC处于高级状态,通常指向下一条指令

如果指令未执行数据加载或数据存储操作(例如SkipCond、Input、Output),则在指令完成后,您将看到MAR保留了指令的PC,并且PC已被提升,通常为1。此外,IR和MBR将保持相同的值,即机器代码指令。MAR和MBR反映指令获取

但是,如果指令执行数据加载或数据存储操作,则在指令完成后,您将看到MAR保存数据存储器的地址,MBR保存传输的数据值。这些指令仍然执行指令提取-如果您在执行这些指令的过程中在正确的时间点观察寄存器,您将看到IR=MBR和MAR=PC,但作为这些指令完成的一部分,MAR&MBR被重新用于数据内存访问

所有指令都从内存中提取,但有些指令还进行数据加载/存储

底线是,MAR&MBR保存最近的内存操作中使用的值,无论是指令获取还是数据加载/存储,即使在该内存操作完成之后,直到它们被重新用于下一个指令获取

在其他一些处理器上,有单独的指令内存和数据内存,因此实际上有两个MAR和两个MBR,PC是指令内存的MAR。这些可能是缓存,然后统一到共享主内存


分开的记忆被称为记忆;像MARIE这样没有指令预取缓冲区或指令缓存的简单机器可以直接使用PC作为MAR。如果PC在获取后更新到下一条指令,它可以在使用PC作为MAR执行当前指令的同时获取下一条指令。

这不是巧合。您看到的是不同指令类型和b的组合,其中模拟器暂停显示这些寄存器的值,可能在指令之间

MAR(内存地址寄存器)是该处理器与内存通信的唯一方式,用于读取/加载或写入/存储位置

MBR(内存缓冲寄存器)用于保存内存传输操作期间读取或写入的数据

MAR用于指令获取和任何数据加载或数据存储操作

指令获取序列包括

MAR:=PC MBR:=内存[MAR] IR:=MBR 处理器通过将PC值复制到MAR中并断言读取信号来获取指令-内存通过读取该内存位置并将其内容放入MBR来响应。处理器然后将MBR中的指令复制到IR中进行指令解码

在指令执行期间,PC处于高级状态,通常指向下一条指令

如果指令未执行数据加载或数据存储操作(例如SkipCond、Input、Output),则在指令完成后,您将看到MAR保留了指令的PC,并且PC已被提升,通常为1。此外,IR和MBR将保持相同的值,即机器代码指令。MAR和MBR反映指令获取

但是,如果指令执行数据加载或数据存储操作,则在指令完成后,您将 我看到MAR保存数据存储器的地址,MBR保存传输的数据值。这些指令仍然执行指令提取-如果您在执行这些指令的过程中在正确的时间点观察寄存器,您将看到IR=MBR和MAR=PC,但作为这些指令完成的一部分,MAR和MBR被重新用于数据内存访问

所有指令都从内存中提取,但有些指令还进行数据加载/存储

底线是,MAR&MBR保存最近的内存操作中使用的值,无论是指令获取还是数据加载/存储,即使在该内存操作完成之后,直到它们被重新用于下一个指令获取

在其他一些处理器上,有单独的指令内存和数据内存,因此实际上有两个MAR和两个MBR,PC是指令内存的MAR。这些可能是缓存,然后统一到共享主内存


分开的记忆被称为记忆;像MARIE这样没有指令预取缓冲区或指令缓存的简单指令可以直接使用PC作为MAR。如果PC在获取后更新到下一条指令,它可以在使用PC作为MAR执行当前指令的同时获取下一条指令。

@PeterCordes,MIPS的指令内存与数据内存是分开的。因此,在CPU内部,似乎有两个MAR和两个MBR。当然,它们是统一到主存的缓存,因此它们可以同时声明哈佛和存储程序。@PeterCordes,MARIE不使用PC作为MAR,因为MAR&MBR在指令获取和数据读取/写入时共享。术语:哈佛是存储程序;与冯·诺依曼的不同之处在于,程序本身不能用正常的存储指令修改代码。但是操作员可以通过加载新指令对机器进行重新编程,如果计算机采用这种方式构建,程序可以要求磁盘控制器或读卡器将DMA数据输入程序内存。是的,像MIPS这样的统一内存前面的分割缓存和大多数现代设计是相关的,但被称为修改的哈佛,因为程序和数据仍然共享相同的指针地址空间,不像真正的哈佛。一种根本不存储程序的计算机将是FPGA或ASIC。或者是一台旧机器,你可以通过手工重新布线来编程。或者是一个更深奥的例子,康威的生命游戏是图灵完成的,但是程序和数据都是作为系统状态的一部分混合在一起的。而且执行模型本身也不是串行的。没有冯·诺依曼瓶颈。顺便说一句,我并没有说MARIE已经或者可以使用PC作为/an MAR。当我说像MARIE一样,我只是指没有预取缓冲区,如果你指的是预取缓冲区的话。@PeterCordes,MIPS的指令内存与数据内存是分开的。因此,在CPU内部,似乎有两个MAR和两个MBR。当然,它们是统一到主存的缓存,因此它们可以同时声明哈佛和存储程序。@PeterCordes,MARIE不使用PC作为MAR,因为MAR&MBR在指令获取和数据读取/写入时共享。术语:哈佛是存储程序;与冯·诺依曼的不同之处在于,程序本身不能用正常的存储指令修改代码。但是操作员可以通过加载新指令对机器进行重新编程,如果计算机采用这种方式构建,程序可以要求磁盘控制器或读卡器将DMA数据输入程序内存。是的,像MIPS这样的统一内存前面的分割缓存和大多数现代设计是相关的,但被称为修改的哈佛,因为程序和数据仍然共享相同的指针地址空间,不像真正的哈佛。一种根本不存储程序的计算机将是FPGA或ASIC。或者是一台旧机器,你可以通过手工重新布线来编程。或者是一个更深奥的例子,康威的生命游戏是图灵完成的,但是程序和数据都是作为系统状态的一部分混合在一起的。而且执行模型本身也不是串行的。没有冯·诺依曼瓶颈。顺便说一句,我并没有说MARIE已经或者可以使用PC作为/an MAR。当我说像MARIE一样时,我只是指没有预取缓冲区,如果你指的是这样的话。