Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.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 这些手臂装配线是做什么的?_Assembly_Arm - Fatal编程技术网

Assembly 这些手臂装配线是做什么的?

Assembly 这些手臂装配线是做什么的?,assembly,arm,Assembly,Arm,我试图回答一个作业问题,我不确定我是否正确 问题是: 简要解释第3、4、7、8、9、10、11行说明的目的, 12和13 我的答覆是: 3-将变量A的(地址/值?)加载到R1中 4-将常量最大值移动到R2 -- 7-将R2的内容与常数0进行比较 8-如果R2=0,则结束分支(循环) 9-将R1的内容加载到R4中 10-将R3中的数据与R4相加,结果保存在R3中 11-使用常数4在R1中添加数据,结果保存在R1中 12-用常数1减去R2中的数据,结果保存在R2中 13-环回至环1的起点 1. .g

我试图回答一个作业问题,我不确定我是否正确

问题是:

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

我的答覆是:

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

4-将常量最大值移动到R2

--

7-将R2的内容与常数0进行比较

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

9-将R1的内容加载到R4中

10-将R3中的数据与R4相加,结果保存在R3中

11-使用常数4在R1中添加数据,结果保存在R1中

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

13-环回至环1的起点

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

我认为,你提供的所有答案都是正确的,除了以下几点

(a)

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

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

(b)

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

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

(c)

9-将R1的内容加载到R4中

将R1持有的内存地址的内容加载到R4中。 e、 g.如果R1=0x01234567且内存地址0x01234567的值为0x89abcdef
然后在执行第9行之后,R4将保持值0x89abcdef

如果通过
9-将R1的内容加载到R4
您指的是地址R1处的内存内容(已设置为
A
)那么您似乎是正确的。3-未完成。9是错的(因为它使用了与7相同的措辞),13我也不喜欢;第14行是循环的右后,所以它是一个
中断
,就像OP(笨拙地)描述的那样。纠正peter,在这个特定的情况下,它将中断循环,一般意义上它将跳转到一个特定的位置。我很确定OP知道这一点,即使它的其余部分只是“无语境教学的建筑效果“,而不是试图对数组上此循环的更高级别行为进行反向工程或描述。如果你想提出你的论点,那么你需要一起看第7+8行。就其本身而言,Z标志上有8个分支,而不管它是如何设置的。或者至少改写你的答案,不要声称OP有8个错误,这让他们感到困惑。当您进行此操作时,您的9示例可能会指出R1持有指向数组元素的指针。