Assembly 这些手臂装配线是做什么的?
我试图回答一个作业问题,我不确定我是否正确 问题是: 简要解释第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的起点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
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持有指向数组元素的指针。