如何使用指令 LODSB 将每隔一个数字加载到寄存器中
how to load every second number into registers using the instruction LODSB
我有一个代码,可以从 numbers
table 中找到 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
I have a code where I find the sum of 10 numbers from the numbers
table.
字节数组
假设您的代码对这 10 个数字求和是正确的,唯一缺少的是事先将 EAX
寄存器归零。这不是 LODSB
要做的事情!
mov esi, OFFSET numbers
mov ecx, 10
xor eax, eax
myLoop:
lodsb
add sum, eax
loop myLoop
mov eax, sum
每秒只求和byte
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
我有一个代码,可以从 numbers
table 中找到 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
I have a code where I find the sum of 10 numbers from the
numbers
table.
字节数组
假设您的代码对这 10 个数字求和是正确的,唯一缺少的是事先将 EAX
寄存器归零。这不是 LODSB
要做的事情!
mov esi, OFFSET numbers
mov ecx, 10
xor eax, eax
myLoop:
lodsb
add sum, eax
loop myLoop
mov eax, sum
每秒只求和byte
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