-2

有人可以帮我在这个问题上停留几天。我想以 2 个十进制/十六进制的二进制值计算 1 的数字。但我得到的结果不正确。下面是一段代码:

.386  //32-bit processor
.model small, stdcall  
ExitProcess PROTO, deExitCode:DWORD  
.data  
var1 dw 2  
.code  
main PROC  
    LEA ESI,var1  
    MOV EBX, 4 //SIZE OF ARRAY AS 2 binary will be 0010  
    MOV ECX,0  
 L1:CMP EBX,0  
    JE L3  
    MOV EAX,[ESI]  
    CMP EAX,0  
    JE L2  
    INC ECX  
 L2:DEC EBX  
    ADD SI,2  
    JMP L1  
 L3: INVOKE ExitProcess,0  
main ENDP  
END main
4

1 回答 1

3

如果我理解你奇怪的术语来计算二进制值中 1 的数量,你想计算在 16 位内存变量中设置为 1 的位数var1。一个直接的解决方案是将变量加载到MOVZX EAX,[var1]寄存器SHR EAX,1ADC ECX,0

但是,您的代码似乎计算了内存中四个单词中有多少具有非零值。它有一些错误:

  • 您静态定义为的数组大小var1不是 4。它必须定义为var1 DW 2,3,4,5 ; Array of four words.

  • MOV EAX,[ESI]正确加载AXvar1但它也会将任何垃圾加载var1EAX.

  • ADD SI,2应该是ADD ESI,2

于 2021-09-30T10:42:13.533 回答