ARM汇编,操纵变量

MKU*_*tra 1 assembly arm

我一直试图在ARM M0 +处理器的汇编中进行一些简单的操作.

到目前为止,我失败了.

我想分配两个变量,a&b到一些值,3和8,然后我想将一个变量设置为另一个的值.

在任何更高级别的语言我只需要

int a = 3;
int b = 8;
b = a;
Run Code Online (Sandbox Code Playgroud)

到目前为止,在汇编中我想出了如何分配和设置变量.

a DCD 3
b DCD 8
Run Code Online (Sandbox Code Playgroud)

我想出了如何获得变量的值和地址

LDR r0, =a    ; r0 = &a
LDR r0, [r0]  ; r0 = a
Run Code Online (Sandbox Code Playgroud)

这就是我陷入困境的地方,我如何将r0的值存储到变量b中?

Ped*_*d7g 5

只需将加载操作转换为存储操作,即需要内存地址,其中保留空间为b:

LDR r1, =b    ; r1 = &b (do not overwrite "a" value in r0)
Run Code Online (Sandbox Code Playgroud)

然后将"a"值存储到内存中:

STR r0, [r1]  ; b = r0 (a)
Run Code Online (Sandbox Code Playgroud)

这似乎应该是任何基础教程或书籍的一部分,所以也许试着寻找一个,"猜测"关于汇编的一切自己,只使用指令集手册是以后的重要实践,但对于基础使用也有一些教程或预订让你开始更快,装配不是"猜测"友好.

请记住,CPU指令是由CPU的硬件设计设计的,因此它们的内部"逻辑"是高级语言可能需要和使用的"编程逻辑"之间的折衷,以及哪些晶体管可以有效地执行(HW逻辑) ),汇编不是那么多"编程语言",因为它是"硬件设计CPU描述",所以如果你一直期待"编程"逻辑,你会经常遇到奇怪的事情(一旦你试着考虑就很有意义)硬件思维方式然后那些奇怪的东西被高级编程语言编译器隐藏,所以普通的程序员不需要确切地知道硬件是如何运行的.