Переносимость асма на другие компы!

Тема в разделе "WASM.HEAP", создана пользователем nikas, 21 сен 2009.

  1. nikas

    nikas New Member

    Публикаций:
    0
    Регистрация:
    7 сен 2009
    Сообщения:
    21
    Доброго времени суток!)
    Вообщем такая трабла, я написал прогу простейшую хелло ворлд и решил её передать другу и она у него написала "Не является приложением Win32". Потом прочитал что проги написаные на асме не переносятся на другие компы. Как можно это исправить? Просто мы совместно в другом учимся и неудобно постоянно компилить на разных компах одну и туже прогу...
     
  2. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.622
    Адрес:
    Russia
    какие у вас оси ??? чем собирал и под какую ось? часом не дос приложение пытаешься запустить в висте или семерке ???
     
  3. nikas

    nikas New Member

    Публикаций:
    0
    Регистрация:
    7 сен 2009
    Сообщения:
    21
    Системы у обоих ХП. Нет не дос. Просто приложение из туториала Ицзэлиона там хелло ворлд в вин32 т.е не в консоли выводит хелло а в табличке.
     
  4. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.622
    Адрес:
    Russia
    а у вас на компе все тип топ - работает ???
    исходничек хоть приведите
     
  5. nikas

    nikas New Member

    Публикаций:
    0
    Регистрация:
    7 сен 2009
    Сообщения:
    21
    Код (Text):
    1. .386
    2.  
    3. .model flat,stdcall
    4. option casemap:none
    5. include \masm32\include\windows.inc
    6. include \masm32\include\kernel32.inc
    7.  
    8. includelib \masm32\lib\kernel32.lib
    9. include \masm32\include\user32.inc
    10. includelib \masm32\lib\user32.lib
    11.  
    12. .data
    13. MsgBoxCaption  db "Iczelion Tutorial No.2",0
    14. MsgBoxText     db "Win32 Assembly is Great!",0
    15.  
    16. .code
    17. start:
    18.  
    19. invoke MessageBox, NULL, addr MsgBoxText, addr MsgBoxCaption, MB_OK
    20. invoke ExitProcess, NULL
    21. end start
    Если каждый на своём компе компилит то всё оке, а если например я на своём скомплил и передал ему экзешник то у него не запустица так же и наоборот.
     
  6. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.622
    Адрес:
    Russia
    странно все это
    попробуйте отлаживать то что вам передали
    ну или для начала сравнить бинарно то что у вас получается с тем что у него
     
  7. IceT

    IceT IceT

    Публикаций:
    0
    Регистрация:
    13 авг 2009
    Сообщения:
    233
    Адрес:
    RU
    Очень странно на самом деле. Выложи exeшник.
     
  8. nikas

    nikas New Member

    Публикаций:
    0
    Регистрация:
    7 сен 2009
    Сообщения:
    21
    Всё всем спс. Разобрался оказывается я ему передавал не тот ехешник_)_ тот который я ему передал был левым и к нему должды были быть библиотеки) Я нуп я знаю)...
     
  9. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.622
    Адрес:
    Russia
    ну а он вам что передавал ??? тоже туфту ???
     
  10. nikas

    nikas New Member

    Публикаций:
    0
    Регистрация:
    7 сен 2009
    Сообщения:
    21
    ага))
     
  11. SII

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

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

    1. Язык ассемблера является прямым отражением команд, которые выполняет процессор. В мире существует множество процессорных архитектур, и у каждой из них -- свой набор команд, свои регистры и т.п., а поэтому программы на ассемблере, написанные для одной архитектуры, для другой непригодны. Однако во всех ПК используются процессоры одной и той же архитектуры, официально именуемой IA-32, хотя часто используется и обозначение x86. Поэтому с точки зрения процессора программа, написанная на одном ПК, обычно должна работать на другом.

    2. Хотя процессоры всех ПК относятся к одной и той же архитектуре, однако сама архитектура постепенно развивалась. Например, команды PUSHA/PUSHAD и POPA/POPAD появились в микропроцессоре 80186, а в оригинальном 8086/8088 (на последнем был построен первый IBM PC) их ещё не было. Понятное дело, что, если в программе используются какие-то команды, которые имеются не на всех процессорах, она сможет работать только там, где эти команды есть.

    3. Программы обычно не в безвоздушном пространстве, а под управлением какой-либо операционной системы. Любая ОС предоставляет в распоряжение программиста набор системных вызовов (API) для реализации таких операций, как ввод-вывод, запуск других программ т.д. В разных семействах ОС (например, Windows и Linux) используются разные API, поэтому программа, написанная для одной ОС, не будет работать в другой. Это относится уже не только к ассемблеру, а к любому языку вообще. Правда, на языках высокого уровня (Паскаль, Си и т.д. и т.п.) можно писать переносимые программы, но для этого надо предпринимать ряд специальных мер, например, никогда не вызывать напрямую функции API операционной системы, а использовать "обёртки" для них, входящие в состав библиотеки компилятора данного языка. Впрочем, это уже другая тема.
     
  12. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    ты бы еще про pop cs вспомнил