Как на асме объявить массив.

Тема в разделе "WASM.BEGINNERS", создана пользователем serega28, 7 янв 2009.

  1. serega28

    serega28 Member

    Публикаций:
    0
    Регистрация:
    26 мар 2007
    Сообщения:
    115
    Адрес:
    Minsk
    На С++ выглядит так. А как это на масме делается?


    char Names [] =
    {
    "Text",
    "Text dlinniy",
    "Text3",
    }
     
  2. stellaco

    stellaco New Member

    Публикаций:
    0
    Регистрация:
    11 дек 2008
    Сообщения:
    193
    наверное так...
    Names db "Text", "Text dlinniy", "Text3"
     
  3. serega28

    serega28 Member

    Публикаций:
    0
    Регистрация:
    26 мар 2007
    Сообщения:
    115
    Адрес:
    Minsk
    Эт нужно для вот этой вещи:

    for (i = 0; i < 128; i++)
    {
    SendDlgItemMessage(hDlg, IDC_INSTRUM, CB_ADDSTRING, 0, (LPARAM)Names );
    }

    Как это реализовавыется?
     
  4. stellaco

    stellaco New Member

    Публикаций:
    0
    Регистрация:
    11 дек 2008
    Сообщения:
    193
    Под винду не программирую...на сайте есть документация к nasm там есть примеры вызовов функций и тд.....есть примеры...
    да и тут есть немного http://wasm.ru/forum/viewtopic.php?id=30434
     
  5. Marazm

    Marazm Member

    Публикаций:
    0
    Регистрация:
    8 мар 2004
    Сообщения:
    95
    что-то типа
    Код (Text):
    1. szText1 db "Text",0
    2. szText2 db "Text dlinniy",0
    3. szText3 db "Text3",0
    4. ;....
    5. Names:
    6. dd szText1
    7. dd szText2
    8. dd szText3
    9. ;...
    10.  
    11. sub ebx,ebx
    12. l00p:
    13. invoke SendDlgItemMessage,[hDlg],IDC_INSTRUM,CB_ADDSTRING,0,[Names+ebx*4]
    14. inc ebx
    15. cmp ebx,127
    16. jbe l00p
     
  6. stellaco

    stellaco New Member

    Публикаций:
    0
    Регистрация:
    11 дек 2008
    Сообщения:
    193
    немного изменю..

    Код (Text):
    1. szText1 db "Text",0
    2. szText2 db "Text dlinniy",0
    3. szText3 db "Text3",0
    4. ;....
    5. Names:
    6. dd szText1
    7. dd szText2
    8. dd szText3
    9. ;...
    10.  
    11. xor ebx,ebx
    12. l00p:
    13. invoke SendDlgItemMessage,[hDlg],IDC_INSTRUM,CB_ADDSTRING,0,[Names+ebx*4]
    14. add ebx,1  ; если не ошибаюсь, работает быстрей чем inc
    15. cmp ebx,127
    16. jbe l00p
     
  7. Marazm

    Marazm Member

    Публикаций:
    0
    Регистрация:
    8 мар 2004
    Сообщения:
    95
    xor ebx,ebx тоже быстрее sub ebx,ebx? :) Если серьезно, то тогда уж, ИМХО, имеет смысл заменить некоторые параметры на регистры.
     
  8. stellaco

    stellaco New Member

    Публикаций:
    0
    Регистрация:
    11 дек 2008
    Сообщения:
    193
    действительно..быстрее (((
    ...поясните почему? sub быстрей чем xor ...с чем это связано?
     
  9. AndreyMust19

    AndreyMust19 New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2008
    Сообщения:
    714
    Я тоже почему-то думаю что xor бысрее чем sub. Наверное потому что Булевые операции - родные для электроники, а вычитание они выполняют искуственно. При xor проц только проводит операцию над каждым битом, а при sub вычитании надо еще занимать знаки из старших разрядов и запоминать промежуточный результат.
     
  10. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    ыы? читай маны, потом чтото утверждай.
    не ошибаешся, но по сравнению со временем вызова SendDlgItemMessage это ничтожно малая величина, которой можно пренебречь. при чем пренебрежение в данном случае дает выигрыш 1 байта в размере :)
     
  11. AndreyMust19

    AndreyMust19 New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2008
    Сообщения:
    714
    А почему ж тогда в большинстве случаев пишут 'xor reg,reg' , а не 'sub reg, reg'. Первый вариант короче?
     
  12. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    как видишь, Marazm предпочел sub.
     
  13. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.568
    Адрес:
    Russia
    xor reg,reg
    sub reg, reg
    Абсолютно одинаковы по скорости.

    Как говорится на вкус и цвет )
     
  14. stellaco

    stellaco New Member

    Публикаций:
    0
    Регистрация:
    11 дек 2008
    Сообщения:
    193
    Ну раз уж тема склонилась в сторону обсуждения быстродействия...
    То хотел бы спросить =)
    Что предпочтительней использовать? системные вызовы или функции СИ.
    К примеру.
    Системный вызов write или любую СИ функцию, например printf ?...
    У Стивенса написано, что обращение к системным вызовам более дорогостоющий процесс чем обращение к функциям из стандартной библиотеки...
    видимо, обычные функции предпочтительней...
    Вот например printf - тормозная функция.... обращается ли она в конце исполнения к системному вызову write?(в таком случае..естественно очевидно, что её работа будет более долгой чем,вызов write напрямую) чтоб вывести данные на экран.. или выводит как-то ещё?.. без использования ОС...
    .... Не понятно) от чего отталкиваться в выборе более подходящей функции (по быстродействию)..... как узнать (помимо тестовых программ...) что работает быстрей??
     
  15. 2FED

    2FED New Member

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

    stellaco New Member

    Публикаций:
    0
    Регистрация:
    11 дек 2008
    Сообщения:
    193
    2FED
    Да...что-то знакомое.....
    но это не ответ на вопрос))
     
  17. 2FED

    2FED New Member

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

    (сишная)printf->wsprintf->(сишная)write->(kernel32)WriteFile->(ntdll)ZwWriteFile->(ntoskrnl)ZwWriteFile->(ntoskrnl)NtWriteFile

    на самом деле там ещё между write и WriteFile ещё переходник(заглушка) стоит
     
  18. stellaco

    stellaco New Member

    Публикаций:
    0
    Регистрация:
    11 дек 2008
    Сообщения:
    193
    2FED
    Спасибо за пояснение. =)
     
  19. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    2FED
    Нельзя сказать, что printf однозначно медленнее write. И там и там будет системный вызов, но за счет буферизации системных вызовов при использовании printf будет меньше, т.к. лучше передать в системный вызов разом 10 байт, чем 10 раз передать по одному байту. printf использует буферизацию, поэтому при передаче данных "кусками" она будет быстрее.
     
  20. stellaco

    stellaco New Member

    Публикаций:
    0
    Регистрация:
    11 дек 2008
    Сообщения:
    193
    Как сделать так, чтоб происходила буферизация.....при использовании системных вызовов. (без использования стандартной библиотеки Си)