我有一個代碼,可以從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
uj5u.com熱心網友回復:
我有一個代碼,可以從
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/374965.html
