📄 mpvecadd.s
字号:
/* * mpvecadd(mpdigit *a, int alen, mpdigit *b, int blen, mpdigit *sum) * * sum[0:alen] = a[0:alen-1] + b[0:blen-1] * * prereq: alen >= blen, sum has room for alen+1 digits */TEXT mpvecadd(SB),$0 MOVL alen+4(FP),DX MOVL blen+12(FP),CX MOVL a+0(FP),SI MOVL b+8(FP),BX SUBL CX,DX MOVL sum+16(FP),DI XORL BP,BP /* this also sets carry to 0 */ /* skip addition if b is zero */ TESTL CX,CX JZ _add1 /* sum[0:blen-1],carry = a[0:blen-1] + b[0:blen-1] */_addloop1: MOVL (SI)(BP*4), AX ADCL (BX)(BP*4), AX MOVL AX,(DI)(BP*4) INCL BP LOOP _addloop1_add1: /* jump if alen > blen */ INCL DX MOVL DX,CX LOOP _addloop2 /* sum[alen] = carry */_addend: JC _addcarry MOVL $0,(DI)(BP*4) RET_addcarry: MOVL $1,(DI)(BP*4) RET /* sum[blen:alen-1],carry = a[blen:alen-1] + 0 */_addloop2: MOVL (SI)(BP*4),AX ADCL $0,AX MOVL AX,(DI)(BP*4) INCL BP LOOP _addloop2 JMP _addend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -