Assembly 手臂装配,操纵变量
我一直在尝试为ARM M0+处理器进行一些简单的组装操作 到目前为止,我失败了 我想分配两个变量,a和b到一些值,3和8,然后我想把一个变量设置为另一个变量的值 在任何更高级的语言中,我只需要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 这就是我陷入困境的地方,我
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
存储寄存器:。