Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.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
Assembly 术语:当数据和指令的概念可以';不能分开吗?_Assembly_Arm_Cpu_Cpu Architecture - Fatal编程技术网

Assembly 术语:当数据和指令的概念可以';不能分开吗?

Assembly 术语:当数据和指令的概念可以';不能分开吗?,assembly,arm,cpu,cpu-architecture,Assembly,Arm,Cpu,Cpu Architecture,这是一个关于术语的问题。我以ARM为例,因为它是我唯一熟悉的组件,但我正在寻找更一般的答案 基本上,我很难区分指令、数据和操作码 我认为GPU比CPU更倾向于进行更多的内存访问,因为图形计算往往需要大量的数据。我的问题基本上是,什么是处理器上下文中的数据,因为处理器只能执行指令 说程序的25%是指令,75%是数据有意义吗 在ARM assembly中,.data部分中包含的后面的内容是否视为数据而不是数据?操作数是否算作数据?例如,如果我做了mov R0,#5那么说整行是指令,mov是操作码,5

这是一个关于术语的问题。我以ARM为例,因为它是我唯一熟悉的组件,但我正在寻找更一般的答案

基本上,我很难区分指令、数据和操作码

我认为GPU比CPU更倾向于进行更多的内存访问,因为图形计算往往需要大量的数据。我的问题基本上是,什么是处理器上下文中的数据,因为处理器只能执行指令

说程序的25%是指令,75%是数据有意义吗

在ARM assembly中,
.data
部分中包含的后面的内容是否视为数据而不是数据?操作数是否算作数据?例如,如果我做了
mov R0,#5
那么说整行是指令,mov是操作码,5是数据是否正确

.text
部分,如果您有
ldr R0,=myVar
.data
部分,您有
myVar:.word 5
什么是指令,什么是操作码

每个指令都有数据和操作码吗?但是,像“GPU通常处理的数据多于指令”这样的语句又有什么意义呢


编辑:让我改写这个问题。就特定于数据的一级缓存和特定于指令的一级缓存而言,如果某个对象是数据或指令,如何区分(在汇编级别上)?因为CPU执行的每件事都是一条指令,所以它的措辞似乎很糟糕。

我不认为会有一个真正的答案,因为您所困惑的术语对我们来说同样模糊

ARM使用固定长度的指令集。对于可变长度,例如x86,如果要在某个寄存器中加载32位立即数,则需要一些操作码字节或很少的字节,然后是32位立即数,它位于.text中并带有指令。对于像mips或arm这样的固定长度,它实际上与加载32位数字的立即数没有什么区别。有时,在.text中会有32位数字,但您将执行pc相对加载指令,这是一个数据周期,而不是一个获取周期。如果这就是你想要孤立的,祝你好运。在编译时,如果有一个外部引用(变量或函数基本上是一个地址),那么编译器通常会分配链接器随后填充的空间。对于可变长度指令集,编译器只需选择远端调用、跳转或mov,这与留下虚假地址供链接器稍后填充的内容相同

像x86、6502和z80这样的旧处理器以及一些相关的处理器更多的是一种操作码的概念,其中位模式并没有真正告诉您寄存器是什么,为便于解码,操作码映射可能以卡诺映射的形式刻出,但这些指令组所做的并不一定直接来自操作码位。RISC和更现代的指令集(甚至一些x86指令)更为明显,其中大部分指令只是gprs指令,只有少数位被称为操作码。比如说,alu指令将从sub和or中添加一些位,但要解码这些操作码位,必须解码其他位。ARM的编码非常不明显,您必须查看位才能看到它是什么指令。另一方面,Mips有几个主要的类,通过做两三次检查,你就知道它是什么指令了。因此,操作码与数据这一术语已经没有多大意义了,我想说,使用ARM,指令可以同时包含数据和操作码,不像x86那么多,但仍然有一些指令可以


就.data vs.text而言,它是非常特定于应用程序的,不可能有答案、gpu、cpu或其他方面。

我认为可以公平地说,cpu执行的所有内容都是指令,加载的所有内容都是数据

因为你们想知道术语,问题是cpu架构

包括ARM在内的任何现代主流计算机体系结构都可以分为以下几类:

哈佛体系结构是一种具有物理特性的计算机体系结构 指令和数据的单独存储和信号通道。(改进的哈佛体系结构机器非常类似于哈佛体系结构机器,但它放松了指令和数据之间的严格分离,同时仍允许CPU同时访问两条(或更多)内存总线。)

在这里,你可以找到数据和指令的定义。它只是告诉我们cpu有两个输入流,指令告诉我们做什么,数据允许加载/存储信息位。所以从数据端口加载的任何东西都是数据

这种分离的好处是,创建cpu体系结构的人可以决定他们的计划,并添加额外的功能来优化不同的部分。这意味着数据端口可以有更昂贵的内存访问接口

操作数是否算作数据

我想这取决于你是否认为常数数据是数据。很明显,不能将变量信息作为操作码嵌入,但据我所知,只要计算机体系结构运行,操作数就不是数据

只是想你有一些指令,只有操作数。就像一个计算数字的算法。如果所有的数据都是常量,为什么还要用到算法呢?您将有一个好的系统只返回结果,而不是执行完全相同的步骤

从另一个角度来看,比较CPU和GPU,GPU是一种特殊的CPU,它擅长批量处理大量数据

假设您要将彩色图像转换为灰度图像。只需将每个像素更改为灰色即可。Th