Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2005.12.11;
Скачать: [xml.tar.bz2];

Вниз

ASM   Найти похожие ветки 

 
WondeRu ©   (2005-11-22 10:33) [0]

Есть две просьбы:
1. Предложите способ преобразования Byte в Double на асм.
2. Предложите быстрый способ преобразования массива Byte в массив Double на асм.

Заранее спасибо!


 
КаПиБаРа ©   (2005-11-22 10:37) [1]

Хэш таблица


 
WondeRu ©   (2005-11-22 10:53) [2]

попробую... пасиб...


 
Digitman ©   (2005-11-22 10:58) [3]

function ByteToDouble(Value: Byte): Double;
asm
 sub  esp, 4
 mov  [esp], eax
 fild [esp]
 add  esp, 4
end;


 
Digitman ©   (2005-11-22 11:00) [4]


> 2. Предложите быстрый способ преобразования массива Byte
> в массив Double на асм


см. MMX


 
WondeRu ©   (2005-11-22 11:13) [5]

Digitman ©   (22.11.05 10:58) [3]
mov  [esp], eax

mov  [esp], al - думаю правильнее

объясните пожалуйста сие действия, если не сложно, так как делфи при таких преобрахованиях вставляет еще и fstp


 
Digitman ©   (2005-11-22 11:42) [6]


> mov  [esp], al - думаю правильнее


нет, не правильнее

во-первых, компилятор не пропустит такую конструкцию из-за несоответствия типов - придется byte ptr [esp] указывать явно

во-вторых, FILD-инструкция не допускает операнд размером в байт: только слово, двойное слово или квадрослово.

function ByteToDouble(Value: Byte): Double;
asm
//факт.параметр ф-ции передан в регистре eax
//компилятор перед вызовом ф-ции уже позаботился об обнулении eax перед тем как в мл.байт этого регистра пометить передаваемый факт.параметр

//резервируем дв.слово в стеке под лок.переменную
sub  esp, 4

//копируем содержимое eax в память, выделенную выше под врем.переменную
mov  [esp], eax

//грузим на вершину FPU-стека значение из врем.переменной
//при загрузке FPU сам позаботится об автоматической конверсии
//загружаемого ц/ч значения в формат числа с п/з
fild [esp] //push

//балансируем стек - "удаляем" лок.переменную
add  esp, 4
end;

компилятор , видя что ф-ция возвращает в кач-ве результата значение в формате с п/з, подразумевает, что это значение находится на вершине FPU-стека, поэтому и генерирует код получения результата ф-ции в виде инструкции  fstp, которая сохраняет значение с вершины FPU-стека в переменную соотв.размера в памяти и балансирует после этого FPU-стек (pop)


 
Pazitron_Brain ©   (2005-11-22 11:43) [7]

Нужно изобрести преобразователь.


 
Digitman ©   (2005-11-22 11:51) [8]


> Pazitron_Brain ©   (22.11.05 11:43) [7]


ты колы-двойки-то свои исправил, "преобразовальщик" ?)


 
WondeRu ©   (2005-11-22 14:11) [9]

Digitman ©   (22.11.05 11:42) [6]
спасибо за подробное объяснение



Страницы: 1 вся ветка

Форум: "Потрепаться";
Текущий архив: 2005.12.11;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.036 c
14-1132560471
Карелин Артем
2005-11-21 11:07
2005.12.11
Приколы в Д7


1-1131611361
JurMan
2005-11-10 11:29
2005.12.11
Как обратиться к СОМ-порту?


2-1132496063
Avdoshin
2005-11-20 17:14
2005.12.11
Иконка


14-1132696208
Separator
2005-11-23 00:50
2005.12.11
Интересное мнение о форуме


2-1132930906
Eksell
2005-11-25 18:01
2005.12.11
Поиск в файле





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский