.\" Copyright 2024 Andrew V.Kosteltsev (kx@radix-linux.su)
.\"
.\"
.TH isbb 3 "December 27, 2024" "libmpu" "LibMPU Programmer's Manual"
.SH NAME
\fBisbb\fP \- subtraction signed and unsigned with carryover
.SH SYNOPSIS
.nf
.B #include <libmpu.h>
.PP
.BI "void isbb( mpu_int *" c ", mpu_int *" a ", mpu_int *" b ", int " nb " );
.fi
.SH DESCRIPTION
The \fBisbb()\fP function performs the operation of subtraction of integers located at addresses \fBa\fP
and \fBb\fP, subtracts the value of the carry flag \fBC\fP from the obtained difference and places the
result at address \fBc\fP. The operands can be numbers with or without a sign. The memory contents at
addresses \fBa\fP, \fBb\fP are not changed, the previous memory contents at address \fBc\fP are lost.
The \fBnb\fP parameter determines the size, in bytes, of the operands located at addresses
\fBc\fP, \fBa\fP, \fBb\fP. Since the \fBisbb()\fP function uses the \fBC\fP carry flag,
it can be used to subtract numbers whose length exceeds the maximum allowed size of integers.
.PP
The function affects the flags \fBA\fP, \fBC\fP, \fBO\fP, \fBP\fP, \fBS\fP, \fBZ\fP, and \fBV\fP.
.PP
Flags \fBА\fP and \fBP\fP are set only when the size of operands \fBa\fP, \fBb\fP is one or
two bytes (\fBnb\fP == 1 || \fBnb\fP == 2).
.sp
.SH EXAMPLES
.nf
.sp
#include <libmpu.h>
#include <stdio.h>
int main( void )
{
int rc = 0;
__mpu_init();
__mpu_extra_warnings = 1;
{
mpu_int128_t c, a, b;
int nb = NB_I128;
__mpu_char8_t s[256];
iatoi( a, "237", nb ); /* evaluate the A variable */
iatoi( b, "37", nb ); /* evaluate the B variable */
__mpu_stc(); /* Set Carry Flag */
isbb( c, a, b, nb );
iitoa( s, c, RADIX_DEC, LOWERCASE, nb ); /* convert C value to ASCII string S */
printf( "c = %s;\\n", s ); /* c = 199; */
}
__mpu_free_context();
return( rc );
}
.fi
.sp
.SH SEE ALSO
.BR iadd(3),
.BR isub(3),
.BR iadc(3),
.BR ishl(3),
.BR ishr(3),
.BR isal(3),
.BR isar(3),
.BR irol(3),
.BR iror(3),
.BR ircl(3),
.BR ircr(3),
.BR ishln(3),
.BR ishrn(3),
.BR isaln(3),
.BR isarn(3),
.BR iroln(3),
.BR irorn(3),
.BR ircln(3),
.BR ircrn(3),
.BR ineg(3),
.BR inot(3),
.BR iand(3),
.BR itest(3),
.BR icmp(3),
.BR ior(3),
.BR ixor(3),
.BR iinc(3),
.BR idec(3),
.BR ixchg(3),
.BR icpy(3),
.BR icvt(3),
.BR imul(3),
.BR ismul(3),
.BR idiv(3),
.BR isdiv(3),
.BR iatoi(3),
.BR iatoui(3),
.BR iitoa(3),
.BR iuitoa(3).