Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Assembler
Перезагрузить страницу Есть 4 бита надо одно двойное слово как запустить работу
Закрытая тема
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Anonymous
Guest
 
Сообщений: n/a
По умолчанию Есть 4 бита надо одно двойное слово как запустить работу - 27.11.2002, 15:03

Есть 4 бита надо одно двойное слово. Нужна помощь.
Это функция на Делфе

Код:
function ByteToSingle(a1: byte; a2: byte; a3: byte; a4: byte): real;
begin
        asm
                Pusha

                mov al, a1
                mov ah, a2

                mov bl, a3
                mov bh, a4

                mov word ptr ByteToSingle, ax
                mov word ptr ByteToSingle+2, bx

                popa
        end;
end;
Ну не понимаю, что и где не так, но то, что не так это факт!
Помогите.
Wadimych@mail.ru
  (#2 (permalink)) Старый
Garik Garik вне форума
Member
 
Сообщений: 6,201
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Регистрация: 07.06.2002
По умолчанию Re: Есть 4 бита надо одно двойное слово. Нужна помощь. - 27.11.2002, 15:23

Цитата:
Originally posted by Вадим
[b]Есть 4 бита надо одно двойное слово.
Ты наверно хотел сказать: 4 байта?
И еще: если тебе нужно двойное слово, то почему ты возвращаешь real, а не longint?
В real число хранится в формате, несколько отличающемся от обычного представления целых чисел.
И еще насчет двойных слов: не забывай - в памяти у целых чисел байты идут в обратном порядке, т.е. сначала - самый младший!
  (#3 (permalink)) Старый
Влад Влад вне форума
Специалист
 
Сообщений: 3,884
Сказал(а) спасибо: 1
Поблагодарили 25 раз(а) в 25 сообщениях
Регистрация: 27.06.2002
Адрес: Санкт-Петербург
По умолчанию Re: Есть 4 бита надо одно двойное слово. Нужна помощь. - 27.11.2002, 16:11

Цитата:
Originally posted by Вадим
[b]Есть 4 бита надо одно двойное слово... Это функция на Делфе
Если это действительно 4 бита, а не байта, и если a1 - младший бит, а a4 - старший, то должно быть примерно так
Код:
function ByteToLong(a1: byte; a2: byte; a3: byte; a4: byte): longint;
begin
        asm
           xor     eax, eax
           mov     al, a4
           shl     eax, 1
           or      al, a3
           shl     eax, 1
           or      al, a2
           shl     eax, 1
           or      al, a1
        end;
end;
Функции возвращают результат типа "двойное слово" в регистре eax. В терминах Delphi это longint.
  (#4 (permalink)) Старый
Anonymous
Guest
 
Сообщений: n/a
По умолчанию 27.11.2002, 16:36

Извиняюсь имелось ввиду 4 байта, зарапотровался, возвращаю в Single потому что так требуется, поясняю, в некий двоичный файл записаны данные с компьютера реального времени, некоторые числа целые, а некоторые вещественные, для чтения вещественного числа это и нужно.
Да, кстати, как записано в файле - сначала старшие, а потом младшие или наоборот, я не знаю выясню потом сравнивая полученные результаты работы программы с цифирем на экране компа реального времени.
  (#5 (permalink)) Старый
Garik Garik вне форума
Member
 
Сообщений: 6,201
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Регистрация: 07.06.2002
По умолчанию 27.11.2002, 16:40

Тогда поясни поподробнее, в чем проблема? Чем тебя не устраивает приведенный код
Ads.
  (#6 (permalink)) Старый
Anonymous
Guest
 
Сообщений: n/a
По умолчанию 27.11.2002, 16:48

Да я в asm последний раз творил, что-либо толковое в 1998 году, малость подзабыл что есть что, и зачем.
Который код имеется в виду мой или который мне прислали?
Если мой, то мне не нравится, то, что возвращается, я посылаю в функцию ByteToSingle(0,0,0,0), а возвращается не 0!
Если присланный, то еще раз повторюсь, в файле записано вещественное число.
  (#7 (permalink)) Старый
Garik Garik вне форума
Member
 
Сообщений: 6,201
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Регистрация: 07.06.2002
По умолчанию 27.11.2002, 16:50

Как я уже говорил, числа real хранятся в памяти в формате, отличающемся от формата целых чисел. И 4 нулевых байта - это вовсе не значит 0.0. Интересует формат хранения вещественных чисел в памяти?
  (#8 (permalink)) Старый
Anonymous
Guest
 
Сообщений: n/a
По умолчанию 27.11.2002, 16:54

Да.
  (#9 (permalink)) Старый
Garik Garik вне форума
Member
 
Сообщений: 6,201
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Регистрация: 07.06.2002
По умолчанию 27.11.2002, 17:09

По поводу представления real в памяти:

Четырехбайтовое (32-битовое) число типа Single подразделяется на три поля:


Код:
                           1    8           23
                         ЪДДДВДДДДДДВДДДДДДД..ДДДДДДДДДї
                         і s і  e   і        f         і
                         АДДДБДДДДДДБДДДДДДД..ДДДДДДДДДЩ
                             msb   lsb msb            lsb
Значение v этого числа определяется с помощью выражений:

Код:
if 0 < e < 255,      then v = (-1)^s * 2^(e-12) * (l.f).
if e = 0 and f <> 0, then v = (-1)^s * 2^(126) * (o.f).
if e = 0 and f = 0,  then v = (-1)^s * O.
if e = 255 and f = 0, then v = (-1)^s * Inf.
if e = 255 and f <> 0, then v = NaN.
Ссылки:
http://www.lib.com.ua/comp/15.114.html
http://khpi-iip.mipk.kharkiv.edu/library/d.../book/prt02.htm
  (#10 (permalink)) Старый
Anonymous
Guest
 
Сообщений: n/a
По умолчанию 27.11.2002, 17:14

Спасибо, а как мне это поможет?
Как отличить какой байт откуда?
Я их последовательно читаю.
  (#11 (permalink)) Старый
Garik Garik вне форума
Member
 
Сообщений: 6,201
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Регистрация: 07.06.2002
По умолчанию 27.11.2002, 17:24

Так ты не можешь определить, в каком порядке идут биты с устройства?
Экспериментируй! Попробуй разные варианты...
Кстати, в этом самом устройстве может применяться вообще собственный формат представления чисел. Может попробуешь поискать документацию по самому устройству?
  (#12 (permalink)) Старый
Anonymous
Guest
 
Сообщений: n/a
По умолчанию 27.11.2002, 17:26

Спасибо. Я по второй ссылке сходил, оказалось полезно.
Ads
Закрытая тема

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
TListBox требуется найти в строке слово и похожее к нему слово qqeeaaddzzcc_the_same C++ Builder 2 28.01.2009 23:32
Есть много двумерных массивов, их где-то надо хранить Lena11 C++ Builder 2 02.04.2007 12:12
Почти готовая прога на строки, но есть одно НО Zlodey Pascal 2 03.11.2006 14:25
Надо проверить работу класса Voin Smalltalk 9 28.09.2006 21:35
Есть файл Form.rtf в нем надо заменить метки на их значение Sniczar Visual C++ 0 23.06.2005 12:32
На Canvas есть 2 точки, их надо соединить не линией, а стрелочкой imported_Reaver C++ Builder 3 17.05.2005 18:21
Есть текстовый файл из него надо прочитать строку у которой есть заданная подстрока etc С/С++ 24 11.02.2005 11:52
Есть ли проц-ра кот. на нек. время приост. бы работу цикла? Anonymous Visual Basic 7 23.01.2005 22:38
EclipseAnt надо запустить файл Frosch Eclipse 1 01.06.2004 16:59
Надо сделать программу на паскали эмулирующую работу с потоками Anonymous Pascal 0 03.12.2003 21:17
Есть желание принять на работу разработчика со знанием subjа Anonymous Smalltalk 1 10.06.2003 15:10



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов