我有一個代碼,可以從numbers
表中找到 10 個數字的總和。如何找到所有其他數字的正確總和?您是否需要以某種方式lodsb
將eax
每個第二個數字加載到 EAX 中?或者你還需要對add指令做些什麼?
cld
mov esi, OFFSET numbers ; in `numbers` i have 10 numbers
mov edi, esi
mov ecx, 10
myLoop:
push ecx
lodsb ; here i add each digit in turn to the `eax` register
add sum, eax ; here i summarize the numbers
pop ecx
loop myLoop
mov eax, sum
我有一個代碼,可以從
numbers
表中找到 10 個數字的總和。
假設您的代碼對這 10 個數字求和是正確的,唯一缺少的就是EAX
事先將寄存器清零。這不是LODSB
要做的事情!
mov esi, OFFSET numbers
mov ecx, 10
xor eax, eax
myLoop:
lodsb
add sum, eax
loop myLoop
mov eax, sum
每隔一個字節求和
mov esi, OFFSET numbers
mov ecx, 10 / 2 ; Half
xor eax, eax
myLoop:
inc esi ; Skip (or use an extra LODSB here)
lodsb
add sum, eax
dec ecx
jnz myLoop
mov eax, sum
該LODSB
指令不加載整數。使用LODSD
.
mov esi, OFFSET numbers
mov ecx, 10
myLoop:
lodsd
add sum, eax
loop myLoop
mov eax, sum
每隔一個dword求和
mov esi, OFFSET numbers
mov ecx, 10 / 2 ; Half
myLoop:
add esi, 4 ; Skip (or use an extra LODSD here)
lodsd
add sum, eax
dec ecx
jnz myLoop
mov eax, sum
類似於@Jester 的建議。
mov ecx, (10 / 2) - 1
myLoop:
add eax, [numbers + ecx * 8 + 4]
dec ecx
jns myLoop
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句