Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.04.2009, 19:35   #1
Xatr
Форумчанин
 
Аватар для Xatr
 
Регистрация: 17.09.2008
Сообщений: 349
По умолчанию Запуск с параметрами

Нужно прогу загрузить с параметрами:
dvd.exe open
dvd.exe close
Но только не работает. пробовал через Message, вроде слово показывает (open или close).

Пример проги:
Код:
.486
.model flat,stdcall
option casemap:none
include \masm32\include\masm32rt.inc
include \masm32\include\winmm.inc
includelib \masm32\lib\winmm.lib
.const
a db 'Set cdaudio door open wait',0
b db 'Set cdaudio door closed wait',0
.code

; главная процедура
main proc
LOCAL file1:dword
LOCAL buffer1[20]:BYTE
mov file1,ptr$(buffer1)
invoke GetCL,1,file1
push file1
pop eax
.if eax==6F70656Eh ;open
call open
.endif
.if eax==636Ch ;close
call close
.endif
ret
main endp

;открыть
open proc
push 0
push 0
push 0
push offset a
call mciSendString
push 0
call ExitProcess
open endp

;закрыть
close proc
push 0
push 0
push 0
push offset b
call mciSendString
push 0
call ExitProcess
close endp


start:
call main
push 0
call ExitProcess
end start
если чем помог, поставьте отзыв на весы

Последний раз редактировалось rpy3uH; 17.04.2009 в 20:31.
Xatr вне форума Ответить с цитированием
Старый 17.04.2009, 19:46   #2
litrovith
Пользователь
 
Регистрация: 15.07.2008
Сообщений: 28
По умолчанию

Xatr, вместо '.if eax==6F70656Eh ;open' нуна '.if eax==6E65706Fh ;nepo' вроде
litrovith вне форума Ответить с цитированием
Старый 17.04.2009, 20:32   #3
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

функция GetCommandLine возвращает путь к нашему экзешнику плюс все параметры. Путь к экзешнику и параметр заключены в кавычки. Осталось только пропарсить строки и отделить путь к программе и сам параметр
rpy3uH вне форума Ответить с цитированием
Старый 17.04.2009, 21:56   #4
litrovith
Пользователь
 
Регистрация: 15.07.2008
Сообщений: 28
По умолчанию

rpy3uH, та не, ТС же пользует готовую функцию масма.
Xatr,
Код:
LOCAL buffer1[20]:BYTE
mov file1,ptr$(buffer1)
- ето лишнее, нуна:[
Код:
invoke GetCL,1, addr buffer1
(буфер нуна побольше), потом
Код:
lea eax, buffer1
в результате в eax вы должны получить указатель на буфер!
litrovith вне форума Ответить с цитированием
Старый 18.04.2009, 15:34   #5
Xatr
Форумчанин
 
Аватар для Xatr
 
Регистрация: 17.09.2008
Сообщений: 349
По умолчанию

А нельзя ли это всё сделать без процедур?
если чем помог, поставьте отзыв на весы
Xatr вне форума Ответить с цитированием
Старый 19.04.2009, 15:04   #6
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

без каких процедур?
rpy3uH вне форума Ответить с цитированием
Старый 20.04.2009, 16:24   #7
Xatr
Форумчанин
 
Аватар для Xatr
 
Регистрация: 17.09.2008
Сообщений: 349
По умолчанию

"main proc"
"open proc"
"close proc"

при помощи lea, тоже работает, но дальше условия не проходит
Изменённый код:
Код:
.486
.model flat,stdcall
option casemap:none
include \masm32\include\kernel32.inc
includelib \masm32\lib\kernel32.lib
include \masm32\include\winmm.inc
includelib \masm32\lib\winmm.lib
include \masm32\include\masm32.inc
includelib \masm32\lib\masm32.lib
.const
a db 'Set cdaudio door open wait',0
b db 'Set cdaudio door closed wait',0
.code
main proc
LOCAL buffer1[1]:BYTE
invoke GetCL,1, addr buffer1
lea eax,buffer1

cmp ax,31h  ;open
jne ex1
push 0
push 0
push 0
push offset a
call mciSendString
push 0
call ExitProcess

ex1:
cmp eax,32h  ;close
jne ex
push 0
push 0
push 0
push offset b
call mciSendString
push 0
call ExitProcess

ret
main endp

start:
call main
ex:
push 0
call ExitProcess
end start
dvd open
dvd close
для удобства были изменены на
dvd 1
dvd 2
соответственно
если чем помог, поставьте отзыв на весы

Последний раз редактировалось rpy3uH; 20.04.2009 в 19:16.
Xatr вне форума Ответить с цитированием
Старый 21.04.2009, 03:22   #8
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

Ну так и правильно всё.
lea eax,buffer1 - берём адрес строки в eax
cmp ax,31h ;open - сравниваете младшие 16 бит адреса со значением 0031h, а надо сравнивать значение по этому адресу.


Код:
.486
.model flat,stdcall
option casemap:none
include \masm32\include\kernel32.inc
includelib \masm32\lib\kernel32.lib
include \masm32\include\winmm.inc
includelib \masm32\lib\winmm.lib
include \masm32\include\masm32.inc
includelib \masm32\lib\masm32.lib
.const
a db 'Set cdaudio door open wait',0
b db 'Set cdaudio door closed wait',0
.code
main proc
LOCAL buffer1[16]:BYTE

invoke GetCL,1, addr buffer1
 
lea eax,buffer1
cmp byte ptr [eax],31h  ;open
jne ex1
push 0
push 0
push 0
push offset a
call mciSendString
push 0
call ExitProcess

ex1:
cmp byte ptr [eax],32h  ;close
jne ex
push 0
push 0
push 0
push offset b
call mciSendString
push 0
call ExitProcess

ret
main endp

start:
call main
ex:
push 0
call ExitProcess
end start
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 29.04.2009, 20:30   #9
Xatr
Форумчанин
 
Аватар для Xatr
 
Регистрация: 17.09.2008
Сообщений: 349
Радость

ай спасибо, работает!
После:

cmp byte ptr[eax],32h
jne f
push 0
push 0
push 0
push offset b
call mciSendString
ret

добавил:

include \masm32\macros\macros.asm
f:
print "Use: dvd option"
print chr$(13,10,13,10)
print "Options:"
print chr$(13,10)
print "o - open DVD-ROM"
print chr$(13,10)
print "c - close DVD-ROM"
ret

Как это можно оптимизировать?
В Tasm когда-то писал:
mov ah,"номер вывода строки на экран"
mov dx,offset mes
int 21h

В masm что-то не проходит.
если чем помог, поставьте отзыв на весы
Xatr вне форума Ответить с цитированием
Старый 30.04.2009, 00:12   #10
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

А я бы вам не советовал использовать все эти масм-ие макросы и функции типа print и StdOut. Почему??

1. Кому как, а мне например код вида:
.data
xxxx
.code
xxxx
.data
xxxx
.code
глаза как то режет. Не, ну конечно здорово, что masm32 такой замечательный компилятор, что во всей этой каше разберётся и данные попадут всё таки в секцию данных. Но лично я такого бардака в своей программе не потерпел бы, а макрос print именно к такому виду вашу программу и приведёт.
2. Использование сторонних функций (StdOut) скорее всего запутает начинающего программиста и вы можете даже не понять, что вы делаете. Поэтому советую для начала поработать с консолью Win32 чистыми WinApi функциями (GetStdHandle, CloseHandle и т.д.).
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запуск приложения с параметрами !!! badfilin Общие вопросы C/C++ 6 27.05.2010 23:29
Автоматический запуск макросов с листа на котором указан перечень макросов с параметрами и без Neoli Microsoft Office Excel 2 09.03.2009 14:31
Запуск приложения с параметрами Arhangel_bes Помощь студентам 14 12.02.2009 21:35
Запуск макроса с параметрами из другого макроса Saladin Microsoft Office Excel 2 19.01.2009 09:43
Запуск exe с параметрами Altera Общие вопросы Delphi 2 26.02.2008 21:25