Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2018.02.25;
Скачать: CL | DM;

Вниз

Вопрос знатокам асм   Найти похожие ветки 

 
Dmk ©   (2016-02-26 17:44) [0]

Почему если указать например такой код:
movd mm0, eax, то Delphi заменяет его на такой: movq mm0, rax. Постоянно такая «лажа». Глюк или настройки? Может чего не знаю?


 
Rouse_ ©   (2016-02-26 17:51) [1]

Байткот покажи, мошт там дизасм косячит


 
Dmk ©   (2016-02-26 18:29) [2]

http://hkar.ru/GYBv

AColor и APixel соответственно ColorRef на входе в функцию. т.е. uint32


 
Rouse_ ©   (2016-02-26 18:49) [3]

Абсолютно логичный код. В чем проблема именно?
Ты же не изумляешся когда у тебя булевая переменная в целом регистре идет?


 
Rouse_ ©   (2016-02-26 18:59) [4]

ЗЫ: судя по твоей картинке AColor и APixel входные параметры.
Ты ухохочешся их через по другому (не считая стека) передавать.
Пусть они хоть байтовыми будут - CL вместо RCX ты не получишь.


 
Dmk ©   (2016-02-26 19:00) [5]

я его прошу сделать MOVD, т.е. uint32, а он мне 64 бита запихивает MOVQ, т.е. uint64. Замена происходит MOVD на MOVQ. В этом и проблема. Мне старшие биты mm0 нужны, а он мне их чистит.


 
Rouse_ ©   (2016-02-26 19:05) [6]

А что ты хотел?
Никто не говорил что будет легко :)


 
Dmk ©   (2016-02-26 19:06) [7]

А если написать movd mm0, ecx, то операнд сайз мисматч получается.


 
Rouse_ ©   (2016-02-26 19:07) [8]

Версия дельфи?


 
Dmk ©   (2016-02-26 19:12) [9]

XE6.


 
Dmk ©   (2016-02-26 19:14) [10]

Если без REX префикса забросить, то все нормально работает. Компилятор чудит.
db $0F, $6E, $E1 - так работает как MOVD mm0, ecx. А может он тупо REX везде подставляет из-за 64 битного режима.

Из интеловского руководства:
0F 6E /r
MOVD mm, r/m32
RM V/V MMX Move doubleword from r/m32 to mm.
REX.W + 0F 6E /r
MOVQ mm, r/m64
RM V/N.E. MMX Move quadword from r/m64 to mm.


 
Rouse_ ©   (2016-02-26 19:28) [11]

Я знаю что такое REX префикс и прочие ModRM/SIB

movd mm0, ecx

В ХЕ4 работает без выдачи сообщения, как у тебя.

Это первое.

Второе:
байткод db $0F, $6E, $E1 соответствует регистру mm4, а ты хотел работать с mm0.
Для этого нужно писать вот так:
db $0F, $6E, $C1

Третье - впрочем с третьим я пока обожду.


 
Rouse_ ©   (2016-02-26 19:32) [12]

Вообще, если честно я очень сильно вангую в эту вету han_malign-а, потому что я умею только технически разьяснять, а он по правильному, чтоб ты понял :)


 
Dmk ©   (2016-02-26 19:34) [13]

>Я знаю что такое REX префикс и прочие ModRM/SIB
Дык я с поклоном :) Без намеков всяких.

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


 
Rouse_ ©   (2016-02-26 19:43) [14]

Ну как-же так? Я ж еще в четвертом посте заострил на этом внимание :)


 
Rouse_ ©   (2016-02-26 19:48) [15]

Все таки вангую han_malign-а :)
У него получается популярно и просто все обьяснить :)


 
invis ©   (2016-02-26 20:23) [16]


> Мне старшие биты mm0 нужны, а он мне их чистит.

Судя по описанию, в любом случае будет чистить.

(* MOVD instruction when destination operand is MMX technology register *)
DEST[31:0] = SRC;
DEST[63:32] = 00000000H;
http://www.tptp.cc/mirrors/siyobik.info/instruction/MOVD%252FMOVQ.html



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

Текущий архив: 2018.02.25;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.005 c
15-1470413637
andrd
2016-08-05 19:13
2018.02.25
Какую версию Embarcadero RAD Studio посоветуете?


2-1456486666
ford
2016-02-26 14:37
2018.02.25
TWebBrowser - Control has no parent window


15-1469810835
MsGuns
2016-07-29 19:47
2018.02.25
Вот собираюсь в новую жизнь


2-1456545588
gedevan
2016-02-27 06:59
2018.02.25
Как быстро заполнить TreeView по данным ClientDataset


2-1456497894
Dmk
2016-02-26 17:44
2018.02.25
Вопрос знатокам асм