所以我试图添加 1+2+3... 等等...而不使用蛮力。Y=∑_1^100▒X_i,数字 Xi 存储在从位置 100 开始的连续内存位置中。我使用的是 IAS 指令集:
我似乎无法完成这件事。我什至不知道从哪里开始,没有真正的循环或 if 语句
您有 4 种不同的可能方法,由于我对 IAS 的了解非常有限,因此我将使用 x86 编写它们,但您可以应用相同的逻辑
1/蛮力
xor eax, eax
mov ecx, 100
.myloop:
add eax, ecx
dec ecx
jnz .myloop
2/从蛮力逻辑你可以在内存地址加载值(这似乎是你想要做的?我从 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/ 一种更有效的方法,假设数字相互跟随并从 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/ 在您的寄存器中硬编码 n(n+1)/2。(等于 5050)