如果我要尝试计算 dw 数据中 1 的数量,我会怎么做呢?我想将 1 的数量存储在内存总和中。我正在使用 EBE 以 64 位汇编语言进行编码。
segment .data
data dw 1011011011001010b
sum dq 0
size db 16
segment .text
global main
main:
如果我要尝试计算 dw 数据中 1 的数量,我会怎么做呢?我想将 1 的数量存储在内存总和中。我正在使用 EBE 以 64 位汇编语言进行编码。
segment .data
data dw 1011011011001010b
sum dq 0
size db 16
segment .text
global main
main:
下面是一个简单的代码,用于计算数据中的1:
movzx edx, word [data]
xor eax, eax ; RAX=0 CF=0
more:
adc eax, 0
shr edx, 1
jnz more
adc eax, 0
mov [sum], rax
此代码段计算data值中的0。它的工作原理是从数据中的可用位数中减去 1 的数量(存储在size中)。
movzx edx, word [data]
movzx eax, byte [size]
clc ; Keeps first SBB from subtracting (first time only)
more:
sbb eax, 0
shr edx, 1
jnz more
sbb eax, 0
mov [sum], rax