Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Assembler

Автор: bomzzz
Дата сообщения: 05.08.2010 10:48
есть ShellExecute есть CreateProcess.
в стартере ShellExecute - возможно поэтому. но батники она все должна запускуть возмодно некоторые екзешники. надо описание апи функций почитать

Добавлено:
ну так не делай их нивидимыми.

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

Добавлено:
0 - скрытое окно.
1 - нормальное окно.
2 - минимизированное окно.
3 - максимизированное окно.
4 - запустить приложение с окном в том состоянии, в котором оно было последний раз. Текущее активное окно останется активным.
5 - запустить приложение с окном в текущем состоянии.
7 - минимизированное окно. Текущее активное окно останется активным.
10 - состояние окна по умолчанию для приложения.

BatStarter.exe /MyBatnik.BAT/MyParametr/1

Добавлено:
ShellExecuteEx еще есть. нао описание искать. у меня в справочнике подробности не расжевывваются

Автор: conty9
Дата сообщения: 05.08.2010 11:44
bomzzz, посмотри ЛС.
Мне бы готовую ЕХЕ-шку, чтобы просто стартонула любое зарегестрированное в системе приложение (при необходимости - с ключами). С ассемблером я последний раз сталкивался ещё в 80-е в институте
Автор: bomzzz
Дата сообщения: 05.08.2010 11:47
conty9
PROGSTARTER.ZIP 495 байт (495 байт)

поробуй вот это. протупил с апи фукцией - тут принцип или или, а не и и

START.EXE /MYPROG.EXE MYPARAMETRE
START.EXE /MYPROG.COM MYPARAMETRE
START.EXE /MYBATNIK.BAT MYPARAMETRE
START.EXE /MYPROG.EXE
START.EXE /MYPROG.COM
START.EXE /MYBATNIK.BAT
Автор: conty9
Дата сообщения: 05.08.2010 14:34
bomzzz, нельзя скачать
Яндекс     404     Нет такой страницы
Несуществующая страница
Автор: bomzzz
Дата сообщения: 05.08.2010 14:35
хитрость оказалась в том, что в этой апи фукции - если запускаешь программу указаетль на строку помещаешь в первое значение передаваемое функции, а если тебе еще надо параметр запуска передать - тогда в первое поле имени ноль, а во второе поле параметра и имя программы запускаемой и ее параметр.

http://films-onep.ifolder.ru/18786821
PROGSTARTER.ZIP 495 байт (495 байт)

нельзя имя наинать с START и RUN на яндексе


Цитата:

ECHO OFF
COLOR 9F
CLS
START.EXE /C:\Program Files\Download Master\dmaster.exe http://bomz.bomz
START.EXE /rrr.bat yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
pause


ECHO OFF
COLOR 9F
CLS
echo %1
pause


проверил все работкаит. COM файл у меня валяется тоже нормально. упсом прога не сжимается

Добавлено:
так как прога ищет только до первого слеша - если дальше в строке будет слеш (в параметрах передаваемых запускаемой программе) то ниче не испортится

Добавлено:
тута просто все, а с 16 битными программами и память ужать и стек, потом память выделить подготовить псп и только потом запустить
Автор: conty9
Дата сообщения: 05.08.2010 15:17
bomzzz, не видно, некторых прог, например, FAR.
Автор: bomzzz
Дата сообщения: 05.08.2010 15:24
что значит не видно?
Автор: conty9
Дата сообщения: 05.08.2010 15:30
bomzzz, сорри, слеш забыл... А без него никак?
Автор: bomzzz
Дата сообщения: 05.08.2010 15:31
conty9
коммандная строка в системе каждой программы храниться в таком виде

C:\KAZDAYAPROGRAMMA.EXE PARAMETRI
поэтому чтоб вырезать кусок после имени программы который нам нужен для запуска надо до него промотать отделив каким то неиспользуемым в именах знаком. любым

Добавлено:
можно пробелом - который и так по умолчаниб стоит, но тогда нужно будет использовать только короткие имена для запуска или запускать только из той же директории где программа и что в ее имени не было пробелов

Добавлено:
скажи другой знак я перекомпилирую - только чтоб его не было в пути-имени самого стартера

Добавлено:
C:\Programe Files\Starter\START.EXE /C:\Program Files\Far20b1263.x86.20091204\FAR.exe

вот в таком виде строку получает стартер или в таком смотря откуда запущен

START.EXE /C:\Program Files\Far20b1263.x86.20091204\FAR.exe

Добавлено:
давай сделаем пробел - тогда никакого знака как бы не надо будет, но стартер положи куда нибудь что в пути к нему не было пробелов. или какой нибудь идиотский знак ~ такой или @ # %

Добавлено:
слеш общепринятый поэтому конфликтов не возникает

Добавлено:
еще вот так принято делать PROG.EXE -help
Автор: conty9
Дата сообщения: 05.08.2010 15:49
bomzzz, в той же hidcon.exe всё работает и через пробел с любыми именами и путями (кстати, очень похожа на твою ЕХЕ-шку).
http://tools.oszone.net/Vadikan/temp/hidcon.exe
Автор: bomzzz
Дата сообщения: 05.08.2010 15:55
оан так же сделана.
ну тогда она должна разбирать строку до своего имени. потом до первого пробела. будет так работать. а чем тебе слеш мешает. щас подумаю как сделать.

Добавлено:
ну тут целая история - надо искать апи функцию которая имя файла определяет.... щас попроюсь. а хидикон ета действиетльно CALL а не START делает

Добавлено:
она тоже на масме 32 сделана
Автор: conty9
Дата сообщения: 05.08.2010 17:08
bomzzz, может, проще подправить hidcon?
Автор: bomzzz
Дата сообщения: 05.08.2010 17:24
как ее подправишь нужно дезассемблер искать.
Автор: bomzzz
Дата сообщения: 05.08.2010 19:28
алгоритм простейший:
если командная строка начинается с " - тогда мотаем до следующих кавычек + 2 символа
если командная строка не начинается с " - тогда мотаем до первого пробела + 1
это и есть смещение на командный параметр
Автор: bomzzz
Дата сообщения: 06.08.2010 00:34
давненько я так не тупил, проще пареной репы. старость не радость, в школе как орешки щелкал. проверяй.

PROGRUNNER.ZIP 515 байт (515 байт)
возвращает хендл процесса (?) или 0 в случае конфуза - файл не найден

проверил во всех ситуациях - запуск с коротким именем, с пробелами, из текущей папки, с указанием расширения и без, и даже так:

Цитата:

ECHO OFF
COLOR 9F
CLS
chcp 1251
".\!.EXE I\START.exe" DosWinConverter.exe


Добавлено:
может как батстартер переделать? с видом окна иногда удобнее, для тех случаев когда программа в сборке запускается с помощью батника - чтоб окно батника не вылазило.
и поосторожнее с именами START и RUN не самые лучшие имена для программы

start.exe C:\Program Files\Download Master\dmaster.exe
echo %errorlevel%


Автор: bomzzz
Дата сообщения: 06.08.2010 03:19
conty9
а порождаемому процессу не надо передавать указатель на рабочую директорию? а то они все из папки стартера будут запускаться, или придется в каждую папку стартер ложить и смысла не будет - винде опять надо будет проверять кучу файлов.
только тогда наверно надо быдет в параметре кавычки применять в обязательном порядке для пробелов тебе это опять не понравиться. или к слешу вернуться.

вообщем если надо передать рабочую директорию запускаемому процессу (скорее всего она равна директории в которой лежит исполняемый (запускаемый) файл, тогда надо делать разбор разбора командных параметров командной строки и опять надо какие то опозновательные знаки. это или пробел - но тогда все пути имеющие пробелы надо брать в кавычки, или слеш или другой символ не используемый в путях и редкоиспользуемый в конмадных параметрах - или два стартера с разными символами.

и кстати абсолютно непонятно почему ты не сделал это просто батником, который все это тоже умеет (не умеет одного окна скрывать) и передавать получать параметры и запускать любые программы. и рабочую директорию менять

@ECHO OFF
CD %~dp1%
START %~1%


и всё...

если параметры пердать надо то нужны кавычки START.BAT "C:\PROGRAM FILES\MYPROG.EXE MYPARAMETRES"
Автор: conty9
Дата сообщения: 06.08.2010 09:15
bomzzz, ком-файл не подходит - ведь все проги будут запускаться так, дос-окна будут раздражать. А за ехе-шник большое спасибо, протестирую вечером. Пока всё ок.
Автор: bomzzz
Дата сообщения: 06.08.2010 12:47
ну окно батника легко сделать невидимым.
кстати ярлыки прекрасно пакуются в архивы и спокойно оттуда распаковываются, и работают если пути не поменялись. нельзя сделать ярлыки сразу?

Добавлено:
PROGRUNNERHIDE.ZIP 589 байт (589 байт)
тоже самое только запускаемая программа запускается в невидимом режиме (не все поддерживают вернее поддерживают то все просто некоторые насильно тип своего окна указывают).

PROGRUNNERPATH.ZIP 652 байт (652 байт)
тоже самое но передает запускаемой программе рабочую директорию равную пути к запускаемой программе, в случае наличия пробелов в пути или имени запускаемой программы обязательно требуются кавычки

PROGRUNNERPATHHIDE.ZIP 659 байт (659 байт)
тоже самое но запускает окно в скрытом режиме

START.EXE "C:\MYPATH WITH SPACES\MYPROG.EXE" MYPARAMETR
START.EXE "C:\MYPATH WITH SPACES\MYPROG.EXE"
START.EXE C:\MYPATHWITHOUTSPACES\MYPROG.EXE MYPARAMETR

рабочий путь C:\MYPATH WITH SPACES или C:\MYPATHWITHOUTSPACES

если путь отсутсвует
START.EXE MYPROG.EXE MYPARAMETR
START.EXE MYPROG.EXE
тогда рабочая директория запускаемойпрограммы будет той же которая у START.EXE
Автор: getwellsoon
Дата сообщения: 06.08.2010 14:36
Извините за ламерский вопрос. Надо скомпилировать одну готовую программу, а она не хочет. На ассемблерном файле ругается "error A2070:invalid instruction operands", строка кода:
movd    mm1,[ecx+8]

Там полно ошибок на подобных строках кода. Компилируется ассемблером ml.exe. Заранее спасибо за ответ.
Автор: bomzzz
Дата сообщения: 06.08.2010 15:09
getwellsoon
я никогдане использовал movd, но вот тут глянь
http://forum.developing.ru/showthread.php?15448

Цитата:

Во-первых, multIn объявлен как unsigned char, т.е. 1 байт. Т.е. такая инструкция недопустима
Код :
movd mm5, multIn
В вашем случае можно сделать так
Код :
movzx eax, multIn
movd mm5, eax

Автор: getwellsoon
Дата сообщения: 06.08.2010 16:19
Напишу чуть подробнее. Код такой:

Код:
push ebp
push edi
push esi
push ebx

mov eax,count
shr eax,2
mov count,eax

mov eax,ARGB1_pointer
mov ebx,ARGB2_pointer
mov ecx,Y1_pointer
mov edx,Y2_pointer
mov esi,U_pointer
mov edi,V_pointer

xloop:
mov ebp,UV_up

prefetchnta [ecx+7]
prefetchnta [edx+7]

movd mm0,[esi] ;<- Здесь ругается "invalid instruction operands"
movd mm6,[esi+ebp] ;<- Здесь ругается "invalid instruction operands"
pavgb mm6,mm0
pavgb mm0,mm6
...
Автор: bomzzz
Дата сообщения: 06.08.2010 16:42
не самая посещаемая тема. по ассемблеру. есть более живые форумы не найду щас ссылок но гугла их легко найдет.
Автор: conty9
Дата сообщения: 06.08.2010 19:10
bomzzz, ну ты разошёлся!
По поводу ярлыков - давно сидит такая мыслишка (как ты, наверное, заметил, в Микре подобное сделано), но есть нюансы. Впрочем, в этой теме это оффтоп.
Ещё раз спасибо.
Автор: bomzzz
Дата сообщения: 06.08.2010 19:19


Добавлено:
так как старт.екзе не передающая путь - передает свой путь порождаемому процессу то впринципе задав ей любой рабочий путь можно и процессу любой задать.

Добавлено:
@ECHO OFF
CD C:\MYPATH\
C:\START\START.EXE MYPROG.EXE


для программы C:\MYPATH\MYPROG.EXE

Добавлено:
или в ярлыке тута

та которая путь передает тоже так будет работать, но еще и будет работать если рабочий путь не указать.
Автор: aspis
Дата сообщения: 07.08.2010 08:35
getwellsoon

Цитата:
movd mm1,[esi]

Все нормально компилируется под masm 10.
Для использования MMX расширений в начале ассемблерного файла необходимо указать директиву .mmx и иногда .586 или .686.

или так попробовать movd mm1, dword ptr [esi], если используете movd
movq mm1, qword ptr [esi] если используете movq

[more=Команды movd и movq]
movd
Перемещение двойного слова.
Действие: у команды есть несколько вариантов действий:
- если приемник является ММХ- или ХММ-регистром, в биты 0...31 приемника записывается значение источника, остальные биты приемника обнуляются;
- если приемник является 32-разрядной ячейкой памяти или регистром общего назначения, то в приемник записывается значение битов 0...31 источника (ММХ- или ХММ-рсгистра).

movq
Перемещение учетверенного слова.
Действие: у команды есть несколько вариантов действий:
- если приемник является ММХ-регистром, туда помещается значение источника — ММХ-регистра или 64-разрядной ячейки памяти;
- если приемник является 64-разрядной ячейкой памяти, то в разряды 0...63 приемника помещается содержимое разрядов 0...63 источника.
- если приемник и источник являются ХММ-регистрами, то в разряды 0...63 приемника помещается содержимое разрядов 0...63 источника, а разряды 64...127 приемника не изменяются.
- если источник является 64-разрядной ячейкой памяти, а приемник — ХММ-регистром, то в разряды 0...63 приемника помещается содержимое разрядов 0...63 источника, а в разряды 64...127 приемника - значение ООООООООООООООООН.
[/more]
Автор: getwellsoon
Дата сообщения: 07.08.2010 11:20
aspis
Спасибо! "dword ptr" помогло. Еще есть проблемы на след. строке "error A2022:instruction operands must be the same size":

Код:
SSE2_Ylow dq 000FF00FF00FF00FFh, 000FF00FF00FF00FFh
...
pand xmm3,SSE2_Ylow ;xmm4 = YE|YC|YA|Y8|Y6|Y4|Y2|Y0 <--!!!
Автор: aspis
Дата сообщения: 07.08.2010 14:29
getwellsoon
Регистры MMX расширения 64 битные и команда movd загружает 32 битное (4 байта или двойное слово DWORD), movq 64 битное (8 байт - учетверенное слово QWORD) значение, поэтому необходимо дополнительно указывать размер с помощью ptr (хотя под masm10 все нормально без дополнительных указаний компилировалось).

Код:
SSE2_Ylow dq 000FF00FF00FF00FFh, 000FF00FF00FF00FFh
...
pand xmm3,SSE2_Ylow ;xmm4 = YE|YC|YA|Y8|Y6|Y4|Y2|Y0 <--!!!
Автор: getwellsoon
Дата сообщения: 07.08.2010 15:34
aspis

Спасибо за помощь. Больше спрашивать не буду, а то, наверное, уже надоел. На ассемблере я давно программировал еще на i8080 процессоре. За современном состоянием ассемблерного языка давно не следил, за не надобностью. Оказалось, что жизнь идет своим чередом - много в ассемблере поменялось. Надо скилсы подтягивать.

Компилирую стандартным ассемблером в VS2008 SP1. Через Custom Build Step запускается строка "ml /nologo /c /coff /Zi /Fo"$(IntDir)\$(InputName).obj" "$(InputPath)"". По-идее должен запускаться Microsoft (R) Macro Assembler Version 9.00.30729.01. В "Visual Studio 2008 Command Prompt" когда набираю "ml", то он запускается.

Код:
C:\Program Files\Microsoft Visual Studio 9.0\VC>ml
Microsoft (R) Macro Assembler Version 9.00.30729.01
Copyright (C) Microsoft Corporation. All rights reserved.

usage: ML [ options ] filelist [ /link linkoptions]
Run "ML /help" or "ML /?" for more info

C:\Program Files\Microsoft Visual Studio 9.0\VC>ml /nologo /c /coff /Zi /Fo"C:\temp\a_yuv2rgb.obj" "c:\temp\a_yuv2rgb.asm"
Assembling: c:\temp\a_yuv2rgb.asm
c:\temp\a_yuv2rgb.asm(2012) : error A2022:instruction operands must be the same size
Автор: bomzzz
Дата сообщения: 07.08.2010 17:09
никому ты не надоел - тут не бывает никого. кто проффесионально програмирует у того вопросов не возникает. а так только студентов перед сесией наплыв небольшой
Автор: aspis
Дата сообщения: 07.08.2010 20:39
getwellsoon
Книжки я посоветовал именно для того, что там гораздо больше теории и, главное, примеров, чем тут можно написать (в книгах Ю. Магды так же есть много полезных примеров по использованию встроенного ассемблера в языках высокого уровня аля C++).

Я вообще эти примеры компилировал связкой RadASM (как IDE)+masm32 (компилятор)+OllyDbg (отладчик).
Для справки
Про RadASM можно тут почитать ru.wikipedia.org/wiki/RadASM; про masm32 тут http://www.masm32.com/masmdl.htm; про отладчик OllyDbg - http://www.ollydbg.de/

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384

Предыдущая тема: .NET GUI компоненты


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.