0
여기에 문제가 있습니다.
미리 설정된 숫자 (ebx에 저장 됨)를 취하여 그 계승을 계산하는 단일 루프를 만들어야하지만, 나에게있어서 그것을 수행하는 방법을 알 수는 없습니다. 내 제한 요소는 어떤 곱셈 명령도 사용할 수 없다는 것입니다. 이 알고리즘이 될 일에MASM x86 어셈블리 Factorials 평가를위한 반복적 인 추가
;preceding code
mov eax, 0 ;n! will be stored in eax
ecx = ebx ;ebx = n
factorial: ;computes n!
;some algorithm I have not figured out
;
;
loop factorial
;eax = n!
어떤 아이디어 : 여기
은 문제가 무엇인지의 기본 형식입니다?
업데이트 : 알고리즘을 발견했습니다. x86 어셈블리보다 훨씬 유창하기 때문에 C로 작성해야했습니다.
int x = z; //z is the number we want z! from
int y = 0;
int n = x;
int i, j;
for(i = x - 1; i > 0; i--)
{
for(j = n; j > 0; j--)
y += i;
n = y;
y = 0;
}
printf("%d\n", n);
현재 어셈블리로 변환하려고합니다.
여기에있는 모든 향후 코더에 대한 최종 번역본이 나와 있습니다. 질문이 해결되었습니다.
;FACTORIAL WITHOUT MULTIPLICATION
mov ecx, ebx
mov edx, 0
mov eax, ebx
dec ecx
jz next
factorial:
mov edi, ecx
mov ecx, eax
factorial2:
add edx, edi
loop factorial2
mov ecx, edi
mov eax, edx
mov edx, 0
loop factorial
감사합니다! 하지만 실제로는 실제 응용 프로그램 대신 할당을 위해 계산해야합니다 (물론 테이블이 더 좋을 것입니다!) 또한 정수는 1-10이므로 32 비트는 10에 적합합니다!. – user3255385