Доброго времени суток!) Вообщем такая трабла, я написал прогу простейшую хелло ворлд и решил её передать другу и она у него написала "Не является приложением Win32". Потом прочитал что проги написаные на асме не переносятся на другие компы. Как можно это исправить? Просто мы совместно в другом учимся и неудобно постоянно компилить на разных компах одну и туже прогу...
какие у вас оси ??? чем собирал и под какую ось? часом не дос приложение пытаешься запустить в висте или семерке ???
Системы у обоих ХП. Нет не дос. Просто приложение из туториала Ицзэлиона там хелло ворлд в вин32 т.е не в консоли выводит хелло а в табличке.
Код (Text): .386 .model flat,stdcall option casemap:none include \masm32\include\windows.inc include \masm32\include\kernel32.inc includelib \masm32\lib\kernel32.lib include \masm32\include\user32.inc includelib \masm32\lib\user32.lib .data MsgBoxCaption db "Iczelion Tutorial No.2",0 MsgBoxText db "Win32 Assembly is Great!",0 .code start: invoke MessageBox, NULL, addr MsgBoxText, addr MsgBoxCaption, MB_OK invoke ExitProcess, NULL end start Если каждый на своём компе компилит то всё оке, а если например я на своём скомплил и передал ему экзешник то у него не запустица так же и наоборот.
странно все это попробуйте отлаживать то что вам передали ну или для начала сравнить бинарно то что у вас получается с тем что у него
Всё всем спс. Разобрался оказывается я ему передавал не тот ехешник_)_ тот который я ему передал был левым и к нему должды были быть библиотеки) Я нуп я знаю)...
nikas Ну, с данным конкретным случаем уже разобрались, так что прокомментирую выделенные строки 1. Язык ассемблера является прямым отражением команд, которые выполняет процессор. В мире существует множество процессорных архитектур, и у каждой из них -- свой набор команд, свои регистры и т.п., а поэтому программы на ассемблере, написанные для одной архитектуры, для другой непригодны. Однако во всех ПК используются процессоры одной и той же архитектуры, официально именуемой IA-32, хотя часто используется и обозначение x86. Поэтому с точки зрения процессора программа, написанная на одном ПК, обычно должна работать на другом. 2. Хотя процессоры всех ПК относятся к одной и той же архитектуре, однако сама архитектура постепенно развивалась. Например, команды PUSHA/PUSHAD и POPA/POPAD появились в микропроцессоре 80186, а в оригинальном 8086/8088 (на последнем был построен первый IBM PC) их ещё не было. Понятное дело, что, если в программе используются какие-то команды, которые имеются не на всех процессорах, она сможет работать только там, где эти команды есть. 3. Программы обычно не в безвоздушном пространстве, а под управлением какой-либо операционной системы. Любая ОС предоставляет в распоряжение программиста набор системных вызовов (API) для реализации таких операций, как ввод-вывод, запуск других программ т.д. В разных семействах ОС (например, Windows и Linux) используются разные API, поэтому программа, написанная для одной ОС, не будет работать в другой. Это относится уже не только к ассемблеру, а к любому языку вообще. Правда, на языках высокого уровня (Паскаль, Си и т.д. и т.п.) можно писать переносимые программы, но для этого надо предпринимать ряд специальных мер, например, никогда не вызывать напрямую функции API операционной системы, а использовать "обёртки" для них, входящие в состав библиотеки компилятора данного языка. Впрочем, это уже другая тема.