Этот "нехороший человек" игнорирует третий ":", и использует регистры по усмотрению(в моем случае это были rax и rbx, что соответственно не вяжется с инструкцией mulpd). Как его заставить использовать регистры, которые я указал?
P.S. На всякий пожарный, использую Intel синтаксис, т.е. при компиляции указываю -masm=intel
PS и да, третий параметр не имеет отношения к входным/выходным аргументам, он показывает какие регистры будут испорчены. А в качестве входных/выходных регистров наверное xmm# не работают, поэтому вручную вот так :)
Ну я так изначально и делал, только получается вместо одной инструкции миллион(из памяти в регистры, из регистров в память и перед printf он опять в регистры запихает).
P.S. Только в следующий раз про AT&T синтаксис предупреждайте, а то я сейчас сидел и голову ломал, чой это прога не работает =)
PS и да, третий параметр не имеет отношения к входным/выходным аргументам, он показывает какие регистры будут испорчены. А в качестве входных/выходных регистров наверное xmm# не работают, поэтому вручную вот так
И что, ему нельзя указать чтобы он сразу "xmm?" использовал? Так это бред же получается...
Ну я так изначально и делал, только получается вместо одной инструкции миллион(из памяти в регистры, из регистров в память и перед printf он опять в регистры запихает).
А что делать, он же не знает, что оно уже готовое в xmm0 лежит?
x - это использование xmm# регистров (r - это только основные регистры)
+ - признак того, что output регистр является и input заодно (чтобы дважды не писать с разными именами)
1. Использовать "переменные".
2. Использовать mov+команда.
PS не забываем, что ограничение касается только 64-х битных чисел, а константы такого размера бывают нужны редко, было решено, что чем городить ещё по одной версии каждой команды для работы с 64-битными константами и усложнять процессор, лучше будет сделать так.
1. Использовать "переменные".
2. Использовать mov+команда.
PS не забываем, что ограничение касается только 64-х битных чисел, а константы такого размера бывают нужны редко, было решено, что чем городить ещё по одной версии каждой команды для работы с 64-битными константами и усложнять процессор, лучше будет сделать так.
Так стоять, Intel сократила АЛУ до 16-бит(с 32-х) в Pentium 4, когда они успели его до 32-х поднять?
Так стоять, Intel сократила АЛУ до 16-бит(с 32-х) в Pentium 4, когда они успели его до 32-х поднять?
А при чём тут разрядность АЛУ - программист хоть и даже и на ассемблере прямого доступа к АЛУ x86 не имеет. А 32-х битные константы всегда были и будут. Просто на 16-битном АЛУ чуть менее эффективно считаются.
PS и да, вроде у Northwood были и 16-ти и 32-ти битные АЛУ, потом и те убрали? я просто не следил