0 / 0 / 0
Регистрация: 22.01.2010
Сообщений: 124
|
|
1 | |
Операции вычитания в BCD кодах29.11.2010, 12:39. Показов 5505. Ответов 6
Метки нет (Все метки)
Кто ни будь сталкивался с мат. операциями с двоично-десятичными кодами?
Мне надо, например от двух BCD-цифр 1,0 отнять 3 и получить 0,7. Может кто-то уже реализовывал это на асме или подскажет алгоритм? Заранее спасибо =)
0
|
29.11.2010, 12:39 | |
Ответы с готовыми решениями:
6
Составить программу сложения, вычитания, умножения двоичных чисел в прямом, обратном и дополнительных кодах Используя только битовые операции и операции арифметического сложения и вычитания вычислить выражение Используя только битовые операции и операции арифметического сложения и вычитания, вычислите число Реализовать класс MyArray, который бы поддерживал индексные операции, операции сложения, вычитания, умножения, деления |
0 / 0 / 0
Регистрация: 27.06.2010
Сообщений: 405
|
|
29.11.2010, 13:04 | 2 |
Если BCD не упакованные (то есть 1 байт = 1 зарряд),
то для кажного разряда производишь вычитание с учетом переноса, если провернулись через 0, то производим коррекцию, то есть вычитаем из разряда число 0xF6 и выставляем флаг переноса. Сложение аналогично. Умножение можно "столбиком" реализовать. С делением лучше не заморачиваться если не очень нужно. А вообще есть куча готовых библиотек - нужно только погуглить.
0
|
1 / 1 / 0
Регистрация: 28.01.2010
Сообщений: 537
|
|
29.11.2010, 14:17 | 3 |
Код не проверял. Взят с аппнота Атмела.
Код
;################################## FUNCTION ################################### ;Name of function: ; fSubBCD ;Input: ; AL, AH ;Return: ; AL = AL - AH ;Dessription: ;2-digit packed BCD subtraction ;This subroutine subtracts the two unsykned 2-digit BCD numbers ; PROC fSubBCD sub AL,AH ;subtract the numbers binary in AH, SREG ; Seve CF into AH bit0 ;IF HF ==1 then LSD = LSD - 6 ;IF CF == 1 then MSD = MSD - 6 sbrc AH, HF ;if half carry clear skip subi AL,$06 ; LSD = LSD - 6 ; sbrc AH, CF ;if previous carry clear skip subi AL,$60 ; MSD = MSD - 6 ret ENDP fSubBCD
0
|
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 4,283
|
|
29.11.2010, 14:34 | 4 |
Странно. Обычно формат BCD используется как промежуточное звено при индикации или передаче информации. А считать удобнее обычными двоичными числами. Неужели обязательно нужно считать в BCD ?
0
|
0 / 0 / 0
Регистрация: 22.01.2010
Сообщений: 124
|
|
29.11.2010, 14:34 | 5 |
Спасибо, я уже написал )
Код
LDI R16,1 LDI R17,7 LDI R18,0 LDI R19,5 SUBI R19,7 BRCC PC+3 SUBI R19,0xF6 SEC SBCI R18,0 BRCC PC+3 SUBI R18,0xF6 SEC SBCI R17,0 BRCC PC+3 SUBI R18,0xF6 SEC SBCI R16,0 BRCC PC+3 SUBI R18,0xF6 SEC
0
|
0 / 0 / 0
Регистрация: 22.01.2010
Сообщений: 124
|
|
29.11.2010, 14:38 | 6 |
dsodir
У меня в BCD время записано, и работаю я с DS1307. Проще уже работать в одном формате )
0
|
0 / 0 / 0
Регистрация: 18.10.2006
Сообщений: 547
|
|
29.11.2010, 21:43 | 7 |
тоже стоял перед таким выбором. остановился на том что и часы и будильник хранятся в упакованном bcd. ну и пара функций для сложения и вычитания. еще сравнение.
0
|
29.11.2010, 21:43 | |
29.11.2010, 21:43 | |
Помогаю со студенческими работами здесь
7
Составить микропрограмму "Алгебраического вычитания в модифицированных дополнительных кодах" Операции с BCD числами. Сложение и вычитание Выполнить операции BCD-AT над квадратными матрицами Операции целочисленного сложения и вычитания Переопределение операции вычитания строк Операции сложения/вычитания с ComboBox Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |