Что касается «математики», стоящей за этим: это точно так же, как в десятичной системе:
При сложении двух однозначных чисел необходимо учитывать два случая. Либо сумма этих двух цифр представляет собой новое однозначное число (5+4 = 9), либо происходит «переполнение» и требуется другая цифра (5+6 = 11). Обратите внимание, что для любых двух чисел (в любой системе счисления, будь то 10, 2, 256 и т. д.) длиной n
цифр сумма этих двух чисел всегда будет меньше удвоенного наименьшего числа из n+1
цифр. длина; пусть i
и j
будут числами (с основанием 10), например, длиной 1, то есть оба находятся между 0
и 9
включительно. Поскольку 10
— наименьшее число длины n+1 = 2
, их сумма всегда будет меньше 2 x 10
.
При добавлении двух чисел может не быть переполнения или может быть переполнение ровно 1. Бит переноса сохраняет это переполнение из последней арифметической операции; это либо 0, либо 1.
Таким образом, при добавлении двух ваших чисел 4x 8 бит каждое (которые можно рассматривать как 4 «цифры» с основанием 256) для первого добавления не будет учитываться переполнение, следовательно, только ADD
; ADD
можно рассматривать как операцию для x = x + y + 0
. Однако после первого добавления может возникнуть переполнение, которое необходимо учитывать, что делается с помощью ADDC
; ADDC
представляет операцию x = x + y + carry
, где carry
может быть только 0 или 1, как указано выше. После того, как все цифры были добавлены, последнее добавление могло снова вызвать переполнение, которое впоследствии будет отражено в бите переноса и может быть оценено, чтобы, возможно, отреагировать на переполнение диапазона номеров, например:
x = x + y;
if ( carry == 1 ) {
error "The sum is too big for the datatype of x";
}
person
JimmyB
schedule
05.06.2012
ADD R20,R16.... ADC R21,R17....
и так далее? - person Droidik   schedule 04.06.2012