beginner Ну не нужно так уверенно. После этого кода у Вас ZF не выставится: Код (Text): mov eax,-1 not eax Ну это вроде как оптимизация по скорости (хотя для данного случая она имеет довольно символическое значение): add ecx,-1 выполняется, как известно, быстрее. Ну в общем пользуюсь инкрементом/декрементом только в тех случаях, когда размер кода очень критичен. Тем более, что однобайтовые опкоды этих операций были упразднены. UbIvItS Ну так я ж и не возражал. Хотя опять таки: "только" - это слишком категорично.
beginner Вы б всё ж не ленились мануалы читать, прежде чем делать не допускающие сомнений заявления Вот вам цитатка из мануала, относящаяся к команде INC: Т.е. команда INC (как и DEC) не изменяет состояние флага CF. А команды обычного сложения и вычитания, как известно, изменяют. Поэтому SUB AX, 1 и DEC AX не являются абсолютно равноценными по своим результатам.
l_inc действительно во прикол... флаг нуля не подымается ну декремент однозначно влияет на флаги, проверил в отладчике А чего так получается? А насчет скорости выполнения, что add ecx,-1 выполняется быстрее, чем dec ecx - как можно найти подтверждение вашим словам? или как проверить? Ведь декремент занимает меньше места в памяти, быстрей считывается, быстрее разбирается на опкоды. В чем прикол-то? Увы если программер владеет только одним языком программирования, то выбор инструмента заранее предрешен
а что быстрее выполняется ? xor eax,eax inc eax или mov eax,1 и что компактнее? xor eax,eax или mov eax,0
SII Увы, из мануалов у меня тока МСДН в такие мануалы не вникал... та и нет их у меня... Так что сильно не пинайте меня, я всего лишь beginner, новичек.... хнык... Но теперь конечно буду знать, я ж тока учусь...
beginner кроме add ecx,-1 и sub ecx,1 эквивалентом DEC ECX являются lea ecx,[ecx+0FFFFFFFFh] (код 678D49FF) и комбинация neg ecx/not ecx а так же в какой-то мере rep и loop
beginner Ну во-первых ответ Freeman к Вам тоже относится. Во-вторых, собственно с подобными вопросами лучше обращаться к источникам, владеющим секретами мироздания: leo, Ustus, intel manuals, Pavia и др. Ну и в-третьих вот, например.
Проверил с помощю rdtsc (по тыс. инстр.). В 64-битном режиме у inc i dec лучшее время. Код (Text): rdtsc shl rax,32 shld rdx,rax,32 mov rsi,rdx ;-------------- ;про веряемые инстр. ;-------------- rdtsc shl rax,32 shld rdx,rax,32 sub rdx,rsi ;распечатываем rdx
beginner А причина смешна до слёз: когда Интел делал 8086, то допустил ОШИБКУ, из-за которой not не влияла на флаги. И в дальнейшем из-за совместимости эту ошибку вынуждены повторять. Если на асме пишешь, то интеловские иметь просто обязан. Ведь именно там описаны все команды, все регистры, все прочие фичи процессора...
l_inc Я понял, что я еще не дорос до таких нюансов Лучше я не буду пока лезть в секреты мироздания, а когда возникнет потребность, то меня, надеюсь, тыкнут носом куда следует SII Ох уж эти конструкторы-разработчики не могли уже нормально сделать на васме я нашел пока только это: http://www.wasm.ru/doclist.php?list=7 нашел какие то файлы, но мне кажется это не совсем то...
beginner Вообще-то искать интеловские мануалы разумнее у Интела Где-то на developer.intel.com. Правда, там заблудиться можно -- "на поверхности" они не лежат. Можно попробовать, правда, воспользоваться поиском по ихнему сайту по номерам этих документов (от 253665 до 253669 включительно).
прикольно, уже качнул А такой вопрос: Наверняка ж процы от АМД и интела отличаются в чем то? Это надо качать мануалы с сайта амд, что бы найти разницу?
Существенной разницы нет. По крайней мере, пока не пишешь что-нибудь суперпупермегакрутое. Есть небольшая разница в дополнительных инструкциях (типа 3DNow! от AMD, коих, есно, нет у Интела), различаются и моделезависимые регистры (MSR) -- но последние различаются даже в разных процессорах одного производителя. Единственное, что у них будет по-разному -- это оптимизация, ведь она зависит от архитектуры процессоров. Но, ИМХО, сначала надо с ассемблером научиться быть на ты, а потом уже заниматься оптимизацией Кстати, том 2 о двух полутомах -- это система команд. Том 1 -- это описание регистров общего назначения и кучи всего прочего, что полезно для начинающего. Ну а том 3 (тоже о двух полутомах) -- всякие системные вещи, прикладнику обычно не требующиеся.
Всем привет задам такой вопрос. Синтаксис комманд на ассемблере. допустим любой макрос. Macros, par1,par2,par3,......и т. д. или invoke Function, par1,par2,par3 ....... т.е. сначала стоит функция, а потом список параметров. Почему айзелон не реализовал макросы так вместо этого invoke GetModuleHandle,NULL mov hInstance,eax вот это hInstance <- GetModuleHandle,NULL Ну почему на масме нельзя сделать такой макрос "<-" Т.Е. на мой взгляд недостаток масма состоит в том, что на первом месте должна всегда стоять функция. Я конечно понимаю что можно писать так: mov hInstance, $invoke( GetModuleHandle,NULL) но опять же комманда на первом месте. Реально ли сделать чтоб данные стояли на певом месте а не комманды. Если разнос мне устроите, я не обижусь
Не все функции имеют возвращаемое значение или значение, которое нужно запомнить в переменной, так что такой макрос не будет универсальным. Функции имеют разное количество параметров - от 1 до 29 кажется... Если имя функции стоит на последнем месте... нужно будет - сначала смотреть на конец , потом возвращаться в начало.. и т.д. - явно плохо... Я предлагал отказаться от инвоков - компилятор может же определить, что строчка начинается с имени функции...
А мне идея нравится Всего-лишь доработать макрос. hInstance <- GetModuleHandle,NULL - для функций, которые возвращают результат GetModuleHandle,NULL - для функций без возвращаемого значения Но это имхо уже не асм. Мал-по малу теряется наглядная прозрачность кода. Ужлучше СИ использовать, чем писать на асме на макросах.
Так а мне наоборот нравится что функция возвращяет значение в EAX а потом что хочешь то с ним и делай, хочешь в другую функцию передавай, хочешь сохраняй в переменной, хочешь сдвигай,проводи всякие математические операции и т.д. Те кто стремится к макросам просто ещё не познали прелисти чистого ассемблера. вот например я даже .if .while и т.д. не пользуюсь. потомучто с помошью cmp и j-переходов можно сделать всё гораздо эффективнее( это если условие не одно а несколько рав вложеное )