Перспектива асма

Тема в разделе "WASM.BEGINNERS", создана пользователем Processor, 15 мар 2008.

  1. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    beginner
    Ну не нужно так уверенно. После этого кода у Вас ZF не выставится:
    Код (Text):
    1. mov eax,-1
    2. not eax
    Ну это вроде как оптимизация по скорости (хотя для данного случая она имеет довольно символическое значение): add ecx,-1 выполняется, как известно, быстрее. Ну в общем пользуюсь инкрементом/декрементом только в тех случаях, когда размер кода очень критичен. Тем более, что однобайтовые опкоды этих операций были упразднены.
    UbIvItS
    Ну так я ж и не возражал. Хотя опять таки: "только" - это слишком категорично.
     
  2. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    beginner
    Вы б всё ж не ленились мануалы читать, прежде чем делать не допускающие сомнений заявления ;)

    Вот вам цитатка из мануала, относящаяся к команде INC:

    Т.е. команда INC (как и DEC) не изменяет состояние флага CF. А команды обычного сложения и вычитания, как известно, изменяют. Поэтому SUB AX, 1 и DEC AX не являются абсолютно равноценными по своим результатам.
     
  3. beginner

    beginner New Member

    Публикаций:
    0
    Регистрация:
    18 янв 2008
    Сообщения:
    233
    l_inc
    действительно :) во прикол... флаг нуля не подымается :)
    ну декремент однозначно влияет на флаги, проверил в отладчике :)
    А чего так получается?

    А насчет скорости выполнения, что add ecx,-1 выполняется быстрее, чем dec ecx - как можно найти подтверждение вашим словам? или как проверить? Ведь декремент занимает меньше места в памяти, быстрей считывается, быстрее разбирается на опкоды. В чем прикол-то?

    Увы если программер владеет только одним языком программирования, то выбор инструмента заранее предрешен :)
     
  4. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    а что быстрее выполняется ?

    xor eax,eax
    inc eax

    или
    mov eax,1

    и что компактнее?
    xor eax,eax
    или
    mov eax,0
     
  5. beginner

    beginner New Member

    Публикаций:
    0
    Регистрация:
    18 янв 2008
    Сообщения:
    233
    SII
    Увы, из мануалов у меня тока МСДН
    в такие мануалы не вникал... та и нет их у меня...
    Так что сильно не пинайте меня, я всего лишь beginner, новичек.... хнык...
    Но теперь конечно буду знать, я ж тока учусь...
     
  6. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    beginner
    кроме add ecx,-1 и sub ecx,1 эквивалентом DEC ECX являются lea ecx,[ecx+0FFFFFFFFh] (код 678D49FF) и комбинация neg ecx/not ecx а так же в какой-то мере rep и loop
     
  7. ofCros

    ofCros New Member

    Публикаций:
    0
    Регистрация:
    18 дек 2007
    Сообщения:
    25
    .....не актуально.
     
  8. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    2FED
    много раз обсуждалось. лучше использовать add/sub reg,1
     
  9. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    beginner
    Ну во-первых ответ Freeman к Вам тоже относится.
    Во-вторых, собственно с подобными вопросами лучше обращаться к источникам, владеющим секретами мироздания: leo, Ustus, intel manuals, Pavia и др.
    Ну и в-третьих вот, например.
     
  10. ofCros

    ofCros New Member

    Публикаций:
    0
    Регистрация:
    18 дек 2007
    Сообщения:
    25
    Проверил с помощю rdtsc (по тыс. инстр.). В 64-битном режиме у inc i dec лучшее время.
    Код (Text):
    1.     rdtsc
    2.     shl rax,32
    3.     shld rdx,rax,32
    4.     mov rsi,rdx
    5.     ;--------------
    6.       ;про веряемые инстр.
    7.     ;--------------
    8.     rdtsc
    9.     shl rax,32
    10.     shld rdx,rax,32
    11.     sub rdx,rsi
    12.     ;распечатываем rdx
     
  11. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    beginner
    А причина смешна до слёз: когда Интел делал 8086, то допустил ОШИБКУ, из-за которой not не влияла на флаги. И в дальнейшем из-за совместимости эту ошибку вынуждены повторять.

    Если на асме пишешь, то интеловские иметь просто обязан. Ведь именно там описаны все команды, все регистры, все прочие фичи процессора...
     
  12. beginner

    beginner New Member

    Публикаций:
    0
    Регистрация:
    18 янв 2008
    Сообщения:
    233
    l_inc
    Я понял, что я еще не дорос до таких нюансов :)
    Лучше я не буду пока лезть в секреты мироздания, а когда возникнет потребность, то меня, надеюсь, тыкнут носом куда следует :)

    SII
    Ох уж эти конструкторы-разработчики :) не могли уже нормально сделать :)
    на васме я нашел пока только это:
    http://www.wasm.ru/doclist.php?list=7 нашел какие то файлы, но мне кажется это не совсем то...
     
  13. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    beginner
    Вообще-то искать интеловские мануалы разумнее у Интела :) Где-то на developer.intel.com. Правда, там заблудиться можно -- "на поверхности" они не лежат. Можно попробовать, правда, воспользоваться поиском по ихнему сайту по номерам этих документов (от 253665 до 253669 включительно).
     
  14. AsmGuru62

    AsmGuru62 Member

    Публикаций:
    0
    Регистрация:
    12 сен 2002
    Сообщения:
    689
    Адрес:
    Toronto
  15. beginner

    beginner New Member

    Публикаций:
    0
    Регистрация:
    18 янв 2008
    Сообщения:
    233
    прикольно, уже качнул :)
    А такой вопрос: Наверняка ж процы от АМД и интела отличаются в чем то?
    Это надо качать мануалы с сайта амд, что бы найти разницу?
     
  16. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    Существенной разницы нет. По крайней мере, пока не пишешь что-нибудь суперпупермегакрутое. Есть небольшая разница в дополнительных инструкциях (типа 3DNow! от AMD, коих, есно, нет у Интела), различаются и моделезависимые регистры (MSR) -- но последние различаются даже в разных процессорах одного производителя. Единственное, что у них будет по-разному -- это оптимизация, ведь она зависит от архитектуры процессоров. Но, ИМХО, сначала надо с ассемблером научиться быть на ты, а потом уже заниматься оптимизацией :)

    Кстати, том 2 о двух полутомах -- это система команд. Том 1 -- это описание регистров общего назначения и кучи всего прочего, что полезно для начинающего. Ну а том 3 (тоже о двух полутомах) -- всякие системные вещи, прикладнику обычно не требующиеся.
     
  17. God_Father

    God_Father New Member

    Публикаций:
    0
    Регистрация:
    5 авг 2007
    Сообщения:
    99
    Всем привет задам такой вопрос.
    Синтаксис комманд на ассемблере.
    допустим любой макрос.
    Macros, par1,par2,par3,......и т. д.
    или
    invoke Function, par1,par2,par3 .......
    т.е. сначала стоит функция, а потом список параметров.
    Почему айзелон не реализовал макросы так
    вместо этого
    invoke GetModuleHandle,NULL
    mov hInstance,eax
    вот это

    hInstance <- GetModuleHandle,NULL

    Ну почему на масме нельзя сделать такой макрос "<-"
    Т.Е. на мой взгляд недостаток масма состоит в том, что

    на первом месте должна всегда стоять функция.
    Я конечно понимаю что можно писать так:
    mov hInstance, $invoke( GetModuleHandle,NULL)
    но опять же комманда на первом месте.
    Реально ли сделать чтоб данные стояли на певом месте
    а не комманды.
    Если разнос мне устроите, я не обижусь
     
  18. masm32

    masm32 New Member

    Публикаций:
    0
    Регистрация:
    26 фев 2008
    Сообщения:
    147
    Не все функции имеют возвращаемое значение или значение, которое нужно запомнить в переменной, так что такой макрос не будет универсальным.

    Функции имеют разное количество параметров - от 1 до 29 кажется... Если имя функции стоит на последнем месте... нужно будет - сначала смотреть на конец , потом возвращаться в начало.. и т.д. - явно плохо...

    Я предлагал отказаться от инвоков - компилятор может же определить, что строчка начинается с имени функции...
     
  19. zoool

    zoool New Member

    Публикаций:
    0
    Регистрация:
    1 дек 2007
    Сообщения:
    412
    А мне идея нравится
    Всего-лишь доработать макрос.
    hInstance <- GetModuleHandle,NULL - для функций, которые возвращают результат
    GetModuleHandle,NULL - для функций без возвращаемого значения

    Но это имхо уже не асм. Мал-по малу теряется наглядная прозрачность кода. Ужлучше СИ использовать, чем писать на асме на макросах.
     
  20. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    Так а мне наоборот нравится что функция возвращяет значение в EAX а потом что хочешь то с ним и делай, хочешь в другую функцию передавай, хочешь сохраняй в переменной, хочешь сдвигай,проводи всякие математические операции и т.д.

    Те кто стремится к макросам просто ещё не познали прелисти чистого ассемблера.

    вот например я даже .if .while и т.д. не пользуюсь. потомучто с помошью cmp и j-переходов можно сделать всё гораздо эффективнее( это если условие не одно а несколько рав вложеное )