Перейти к содержанию
    

Вопрос по математике с данными FLOAT в Ассемблере

В руководстве Microchip   00526  дана математика с данными float. В конце дано тестирование ее.

Я попытался применить ее не пошло, перешел к тестированию и вот что у меня вышло.

 

                call    loadAB          ; result of subtracting ACCb(EXPb)-ACCa(EXPa)->ACCb(EXPb) = 0x01FF(4) - 0x7FFF(6)

                call    F_sub           ; Here Accb = 7F7F, EXPb = 06

(0x01FF*2^4)  - (0x7FFF*2^6) =  0x7F7F*2^6 = 2088896

8176 - 2097088 = -2088912

;

                call    loadAB          ; result of multiplying ACCb(EXPb) * ACCa(EXPa)->ACCb(EXPb) = 0x01FF(4) * 0x7FFF(6)

                call    F_mpy           ; Here ACCb = FF7E, EXPb = 12

(0x01FF*2^4)  * (0x7FFF*2^6) = 0xFF7E*2^12 = 267902976

8176 * 2097088 = 17145791488

;

                call    loadAB          ; result of dividing ACCb(EXPb) / ACCa(EXPa)->ACCb(EXPb) with = 0x01FF(4) / 0x7FFF(6)

                call    F_div           ; remainder in ACCc. Here ACCb =4000, EXPb = FA (same as -6)

;                               ; & the remainder ACCc = 003F

(0x01FF*2^4)  / (0x7FFF*2^6) = 0x4000*2^6 = 1048576

8176 / 2097088 = 0.0038987395855586

Что я делаю не правильно

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Во первых, это 544-ая аппнота, а не 526-ая: http://ww1.microchip.com/downloads/en/AppNotes/00544d.pdf

Во вторых, в каком формате представлен флоат в аппноте? В стандартном виде в нем есть неявная целая часть равная 1. То есть мантисса выглядит как знак/точка/дробная часть, на самом деле это +/-1.(дробная часть).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

23 hours ago, nicmicola said:

 

                call    loadAB          ; result of dividing ACCb(EXPb) / ACCa(EXPa)->ACCb(EXPb) with = 0x01FF(4) / 0x7FFF(6)

 

                call    F_div           ; remainder in ACCc. Here ACCb =4000, EXPb = FA (same as -6)

 

;                               ; & the remainder ACCc = 003F

 

(0x01FF*2^4)  / (0x7FFF*2^6) = 0x4000*2^6 = 1048576

 

8176 / 2097088 = 0.0038987395855586

Что я делаю не правильно

В догон, если не разбираться с форматом

(0x01FF*2^4)  / (0x7FFF*2^6) = 0x4000*2^-6 = 1048576 = 0,25*0,015625 = 0,00390625

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Здравия желаю всем и персонально my504.

Я открыл эту тему не для дискуссий, а с желанием научиться пользоваться процедурой из этого пакета.

Если вас не сильно затруднит то пожалуйста  растолкуйте как пользоваться этой процедурой.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

FLOAT.ASM

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

00526.rar

Изменено пользователем nicmicola

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Чтобы разобраться как ей пользоваться, нужно разобрать КОД САМОЙ ФУНКЦИИ.

Собственно там все просто. При суммировании или вычитании приводится порядок одного из аргументов ко второму, а затем делают обычную арифметику с мантиссами. При умножении и делении перемножают или делят мантиссы, а порядки либо суммируют (при умножении), либо вычитают из порядка делимого порядок делителя при делении.

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

Что из мною сказанного Вам непонятно?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Читайте про микрочиповский формат float24: http://ww1.microchip.com/downloads/en/AppNotes/00575.pdf

Выглядит как  xxxxxxxx  s.xxxxxxx xxxxxxxx

Старший байт - это порядок со смещением на 127(экспонента)

Средний и младший байт - это нормализованная мантисса, где s- это знак, следующие за точкой разряды - это дробная часть, а единица целой части неявная.

То есть мантисса вида 0x01FF будет равна (1+(511/32768))=1,01559448

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

13 hours ago, my504 said:

Читайте про микрочиповский формат float24: http://ww1.microchip.com/downloads/en/AppNotes/00575.pdf

Выглядит как  xxxxxxxx  s.xxxxxxx xxxxxxxx

Старший байт - это порядок со смещением на 127(экспонента)

Средний и младший байт - это нормализованная мантисса, где s- это знак, следующие за точкой разряды - это дробная часть, а единица целой части неявная.

То есть мантисса вида 0x01FF будет равна (1+(511/32768))=1,01559448

 

Большое спасибо вам за толковое объяснение. Думаю и другим будет полезно делающим серьезные вычисления на ассемблере.

Большое спасибо вам за толковое объяснение. Думаю и другим будет полезно делающим серьезные вычисления на ассемблере.

Еще раз спасибо!!!!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...