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