我正在尝试用汇编语言编写collatz问题(只是为了好玩)。我刚看完第一部分。我从另一个文件中的C++函数调用汇编代码:
if (((n / 2) * 2) == n) n = n / 2;
else n = 3 * n + 1;
.code
isCN proc n:dword
mov eax, n
xor edx, edx
mov ecx, 2
mov r8d, eax
div ecx
mov r9d, eax
mul ecx
cmp eax, r8d
je equal
;else
mov eax, 3
mul r8d
add eax, 1
ret
equal:
; if n is even
mov eax, r9d
ret
isCN ENDP
end
我使用这样的代码:
extern "C" int isCN(int n);
while (n > 1) {
c++;
n = isCN(n);
}
validNumbers[i] = true;
counters[i] = c;
但是当我尝试使用它时,它返回的值是无意义的。
当我看反汇编时,它似乎从eax
正确返回。
错误是在我使用代码的方式中,还是在代码本身中?
2条答案
按热度按时间gywdnpxw1#
你的代码效率很低,但从快速测试来看,它似乎工作正常。更有效的版本可能是:
(假设您使用的是Windows调用约定。
idfiyjo82#
似乎
dword n
没有正确地赋予函数。更改线路:
收件人:
修复了代码。