内存是否以二进制形式存储在ARM Assembly中?

时间:2019-11-14 15:40:56

标签: arrays loops assembly binary decimal

假设我做了一条指令,例如MOV R1,#9。是否将二进制数字9以二进制形式存储在ARM Assembly的内存中? ARM汇编代码是否会看到R1内存中存储的数字00001001?如果没有,它将如何以二进制形式存储十进制数字9?

3 个答案:

答案 0 :(得分:0)

处理器的存储和逻辑由门组成,这些门将值作为电压进行操作。为简单起见,仅识别两个电压:高电压和低电压,构成一个二进制系统。

处理器可以使用简单的布尔逻辑(AND,OR等)来操纵(计算)这些值-这称为combinational logic

处理器还可以使用称为sequential logic的逻辑周期(此处为循环,如图中的周期)来存储一段时间的二进制值。循环会创建一个反馈循环,该循环将保留值,直到被告知保留新值为止(否则会丢失电源)。

大多数有意义的东西都需要多个二进制值,我们可以将其称为位字符串。我们可以将这些位字符串视为数字,字符等,通常取决于上下文。

处理器的寄存器是用于存储位字符串的顺序逻辑的示例,这里每个寄存器32位的字符串。

机器代码是处理器的语言。处理器将位字符串解释为要执行的指令序列。一些位串命令处理器将值存储在寄存器中,这些值由使用顺序逻辑串的门组成,此处每个寄存器32位:每个位在二进制系统中将值存储为电压。

寄存器是存储的,但是我们真正可视化它们的唯一方法是使用机器代码指令检索它们的值,以将这些值发送到输出设备,以数字,字符,颜色等形式查看。

简而言之,如果将数字#9发送到寄存器,它将存储特定的位字符串,并且一些后续的机器代码指令将能够检索相同的位模式。那9代表数字9还是制表符还是其他什么都取决于解释,这是通过编程完成的,而编程最终会将源代码转换成机器代码指令序列。

答案 1 :(得分:0)

计算机中的所有内容始终都是二进制文件;十进制和十六进制只是人类友好的符号,用于编写二进制位模式表示的值。

即使将二进制整数转换为十进制数字的字符串(例如,通过重复除以10以得到digit = remainder),这些数字也会以ASCII的形式存储在每个字节中。

例如,数字'0'由ASCII / UTF-8位模式00110000表示,也称为十六进制0x30,又称为十进制48。

我们称其为“转换为十进制”,是因为该值现在以一种可以复制到文本文件或视频存储器中的方式表示,可以在人类中显示为一系列十进制数字。

但是实际上,所有信息仍以开或关的二进制位表示。计算机内部没有单根导线或晶体管可以使用例如来代表单个10状态值。十个不同电压电平之一。总是一直打开或一直关闭。


https://en.wikipedia.org/wiki/Three-valued_logic又名三元逻辑是非二进制逻辑的常见示例。真正的十进制逻辑是 n 值逻辑的一个实例,其中“位”可以具有10个值之一而不是3个值。

实际上,CPU基于严格的二进制(布尔)逻辑。我提到三元逻辑只是为了说明计算机真正使用十进制逻辑/数字对计算机的真正含义,而不仅仅是使用二进制表示十进制字符 >。

答案 2 :(得分:0)

处理器具有许多存储内容的位置;您可以将其称为内存层次结构:与处理器非常接近的“内存”非常快且很小,例如。寄存器和距离处理器较远的“内存”慢而又大,就像磁盘一样。介于两者之间的是各个级别的高速缓存存储器和主存储器。
由于这些存储器在技术上截然不同,因此以不同的方式进行访问:通过直接在汇编代码中指定寄存器来访问寄存器(如R1中的MOV R1, #9),而主存储器的存储位置则用连续编号“地址”。
因此,如果执行MOV R1, #9,二进制数字9将存储在CPU的寄存器1中,而不是主存储器中,并且读出R1的汇编代码将回读数字9。
所有数字均以二进制格式存储。最著名的是整数(例如您的示例二进制00001001,十进制9)和浮点数。