这些ARM装配线做什么?

时间:2019-04-30 14:47:11

标签: assembly arm

我正在尝试回答作业问题,不确定我是否正确。

问题是:

简要说明第3、4、7、8、9、10、11行的说明的目的 12和13。

我的答案:

3-将var A的(地址/值?)加载到R1中。

4-将常数MAX移至R2。

-

7-比较R2的内容与常数0。

8-如果R2 = 0,则结​​束分支(循环)

9-将R1的内容加载到R4

10-用R4在R3中添加数据,结果保存在R3中。

11-将R4中的数据添加为常数4,结果保存在R1中。

12-用常数1减去R2中的数据,结果保存在R2中。

13-循环回到loop1的开始

1. .global _start
2. _start:
3. LDR R1, =A
4. MOV R2, #MAX
5. MOV R3, #0
6. loop:
7. CMP R2, #0
8. BEQ end
9. LDR R4, [R1]
10. ADD R3, R4
11. ADD R1, #4
12. SUB R2, #1
13. B loop
14. end: ...
15. .data
16. .equ MAX, 5
17. A: .rept MAX
18. .word 0x00
19. .endr

1 个答案:

答案 0 :(得分:1)

我认为,除以下内容外,您提供的所有答案都是正确的。

a)

  

3-将var A的(地址/值?)加载到R1中。

第3行会将第17行的内存位置放入R1。

b)

  

8-如果R2 = 0,则结​​束分支(循环)

如果R2 == 0,则执行将跳至第14行

c)

  

9-将R1的内容加载到R4

将R1保留的内存地址的内容加载到R4中。 例如如果R1 = 0x01234567并且内存地址0x01234567的值为0x89abcdef 然后在执行第9行后,R4将保持值0x89abcdef