У вас есть 4 различных возможных подхода, которые я напишу в x86, так как мои знания по IAS очень ограничены, но вы можете применять те же логики c
1 / грубая сила
xor eax, eax
mov ecx, 100
.myloop:
add eax, ecx
dec ecx
jnz .myloop
2 / В логе грубой силы c вы можете загрузить значение по адресу памяти (что, по-видимому, является тем, что вы хотите сделать? Я добавляю от 100 до 1.
xor eax, eax
mov ecx, 100
.myloop:
lea edx, [100+ecx*4-4] ; assuming integer array
add eax, [edx]
dec ecx
jnz .myloop
3 / A более эффективным способом, и, предполагая, что числа следуют друг за другом и начиная с 1, вы можете использовать знаменитую формулу res = n(n+1) / 2
. Если вы думаете о кости, сумма от 1 до 6 составляет 21, что в точности 6 * 7/2 Чтобы избежать переполнения INT_MAX, я бы предложил проверить, установлен ли бит n, установлен ли он, разделить n + 1 на 2, иначе разделить n на 2
mov edx, [100+99*4] ; load value 100 in register edx
test edx, 1
jnz .planb
mov eax, edx
shr eax
inc edx
imul eax, edx
leave
ret
.planb:
mov eax, edx
inc eax
shr eax
imul eax, edx
leave
ret
4 / hardcode n (n +1) / 2 в вашем регистре. (Равно 5050)