7 / 7 / 5
Регистрация: 25.03.2018
Сообщений: 377
|
||||||
1 | ||||||
Вычитание чисел в формате BCD19.04.2018, 13:12. Показов 3599. Ответов 10
Метки нет Все метки)
(
Введите два десятичных числа разрядностью не более 10 цифр, выполните преобразование в неупакованный BCD-формат, вычтете второе из первого и выведите результат.
В общем я вроде минусы учёл(отриц. числа) но при вводе отриц. и пол.(или пол. и отриц.) выдаёт чушь (например -2 и 2 выдаст 199999999=0). Что не так? Сложение (ADDI) вроде верное?
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
|
|
19.04.2018, 13:12 | |
Ответы с готовыми решениями:
10
Вычитание чисел с плавающей запятой в формате double ассемблер Калькулятор, выполняющий действия + – (в упакованном BCD-формате) Определение данных разрядностью 8, 32 бит в формате bcd Вычитание упакованных BCD-чисел |
Модератор
![]() |
|
19.04.2018, 21:03 | 2 |
Посмотрите в теме
https://www.cyberforum.ru/asse... 04621.html При отрицательном результате проводится преобразование всех байтов результата. Добавлено через 8 минут И ещё здесь http://www.i-assembler.ru/25/L... Les_08.htm
0
|
7 / 7 / 5
Регистрация: 25.03.2018
Сообщений: 377
|
||||||
20.04.2018, 20:48 [ТС] | 3 | |||||
0
|
Модератор
![]() |
|
20.04.2018, 20:59 | 4 |
Мне кажется, что у чисел в формате BCD нет места для хранения знака. Это приводит к тому, что все они являются неотрицательными, беззнаковыми.
Т.е. нужно выделить отдельный байт для хранения знака. А при операциях учитывать этот знак. Также, в примерах по ссылке был фрагмент кода, в котором проверялся знак результата и при отрицательном значении выполнялось преобразование всего многозначного числа.
0
|
7 / 7 / 5
Регистрация: 25.03.2018
Сообщений: 377
|
|
20.04.2018, 22:03 [ТС] | 5 |
Так я знак в виде флага сохраняю и в CHECK проверяю какие знаки где находятся. У меня само сложение неправильное. 123+321=444, а у меня выдаёт 19999999198, а должно 00000000444. Код которыё я скинул(сложение) рабочий и нормально складывает неупакованные числа, я его, грубо говоря скопипастил в мой код, и тут перестало работать, почему? Не понимаю, вот и спрашиваю
![]()
0
|
Модератор
![]() |
|
20.04.2018, 22:10 | 6 |
Подозреваю, что в "источнике вдохновения кодом" порядок старших и младших байт разнится с таковым в вашей программе. Отсюда и иной ответ.
Добавлено через 1 минуту Имеется в виду порядок старшинства байт во многобайтовом числе.
0
|
7 / 7 / 5
Регистрация: 25.03.2018
Сообщений: 377
|
||||||
20.04.2018, 22:14 [ТС] | 7 | |||||
![]()
0
|
Модератор
![]() |
|
20.04.2018, 22:22 | 8 |
Сейчас уже плохо соображаю. Завтра посмотрю.
0
|
7 / 7 / 5
Регистрация: 25.03.2018
Сообщений: 377
|
|
23.04.2018, 19:22 [ТС] | 9 |
![]() Решение
Я хз, просто беру и этот же код отдельно вставляю, и всё работает XD ошибок даже по обращению нет
Добавлено через 21 час 46 минут Я нашёл проблему. Крч у меня в SI смещение сохраняется, а нужно, чтобы при минусе, смещение +1 было
0
|
Модератор
![]() |
|
23.04.2018, 19:47 | 10 |
А я знал, что спешить не нужно!
Если не трудно - опубликуйте итоговое решение.
0
|
7 / 7 / 5
Регистрация: 25.03.2018
Сообщений: 377
|
||||||
23.04.2018, 20:50 [ТС] | 11 | |||||
Добавлено через 6 минут а при 12345 и -123 = 12777 ![]() Добавлено через 40 минут Запутался уже в этой проге, туча перемен в коде, уже не понимаю что менять. Я так понимаю, ошибка в SI и в DI, но как с ними иначе работать, если знак минуса надо учитывать =/
0
|
23.04.2018, 20:50 | |
Помогаю со студенческими работами здесь
11
BCD (сложение и вычитание) Сложение упакованных BCD чисел Сложение двух BCD чисел Сложение неупакованных bcd-чисел Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |