Arm 臂对称差

Arm 臂对称差,arm,Arm,我试图在ARM上制作一个程序,找出两个集合之间的对称差异,并将其存储在一个单独的集合中,我不确定我做错了什么,有人能帮忙吗? 以下是我所拥有的: start LDR R0, = ASize ;load number of elements in A LDR R0, [R0] LDR R1, = BSize ;load number of elements in B LDR R1, [R1] LDR R2,

我试图在ARM上制作一个程序,找出两个集合之间的对称差异,并将其存储在一个单独的集合中,我不确定我做错了什么,有人能帮忙吗? 以下是我所拥有的:

start

    LDR R0, = ASize     ;load number of elements in A
    LDR R0, [R0]        
    LDR R1, = BSize     ;load number of elements in B
    LDR R1, [R1]        
    LDR R2, = CSize     ;load number of elements in C
    LDR R2, [R2]        
    LDR R3, = AElems    ;load elements in A
    LDR R4, = BElems    ;load elements in B
    LDR R5, = CElems    ;load elements in C
    LDR R8, = '?'

while

    CMP R0,#0
    BEQ endwh

while2

    CMP R1,#0
    BEQ endwh   
    LDR R6, [R3]
    LDR R7, [R4]
    CMP R6,R7
    BEQ endwh
    STR R7, [R5]
    ADD R2,R2,#1
    ADD R4,R4,#4
    STR R8, [R4]
    SUB R1,R1,#1

    B   while
    STR R6, [R5]    
    ADD R2,R2,#1
    STR R8, [R3]
    SUB R0,R0,#1
    ADD R3,R3,#4
    B   while2

endwh

stop    B   stop

我设法弄明白了谢谢你的帮助! 这是我想出的解决办法

start
   LDR R0, = ASize
   LDR R0, [R0]
   LDR R1, = BSize
   LDR R1, [R1]
   LDR R2, = CSize
   LDR R2, [R2]
   LDR R3, = AElems
   LDR R4, = BElems
   LDR R5, = CElems
   LDR R8, = '?'

while
  CMP R0,#0
  BEQ endwh1
  LDR R6, [R3]
  LDR R7, [R4]
  CMP R6,R7
  BNE endwh2
  STR R8, [R3]
  STR R8, [R4]
  ADD R3,R3,#4
  SUB R0,R0,#1
  B   while
endwh2
  CMP R1,#0
  BEQ endwh3
  ADD R4,R4,#4
  SUB R1,R1,#1 
  B     while
endwh3
  STR R6,   [R5]
  ADD R5,R5,#4
  ADD R2,R2,#1
  ADD R3,R3,#4
  SUB R0,R0,#1
  LDR R4, = BElems
  LDR R1, = BSize
  LDR R1, [R1]
  B   while
endwh1
while2
  CMP R1,#0
  BEQ endwh
  LDR R7, [R4]
  CMP R7,#'?'
  BEQ endwh4
  STR R7, [R5]
  ADD R2,R2,#1
  ADD R5,R5,#4
  ADD R4,R4,#4
  SUB R1,R1,#1
  B   while2
endwh4
  ADD R4,R4,#4
  SUB R1,R1,#1
  B     while2
endwh
stop  B   stop

您是否假设“A”和“B”数组是有序的?我认为您的第二个
beq endwh
应该重新加载'r1==BSize'和'r4'作为'BElems',以重新启动下一个元素。此外,如果“CMP R6,R7”为真,则仅表示放弃结果集“C”的值(逻辑和),而不是结束算法。注释您的代码并使用
.set name rN
为您的注册表提供更有意义的名称会很有帮助。你能写出你想要发生的事情的“C”代码或流程图等吗?您需要在
b之后添加标签,而
;它目前是死代码。