有人可以幫我解決這個問題幾天以來的問題。我想以 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
uj5u.com熱心網友回復:
如果我理解你用奇怪的術語來計算二進制值中 1 的數量,你想計算 16 位記憶體變數中有多少位設定為 1 var1。一個直接的解決方案是將變數加載到暫存器 ( MOVZX EAX,[var1]) 中,然后將最低位移動 16 次到 CF ( SHR EAX,1) 并ADC ECX,0每次將 CF 添加到計數器暫存器 ( )。
但是,您的代碼似乎計算記憶體中四個單詞中有多少個具有非零值。其中有一些錯誤:
您靜態定義的陣列大小
var1不是 4。它必須定義為var1 DW 2,3,4,5 ; Array of four words.MOV EAX,[ESI]正確加載AX,var1但它也會將后面的任何垃圾加載var1到EAX.ADD SI,2應該是ADD ESI,2。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/315400.html
