Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm для начинающих > Не проходит трансляция


Автор: serrggeee 5.3.2012, 21:01
Код

; winurl.asm
; Пример программы для win32
; Запускает установленный по умолчанию браузер на адрес, указанный в строке URL.
; Аналогично можно запустить любую программу, документ и какой угодно файл.
; для которого определена операция open.
;
 
includelib kernel32.inc
include  shell32.inc
        .386
        .model flat
        .const
URL     db      "http://www.lionking.org/`cubbi/",0
        .code
_start:         ; Метка точки входа должна начинаться с подчёркивания.
        xor     ebx,ebx        
        push    ebx                             ; Для исполняемых файлов - способщ показа.
        push    ebx                             ; Рабочач директория.
        push    ebx                             ; Командная строка.
        push    offset URL                      ; Имя файла с путём.
        push    ebx                             ; Операция open или print (если NULL - open).
        push    ebx                             ; Индентификатор окнаб
        call    shellExecute                    ; ShellExecute (NULL,NULL,url,NULL,NULL,NULL)
        push    ebx                             ; Код выхода.
        call    ExitProcess                     ; ExitProcess(0)
end     _start 

и нужно ещё два inc файла

Код

kernel32.inc
; kernel32.inc
; включаемый файл с определениями функций и kernel32.dll
ifdef   _TASM_
        includelib      import32.lib
                ; Имена используемых функций.
                extrn   __imp__ExitProcess@4:dword
        ExitProcess     equ     __imp__ExitProcess@4
endif


Код

shell32.inc
; kernel32.inc
; включаемый файл с определениями функций и kernel32.dll
ifdef   _TASM_
        includelib      import32.lib
                ; Имена используемых функций.
                extrn   __imp__ExitProcess@4:dword
        ExitProcess     equ     __imp__ExitProcess@4
endif


но трансляция не проходит

Автор: 500mhz 5.3.2012, 23:00
и что пишет?

Автор: serrggeee 6.3.2012, 08:44
вот полный путь до исходника  "C:\masm32\bin\Hello World\ISHODNIC\winurl.asm"

а вот что пишет CMD 
  

Microsoft Windows XP [Версия 5.1.2600]
(С) Корпорация Майкрософт, 1985-2001.

C:\Documents and Settings\Сергей>c:\masm32\bin\ml.exe   /coff /c   .\ISHODNIC\wi
nurl.asm
Microsoft ® Macro Assembler Version 6.14.8444
Copyright © Microsoft Corp 1981-1997.  All rights reserved.

 Assembling: .\ISHODNIC\winurl.asm
MASM : fatal error A1000: cannot open file : .\ISHODNIC\winurl.asm

C:\Documents and Settings\Сергей>

C:\Documents and Settings\Сергей>

Автор: 500mhz 6.3.2012, 16:18
Код


include 'win32ax.inc'


section "code" readable writeable executable


start:

        invoke ShellExecute,0,0,URL,0,0,0
        invoke ExitProcess,0
URL:
        db "http://www.lionking.org/`cubbi/",0

.end start                                                


fasm все прекрасно компилит и работает )

Автор: serrggeee 6.3.2012, 16:45
у меня MASM а на сколько я знаю есть небольшая разница в коде я не имею ту разницу то что вы
записали "invoke ShellExecute,0,0,URL,0,0,0", я через call, а то что  в  fasm  start, а в masm start_ или же можно брать ваш код и компилировать? Вот что ещё я хотел спросить вот эти файлы kernel32.inc shell32.inc которые я создал хотя я их немного не верно написал но нив этом суть как их включать, я вообще так сделал у меня в одной директории bin папка Hello World я так её назвал потому что первое пришло на ум вот в этой папке папка INCLUDE и папка ISHODNIC где соответственно в одной мною созданные файл inc а в другой исходник, так вот в чё м вопрос найдёт компилятор эти файлы так как в masm32 ecmь свои файлы inc
 

Автор: 500mhz 6.3.2012, 16:54
я масмом 100 лет честно говоря не пользовался и под рукой не имею.
а вам именно на масме все это делать приспичило?

Автор: serrggeee 6.3.2012, 17:58
да я им пользуюсь

Автор: Evjeny 6.3.2012, 18:21
serrggeee, укажите полный путь к файлу

т.е. итоговый вызов ml:

C:\Documents and Settings\Сергей>c:\masm32\bin\ml.exe   /coff /c "C:\masm32\bin\Hello World\ISHODNIC\winurl.asm"

кавычки в пути обязательны, так как есть пробел (\Hello Word\)

Автор: serrggeee 6.3.2012, 18:41
Microsoft Windows XP [Версия 5.1.2600]
(С) Корпорация Майкрософт, 1985-2001.

C:\Documents and Settings\Сергей>c:\masm32\bin\ml.exe   /coff /c "C:\masm32\bin\
Hello World\ISHODNIC\winurl.asm"
Отказано в доступе.

C:\Documents and Settings\Сергей>

Автор: Evjeny 6.3.2012, 18:51
поставте необходимые права на папку(и)

если есть антивирус возможно он блокирует (хотя скорее всего вряд ли)

Автор: serrggeee 6.3.2012, 19:04
у меня не стоит антивирусник наверное он и блокирует masm прийдётся переустановить

Добавлено через 8 минут и 4 секунды
вот что пишет cmd 
"Microsoft Windows XP [Версия 5.1.2600]
(С) Корпорация Майкрософт, 1985-2001.

C:\Documents and Settings\Сергей>c:\masm32\bin\ml.exe   /coff /c "C:\masm32\bin\
Hello World\ISHODNIC\Step_One.asm"
Microsoft ® Macro Assembler Version 6.14.8444
Copyright © Microsoft Corp 1981-1997.  All rights reserved.

 Assembling: C:\masm32\bin\Hello World\ISHODNIC\Step_One.asm
C:\masm32\bin\Hello World\ISHODNIC\Step_One.asm(7) : fatal error A1000: cannot o
pen file : 'shell32.inc'

C:\Documents and Settings\Сергей>"

Автор: serrggeee 6.3.2012, 20:06
я ещё заметил одно чудо у меня есть исходник который компилится нормально но только через батник вот что содержит батник "@   echo  ___________STEP_ONE_________________________________________

@   C:\masm32\bin\ml.exe   /coff /c   .\ISHODNIC\Step_One.asm"

но если я ввожу эту же команду  в cmd результат следующий:

Microsoft Windows XP [Версия 5.1.2600]
(С) Корпорация Майкрософт, 1985-2001.

C:\Documents and Settings\Сергей>@   C:\masm32\bin\ml.exe   /coff /c   .\ISHODNI
C\Step_One.asm
Microsoft ® Macro Assembler Version 6.14.8444
Copyright © Microsoft Corp 1981-1997.  All rights reserved.

 Assembling: .\ISHODNIC\Step_One.asm
MASM : fatal error A1000: cannot open file : .\ISHODNIC\Step_One.asm

C:\Documents and Settings\Сергей>


то есть та же ошибка fatal error A1000 

Автор: Evjeny 6.3.2012, 20:11
Код

includelib kernel32.inc
 это неправильно

Код

include с:\masm32\include\kernel32.inc
include с:\masm32\include\shell32.inc

includelib с:\masm32\lib\kernel32.lib
includelib с:\masm32\lib\shell32.lib


в include/includelib указывайте полный путь к файлам, либо устанавливайте пути через переменные среды, либо еще как-нибудь - интеренет в помощь

Автор: serrggeee 6.3.2012, 20:21
я поменял часть кода на то что вы советовали 
Код

include с:\masm32\include\kernel32.inc
include с:\masm32\include\shell32.inc
includelib с:\masm32\lib\kernel32.lib
includelib с:\masm32\lib\shell32.lib


теперь вот что показывает:
"Microsoft Windows XP [Версия 5.1.2600]
(С) Корпорация Майкрософт, 1985-2001.

C:\Documents and Settings\Сергей>c:\masm32\bin\ml.exe   /coff /c .\ISHODNIC\Step
_One.asm
Microsoft ® Macro Assembler Version 6.14.8444
Copyright © Microsoft Corp 1981-1997.  All rights reserved.

 Assembling: .\ISHODNIC\Step_One.asm
MASM : fatal error A1000: cannot open file : .\ISHODNIC\Step_One.asm

C:\Documents and Settings\Сергей>"

Автор: serrggeee 6.3.2012, 20:47
транляцию я сделал и получил файл obj но не через cmd а через батник теперь не получатеся сделать линковку вот что выходит:
"Microsoft Windows XP [Версия 5.1.2600]
(С) Корпорация Майкрософт, 1985-2001.

C:\Documents and Settings\Сергей>if EXIST Step_One.obj c:\masm32\bin\link.exe /S
UBSYSTEM:WINDOWS   .\Step_One.obj
Microsoft ® Incremental Linker Version 5.12.8078
Copyright © Microsoft Corp 1992-1998. All rights reserved.

Step_One.obj : fatal error LNK1190: invalid fixup found, type 0x0002

C:\Documents and Settings\Сергей>"

Автор: Evjeny 6.3.2012, 21:33
serrggeee, однако... разогрели вы эту тему   smile 

в дальнейшем все-таки советую пользоваться поиском, так как подобные вопросы неоднократно были решены

код:
Код

; winurl.asm
; Пример программы для win32
; Запускает установленный по умолчанию браузер на адрес, указанный в строке URL.
; Аналогично можно запустить любую программу, документ и какой угодно файл.
; для которого определена операция open.
;

.386
.model flat

include l:\masm32\include\kernel32.inc
include l:\masm32\include\shell32.inc

includelib l:\masm32\lib\kernel32.lib
includelib l:\masm32\lib\shell32.lib


        .const
URL     db      "http://127.0.0.1",0
        .code
_start:         ; Метка точки входа должна начинаться с подчёркивания.
        xor     ebx,ebx        
        push    ebx                             ; Для исполняемых файлов - способщ показа.
        push    ebx                             ; Рабочач директория.
        push    ebx                             ; Командная строка.
        push    offset URL                      ; Имя файла с путём.
        push    ebx                             ; Операция open или print (если NULL - open).
        push    ebx                             ; Индентификатор окнаб
        call    ShellExecute                    ; ShellExecute (NULL,NULL,url,NULL,NULL,NULL)
        push    ebx                             ; Код выхода.
        call    ExitProcess                     ; ExitProcess(0)
end     _start


трансляция из командной строки:
Код

l:\masm32\bin\ml.exe /c /coff /Fo"l:\masm32\bin\Hello Word\ISHODNIC\xxx.obj" "l:\masm32\bin\Hello Word\ISHODNIC\xxx.asm"


линковка из командной строки:
Код

l:\masm32\bin\link.exe /SUBSYSTEM:WINDOWS /OUT:"l:\masm32\bin\Hello Word\ISHODNIC\xxx.exe" "l:\masm32\bin\Hello Word\ISHODNIC\xxx.obj"


2 раза проверял - все собирается

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)