2016-01-04 3 views
0

Я пытаюсь сделать программу на 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, = 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 
+0

ли вы предположить, что «A» и массивы «B» упорядочены? Я думаю, что ваш второй 'beq endwh' должен перезагрузить 'r1 == BSize' и 'r4' как 'BElems' для перезапуска для следующего элемента. Кроме того, если «CMP R6, R7» истинно, это просто означает сбросить значение (логика * и *) набора результатов «C», а не заканчивать алгоритм. Было бы полезно прокомментировать ваш код и использовать '.set name rN', чтобы дать вашему регистру более значимые имена. Можете ли вы написать код «C» или блок-схему и т. Д. Того, что вы хотите? Вам нужна метка после 'b while'; в настоящее время это мертвый код. –

ответ

0

мне удалось понять это спасибо за помощь! вот решение, которое я придумал

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 
Смежные вопросы