Assembly 手臂装配,操纵变量

Assembly 手臂装配,操纵变量,assembly,arm,Assembly,Arm,我一直在尝试为ARM M0+处理器进行一些简单的组装操作 到目前为止,我失败了 我想分配两个变量,a和b到一些值,3和8,然后我想把一个变量设置为另一个变量的值 在任何更高级的语言中,我只需要 int a = 3; int b = 8; b = a; 到目前为止,在汇编中,我知道了如何分配和设置变量 a DCD 3 b DCD 8 我知道了如何获取变量的值和地址 LDR r0, =a ; r0 = &a LDR r0, [r0] ; r0 = a 这就是我陷入困境的地方,我

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

到目前为止,我失败了

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

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

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中

只需将加载操作反转为存储操作,即您需要内存地址,其中为
b

LDR r1, =b    ; r1 = &b (do not overwrite "a" value in r0)
然后将“a”值存储到内存中:

STR r0, [r1]  ; b = r0 (a)
这似乎是任何基础教程或书籍的一部分,所以可能尝试寻找其中一个,“猜测”关于组装的所有内容,以后只使用说明集手册是非常重要的练习,但对于基础知识,也可以使用一些教程或书让您更快地开始,组装不是“猜测”友好的


请记住,CPU指令是由CPU的硬件设计设计的,因此它们的内部“逻辑”是高级语言的“编程逻辑”可能需要和使用的内容与晶体管组可以有效完成的内容(硬件逻辑)之间的折衷,汇编不是“编程语言”,而是“CPU描述的硬件设计”,因此,如果你一直期待“编程”逻辑,你经常会遇到奇怪的事情(这是完全正确的,一旦你尝试考虑HW的思维方式,然后那些奇怪的东西是隐藏的高级编程语言编译器,所以普通程序员不需要知道确切的HW如何操作).

DCD 3
为函数中的
静态int a=3
或全局范围内的
int a=3
分配空间。编译器将堆栈上的空间用于局部变量。无论如何,请查看编译器输出,了解如何使用
str
存储寄存器:。