1

如果我要尝试计算 dw 数据中 1 的数量,我会怎么做呢?我想将 1 的数量存储在内存总和中。我正在使用 EBE 以 64 位汇编语言进行编码。

segment .data
       data     dw  1011011011001010b
       sum  dq  0
       size     db  16

segment .text
global main
main:
4

1 回答 1

1

下面是一个简单的代码,用于计算数据中的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
于 2020-11-18T18:12:19.133 回答