Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.57/14: Рейтинг темы: голосов - 14, средняя оценка - 4.57
18 / 8 / 17
Регистрация: 22.12.2015
Сообщений: 2,029
1
TASM

Сложить два 16 разрядные числа в формате с фиксированной точкой

07.11.2018, 20:38. Просмотров 2797. Ответов 15
Метки нет (Все метки)

первое -2,45
формат 5,11
второе слагаемое 0,428
формат 2,14
формат ответа/результата 4,12
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.11.2018, 20:38
Ответы с готовыми решениями:

Вычислите среднее арифметическое элементов массива. Числа представлены в формате с фиксированной точкой
Вычислите среднее арифметическое элементов массива Array dw 5 dup(?). Числа представленны в формате...

Как сложить два числа с плавающей точкой в Linux
Здравствуйте, скажите пожалуйста как сложить два числа с плавающей точкой в линуксе, желательно...

Преобразование чисел с плавающей точкой в числа с фиксированной точкой
Здравствуйте, подскажите пожалуйста как заменить вещественные числа с плавающей точкой, числами...

Среднее арифметическое чисел, находящихся в массиве и представленных в формате с фиксированной точкой
Всем привет, ребят. Помогите пожалуйста написать программку. В ассемблере полный нубяра. Вот сама...

15
Модератор
6445 / 3158 / 1276
Регистрация: 01.02.2015
Сообщений: 10,056
Записей в блоге: 1
07.11.2018, 20:45 2
Я никогда не умел работать с числами в формате "фиксированная запятая". Но принцип тот же, что и с обычными числами, особенно при сложении и вычитании.
Видимо, для начала приводите всё к одному формату 4,12. Т.е. первое число сдвигаете влево на 1, а второе - вправо на 2. Потом обычное add.
1
18 / 8 / 17
Регистрация: 22.12.2015
Сообщений: 2,029
07.11.2018, 22:05  [ТС] 3
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
Я никогда не умел работать с числами в формате "фиксированная запятая". Но принцип тот же, что и с обычными числами, особенно при сложении и вычитании.
Видимо, для начала приводите всё к одному формату 4,12. Т.е. первое число сдвигаете влево на 1, а второе - вправо на 2. Потом обычное add.
К 4,12 как привести все числа в этот формат?
Почему первое на 1,а второе на 2 сдвигаем ?
0
Модератор
6445 / 3158 / 1276
Регистрация: 01.02.2015
Сообщений: 10,056
Записей в блоге: 1
07.11.2018, 22:11 4
Я не видел вашу методичку. Могу с некоторой степенью достоверности предполагать, что формат 5,11 в первом поле содержит целую часть числа (т.е. -5). А для формата 4,12 нужно расположить целую часть в 4 старших битах. Т.е. (5,11) сдвинуть влево для перехода к (4,12).

Хотя могу и заблуждаться.
1
18 / 8 / 17
Регистрация: 22.12.2015
Сообщений: 2,029
08.11.2018, 00:51  [ТС] 5
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
Я не видел вашу методичку. Могу с некоторой степенью достоверности предполагать, что формат 5,11 в первом поле содержит целую часть числа (т.е. -5). А для формата 4,12 нужно расположить целую часть в 4 старших битах. Т.е. (5,11) сдвинуть влево для перехода к (4,12).
Хотя могу и заблуждаться.
Медочки нет.Уверен так и есть.
Так?
Assembler
1
2
3
4
 
shr ax,2         ;Логический сдвиг AX на 1 бит вправо
    shr byte[bx],cl  ;Лог. сдвиг байта по адресу BX на СL бит вправо
    shr cl,4         ;CL = CL / 16 (для числа без знака)
Добавлено через 1 час 49 минут
Assembler
1
 mov ax,-2,45;**Error** hello.asm(23) Extra characters on line
0
18 / 8 / 17
Регистрация: 22.12.2015
Сообщений: 2,029
08.11.2018, 14:44  [ТС] 6
формат числа 4,12
Это следует понимать 4 числа может быть до запятой и 12 после запятой то есть вот так?
0004,120000000000
0
Модератор
6445 / 3158 / 1276
Регистрация: 01.02.2015
Сообщений: 10,056
Записей в блоге: 1
08.11.2018, 20:41 7
Попробуйте уточнить у преподавателей, сокурсников. Такие вещи, как нетривиальный формат данных, алгоритмы обязательно должны поясняться. В методичках, на семинарах, в лекциях.
1
5471 / 2563 / 347
Регистрация: 17.02.2013
Сообщений: 3,681
09.11.2018, 08:02 8
Цитата Сообщение от scherbakovss201 Посмотреть сообщение
формат числа 4,12
Это следует понимать 4 числа может быть до запятой и 12 после запятой то есть вот так?
4 старших бита отводится под целую часть, 12 младших битов под дробную часть. Всего 16 бит.

Добавлено через 19 минут
0.428 в формате 2,14 будет надо думать 00,01101101100100
Если привести к формату 4,12 то будет 0000,011011011001
2
Модератор
6445 / 3158 / 1276
Регистрация: 01.02.2015
Сообщений: 10,056
Записей в блоге: 1
09.11.2018, 09:30 9
scherbakovss201, уточните формат данных, приведите несколько примеров чисел этого формата. Нет гениев, способных предугадать мысли преподавателей. Не нужно в этом плане надеяться на форум с чужими людьми.
1
5471 / 2563 / 347
Регистрация: 17.02.2013
Сообщений: 3,681
09.11.2018, 13:00 10
Лучший ответ Сообщение было отмечено scherbakovss201 как решение

Решение

Да принцип-то известен. Вещественное число представляется как двоичное целое и с ним оперируют как с целым, но при этом между некоторыми разрядами числа мысленно помещается запятая. Которая никак не влияет на рассчеты, она мысленная. Формат 2,14 - это число у которого запятая между 2-мя старшими разрядами и 14-ю младшими.

Добавлено через 33 минуты
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
      1 0000                     Model   Tiny
      2 0000                     .Code
      3                      Org     100h
      4
      5 0100                 Start:
      6
      7 0100  A1 0110r               mov     ax, x
      8 0103  8B 1E 0112r            mov     bx, y
      9
     10 0107  D1 E0              shl     ax, 1
     11 0109  D1 FB              sar     bx, 1
     12 010B  D1 FB              sar     bx, 1
     13 010D  03 C3              add     ax, bx
     14 010F  C3                 ret
     15
     16 0110  EC67           x       dw      -245 SHL 11 / 100 ; -2,45
     17 0112  1B64           y       dw      428 SHL 14 / 1000 ; 0,428
     18
     19                      End     Start
Результат 1101111110100111 = DFA7 = -2059 (шестнадцатеричное) или с запятой -2,059 (шестнадцатеричное) = -2,022 (десятичное, округлено по правилам арифметического округления).
3
18 / 8 / 17
Регистрация: 22.12.2015
Сообщений: 2,029
10.11.2018, 01:53  [ТС] 11
Цитата Сообщение от Ethereal Посмотреть сообщение
Результат 1101111110100111 = DFA7 = -2059 (шестнадцатеричное) или с запятой -2,059 (шестнадцатеричное) = -2,022 (десятичное, округлено по правилам арифметического округления).
GUI Turbo Assembler чего то в консоль ничего не вывод,хотя компилирует и линкует без ошибок.
Сложить два 16 разрядные числа в формате с фиксированной точкой
0
5471 / 2563 / 347
Регистрация: 17.02.2013
Сообщений: 3,681
10.11.2018, 08:52 12
Так у меня в программе никакого вывода и нет. Только вычисление.

Добавлено через 6 минут
И да, на твоем скриншоте компиляция EXE-программы. А я написал код для COM-программы. При компиляции для tlink нужно /t указывать в параметрах командной строки, чтобы он скомпоновал COM, а не EXE

Добавлено через 2 минуты
Там у тебя на скриншоте для TASM видно using switсh /3 /x /v
А надо еще чтобы для TLINK было using switch /t
2
Ушел с форума
Автор FAQ
13849 / 6896 / 773
Регистрация: 11.11.2010
Сообщений: 12,428
10.11.2018, 09:59 13
Лучший ответ Сообщение было отмечено scherbakovss201 как решение

Решение

Ethereal,
IMHO, прежде чем складывать числа в формате 5,11 и 2,14 их нужно предварительно перевести в какой-то единый формат, а потом результат сложения выводить в том формате, который требуется по заданию (с минимальной потерей точности)

Добавлено через 36 минут
-2,45 в формате 3,13 -2,45*213=-20070,4~-2007010=B19A
0,428 в формате 3,13 0,428*213=3506,176~350610=0DB2
B19A+0DB2=BF4C=-16564 -16564/213=-2,02197265625
Проверяем: -2,45+0,428=-2,022
3
Ушел с форума
Автор FAQ
13849 / 6896 / 773
Регистрация: 11.11.2010
Сообщений: 12,428
11.11.2018, 08:52 14
Если интерес не пропал -- посетите страничку всеми признанного эксперта по FPU Raymond Filiatreault, в частности по данному вопросу FIXED POINT MATH
2
5471 / 2563 / 347
Регистрация: 17.02.2013
Сообщений: 3,681
11.11.2018, 09:09 15
Цитата Сообщение от Mikl___ Посмотреть сообщение
их нужно предварительно перевести в какой-то единый формат
Так я и привел к 4,12 . К тому формату в каком нужен ответ. Ну а как привел сложил числа посредством add и получил результат.
1
Ушел с форума
Автор FAQ
13849 / 6896 / 773
Регистрация: 11.11.2010
Сообщений: 12,428
11.11.2018, 09:14 16
Ethereal,
я не хотел подловить вас на неточности, просто высказал рассуждения общего порядка. Иногда они дают больший эффект, чем пример написанный кем-либо. Просто, извините, если чем-либо задел...
2
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.11.2018, 09:14

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Нормализация. Числа с фиксированной точкой
Здравствуйте, Нужно представить следующее число в нормализованном виде: -78.871 Для этого...

Вывод числа с фиксированной точкой
При данном выводе в текстовом файле обнаруживаю следующее: TITLE = "Zadacha" VARIABLES =...

Числа с фиксированной точкой в ПЛИС
Такой вопрос: пусть имеется некий фильтр, синтезированный в Матлабе. Коэффициенты этого фильтра -...

Представить числа в форме с фиксированной точкой
Переводить из одной СС в другую умею, а вот как представить числа в форме с фиксированной точкой??...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.