Форум: "Начинающим";
Текущий архив: 2018.02.25;
Скачать: [xml.tar.bz2];
ВнизВопрос знатокам асм Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.002 c