我有一個64位變量,並且想要在其二進制表示中計算1和0的數目。我不想更改變量中的值,所以我想使用Test運算符來計算變量中1的個數。我的問題是,我不知道如何處理64位變量時使用32位寄存器。使用測試操作員MASM程序集計算1的數量
.data
aBigVar QWORD ?
.code
mov ecx, 63 ; use as loop counter
mov eax, 0b
Begin:
add eax, 01b;
test aBigVar, eax ; error: instruction operands must be same size
jz LoopToStart
inc dl
loop Start
LoopToStart:
loop Start
我只是將變量放入寄存器,然後通過進位標誌重複旋轉它。 RCL或RCR指令可以做到這一點。您可以在變量的偏移量處加載32位並處理它們,然後在偏移+4加載32位並重復。我發現簡單地維護一個循環計數和一個累計計數比我發現維護它們和一個掩碼更容易。 – enhzflep