Итак, я изучаю сборку, и я написал программу для суммирования значений, которые я определяю в 'data_type'.Assembly Beginner: установить переменную, равную количеству значений в DCD?
Atm Мне нужно вручную установить переменную 'num', равную количеству значений в 'data_type', чтобы гарантировать, что цикл суммирует их все.
Мне было интересно, есть ли лучший способ сделать это?
А если есть способ объявить переменную 'num' динамически, чтобы принять количество значений в 'data_type'?
Заранее благодарен!
AREA Sum loop, CODE, READONLY
ENTRY
num EQU 5
Reset_Handler
LDR r1, =data_values
MOV r5,#num
loop
LDR r2,[r1],#4
ADD r3,r3,r2
SUBS r5,r5,#1
BNE loop
data_values
ALIGN 4
DCD 1, 1, 1, 1, 1 ; example values
END
Не уверен в вашем ассемблере, но: 1) что произойдет, если 'data_values' не будет выровнено? Если он работает аналогично другим ассемблерам, символ 'data_values' будет иметь неизмененное значение адреса, в то время как' DCD' будет определять данные на выровненном, поэтому ваш код будет выполнять неравномерный доступ к неправильным байтам данных. Я считаю, что вы должны поменять эти два, сначала выровнять, а затем определить символическую метку. 2) что происходит после 'BNE'? Или вы просто запускаете это в отладчике до этого момента, не позволяя ему выйти за пределы вашего определенного кода? – Ped7g
Хорошо, спасибо, обменяй их сейчас. Использование инструментов Keil. Я просто запускаю его в BNE в отладчике, поскольку это всего лишь учебное упражнение, есть ли у вас какие-либо рекомендации относительно того, как достичь того, что я просил выше? – ohkneel