summaryrefslogtreecommitdiff
path: root/man/ru/isbb.3mpu
blob: b54fd908f2f1f861cad7b7060aabd3bfef8e3ca1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
.\" Copyright 2024 Andrew V.Kosteltsev (kx@radix-linux.su)
.\"
.\"
.TH isbb 3  "December 27, 2024" "libmpu" "LibMPU Programmer's Manual"
.SH NAME
\fBisbb\fP \- вычитание знаковое и беззнаковое с переносом
.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
Функция \fBisbb()\fP выполняет операцию вычитания целых чисел, расположенных по адресам \fBa\fP и \fBb\fP,
из полученной разности вычитает значение флага переноса \fBC\fP и размещает результат по адресу \fBc\fP.
Операнды могут быть числами со знаком или без него. Содержимое памяти по адресам \fBa\fP, \fBb\fP
не изменяется, предыдущее содержимое памяти по адресу \fBc\fP теряется. Параметр \fBnb\fP определяет
размер операндов (в байтах), расположенных по адресам \fBc\fP, \fBa\fP, \fBb\fP. Поскольку функция \fBisbb()\fP
использует флаг переноса \fBC\fP, то она может применяться для вычитания чисел, длина которых
превышает максимально допустимые размеры целых чисел.
.PP
Функция воздействует на флаги \fBA\fP, \fBC\fP, \fBO\fP, \fBP\fP, \fBS\fP, \fBZ\fP и \fBV\fP.
.PP
Флаги \fBА\fP и \fBP\fP выставляются только в том случае, когда размер операндов \fBa\fP, \fBb\fP равен одному или
двум байтам (\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).