Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly LDR和STR不工作?_Assembly_Arm - Fatal编程技术网

Assembly LDR和STR不工作?

Assembly LDR和STR不工作?,assembly,arm,Assembly,Arm,我仍然对STR和LDR指令的工作原理感到困惑,还是我做错了什么?以下是示例代码(使用ARMSIM): 这就是说: 将整数10的值设置为R5 将R5的值(在本例中为整数10)存储到R4的内存地址 在R4的内存地址中加载值为10的R3 在R4的内存地址中加载值为10的R2 将R3和R2的值添加到R4。(R3现在应该是20) 将R4的值移动到R1 设置要打印到控制台的#标准输出 打印20张 但是,在控制台中,我得到了0的输出。这怎么可能?如果您将某个内容存储到内存中,例如整数,它是否会变成其他内容,或

我仍然对STR和LDR指令的工作原理感到困惑,还是我做错了什么?以下是示例代码(使用ARMSIM):

这就是说:

  • 将整数10的值设置为R5
  • 将R5的值(在本例中为整数10)存储到R4的内存地址
  • 在R4的内存地址中加载值为10的R3
  • 在R4的内存地址中加载值为10的R2
  • 将R3和R2的值添加到R4。(R3现在应该是20)
  • 将R4的值移动到R1
  • 设置要打印到控制台的#标准输出
  • 打印20张

  • 但是,在控制台中,我得到了0的输出。这怎么可能?如果您将某个内容存储到内存中,例如整数,它是否会变成其他内容,或者我做错了什么?

    我不熟悉ARMSIM,但您可能应该初始化
    R4
    以指向可写内存。如果您尝试写入只读或非映射内存,则无法预知会发生什么情况,例如,您的写入可能会被默默忽略。r4肯定需要指向可写的位置。我如何做到这一点?它只是MOV R4,#0或其他什么?按R4,MOV R4,sp或类似的东西答案不会,不能,不应该是20,但是,0是重置向量,它可能是闪存,所以你无论如何都不想将其写入ram或rom。选择其他地址。。。
    Start:
    MOV R5, #10
    STR R5, [R4]
    
    LDR R3, [R4]
    LDR R2, [R4]
    
    ADD R4, R2, R3
    
    MOV R1, R4
    MOV R0, #Stdout
    SWI SWI_PrInt
    
    SWI SWI_Exit