Сложение чисел
Добавлено: 26 дек 2006, 17:40
Помогите написать программк сложения 2 4-байтных чисел в бсд формате
На микропроцессоре контролере MicroIDE
На микропроцессоре контролере MicroIDE
Код: Выделить всё
IF ((AL AND 0FH) > 9) OR (AF = 1)
THEN
AL <─ AL + 6;
AF <─ 1;
ELSE
AF <─ 0;
FI;
IF (AL > 9FH) OR (CF = 1)
THEN
AL <─ AL + 60H;
CF <─ 1;
ELSE CF <─ 0;
Код: Выделить всё
mov al, byte ptr a
add al, byte ptr b
daa
mov byte ptr c, al
mov al, byte ptr a + 1
adc al, byte ptr b + 1
daa
mov byte ptr c + 1, al
mov al, byte ptr a + 2
adc al, byte ptr b + 2
daa
mov byte ptr c + 2, al
mov al, byte ptr a + 3
adc al, byte ptr b + 3
daa
mov byte ptr c + 3, al
Код: Выделить всё
ldx #$9000 ; типа в X сейчас адрес переменной A.
ldaa 3, X ; младший байт первого операнда в регистр A
ldab 7, X ; младший байт второго в B
aba ; A = A + B
daa ; десятичная коррекция A, если был перенос, флаг С = 1, теперь надо его не потерять
staa 11, x ; запись младшего байта результата, теперь повторяем для следующих байт по старшинству, но учитывая переносы
ldaa 2, X
ldab 6, X
adca #0
aba
daa
staa 10, X
ldaa 1, X
ldab 5, X
adca #0
aba
daa
staa 9, X
ldaa 0, X
ldab 4, X
adca #0
aba
daa
staa 8, X
Код: Выделить всё
ldx #$9000 ; типа в X сейчас адрес переменной A.
ldaa 3, X ; младший байт первого операнда в регистр A
adda 7, X ; A = A + младший байт второго
daa ; десятичная коррекция A, если был перенос, флаг С = 1
staa 11, x ; запись младшего байта результата, теперь повторяем для следующих байт по старшинству, но учитывая переносы
ldaa 2, X
adca 6, Х
daa
staa 10, X
ldaa 1, X
adca 5, X
daa
staa 9, X
ldaa 0, X
adca 4, X
daa
staa 8, X