ARM汇编,操纵变量

时间:2018-11-06 07:36:11

标签: assembly arm

我一直在尝试对ARM M0 +处理器进行一些简单的组装操作。

到目前为止,我失败了。

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

在任何高级语言中,我只需要

int a = 3;
int b = 8;
b = a;

到目前为止,我已经了解了如何分配和设置变量。

a DCD 3
b DCD 8

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

LDR r0, =a    ; r0 = &a
LDR r0, [r0]  ; r0 = a

这就是我遇到的问题,如何将r0的值存储到变量b中?

1 个答案:

答案 0 :(得分:5)

只需将装入操作转换为存储操作,即您需要在其中保留b的内存的地址:

LDR r1, =b    ; r1 = &b (do not overwrite "a" value in r0)

然后将“ a”值存储到内存中:

STR r0, [r1]  ; b = r0 (a)

这似乎是应该作为任何基础教程或书籍的一部分的内容,因此也许尝试自行寻找,“猜测”有关汇编的所有内容,仅使用指令集手册是稍后的重要实践,但对于使用还有一些教程或书籍可以帮助您更快地入门,而组装并不是“猜测”友好的。

请记住,CPU指令是由CPU的硬件设计所设计的,因此它们的内部“逻辑”是高级语言的“编程逻辑”可能需要和使用的哪种晶体管以及哪些晶体管可以有效地实现的折衷方案(硬件逻辑),汇编不是“ CPU描述的硬件设计”,而是“编程语言”,因此,如果您一直期待“编程”逻辑,那么您经常会遇到奇怪的事情(一旦您发现,这很有意义)尝试考虑硬件的思维方式,然后这些怪异的东西被高级编程语言编译器隐藏,因此普通程序员无需确切了解硬件的运行方式。