⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 idigitaddsubmult.c

📁 Arithmetic for integers of almost unlimited size for C and C++. Developed and copyrighted by Ra
💻 C
字号:
/* idigitaddsubmult.c - inline assembler code for MSVC++6.0 on Intel586 *//* TPf, Sep 1999 */#include <iint.h>#include <idigit.h>#if !defined(USE_C_DIGITADD)DigitType DigitAdd(sum, a, b, carry)    DigitType *sum, a, b, carry; /*    *sum=LOW-DIGIT(a+b+carry); return HIGH-DIGIT(a+b+carry); */{__asm    {/*	.text	.align 4	.globl USCORE(DigitAdd)USCORE(DigitAdd):	*/	mov ebx, sum		; &sum -> ebx	mov ecx, a		; a -> ecx	mov edx, b		; b -> edx	mov eax, carry		; carry -> eax	shr eax,1		; carry -> carry-bit	adc ecx,edx		; a + b + carry-bit -> ecx (former a)	rcl eax,1		; high order bit -> carry		mov DWORD PTR [ebx], ecx	; a + b + carry-bit -> *sum    }}#endif#if !defined(USE_C_DIGITSUB)DigitType DigitSub(diff, a, b, carry)    DigitType *diff, a, b, carry; /*    *diff=RESULT; return CARRY; where RESULT, CARRY are defined by:    2^BitsPerDigit > CARRY*2^BitsPerDigit + a - b - carry == RESULT >= 0 */{__asm    {/* 	.align 4	.globl USCORE(DigitSub)USCORE(DigitSub): */	mov ebx, diff	mov edx, a	mov ecx, b	mov eax, carry	shr eax,1	sbb edx,ecx	rcl eax,1	mov DWORD PTR [ebx], edx    }}#endif#if !defined(USE_C_DIGITMULT)DigitType DigitMult(prod, a, b)    DigitType *prod, a, b; /*    *prod=LOW-DIGIT(a*b); return HIGH-DIGIT(a*b); */{__asm    {	    /*	.align 4	.globl USCORE(DigitMult)USCORE(DigitMult): */	mov ebx, prod	mov eax, a	mov ecx, b	mul ecx        mov DWORD PTR [ebx], eax	mov eax,edx    }}#endif#if !defined(USE_C_DIGITMULTADD)DigitType DigitMultAdd(prod, a, b, carry)    DigitType *prod, a, b, carry; /*    *prod=LOW-DIGIT(a*b+carry); return HIGH-DIGIT(a*b+carry); */{__asm    {/*	.align 4	.globl USCORE(DigitMultAdd)USCORE(DigitMultAdd): */	mov ebx, prod	mov eax, a	mov edx, b	mul edx	mov ecx, carry	add eax,ecx	adc edx,0        mov eax, [ebx]	mov eax,edx    }}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -