0
큰 factorials (최대 128 비트 결과)를 계산하는 x86 masm 프로그램을 작성하고 싶지만 그 방법을 모르겠습니다. 최대 32 비트를 계산하는 버전을 작성했습니다. 어떻게하면 더 큰 숫자에서 작동하도록 변경할 수 있습니까?큰 숫자의 요인
큰 factorials (최대 128 비트 결과)를 계산하는 x86 masm 프로그램을 작성하고 싶지만 그 방법을 모르겠습니다. 최대 32 비트를 계산하는 버전을 작성했습니다. 어떻게하면 더 큰 숫자에서 작동하도록 변경할 수 있습니까?큰 숫자의 요인
128 비트가 mul 명령에 비해 너무 커서 64 비트 결과 (EDX (32 비트) + EAX (32 비트)) 만 저장됩니다.
우선, 128 비트 결과를 저장하려면 4 DWORDS의 메모리가 필요합니다. 그런 다음 128 비트 곱셈을 처리 할 수있는 일부 프로 시저 호출에서 mul ebx;
을 대체해야합니다. 코드는 다음과 같을 수 있습니다.
.data
;...
bignum dword 1, 0, 0, 0; initial answer = 0000 0000 0000 0001h
....
call largemul; replace for mul ebx
....
largemul proc;
mov ebx, 10 ;EBX = multiplier
mov eax, [bignum]
mul ebx ;EDX:EAX = EAX*EBX
mov [bignum], eax ;save result
mov ecx, edx ;save carried part in ECX
mov eax, [bignum+4]
mul ebx
add eax, ecx ;add carried part from previous multiplication
mov [bignum+4], eax
mov ecx, edx
mov eax, [bignum+8]
mul ebx
add eax, ecx
mov [bignum+8], eax
mov eax, [bignum+8]
mul ebx
add eax, ecx
mov [bignum+12], eax
largemul endp;