Board.KolibriOS.org

Официальный форум KolibriOS
Текущее время: Чт июл 27, 2017 11:39 am

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 2 сообщения ] 
Автор Сообщение
СообщениеДобавлено: Чт сен 12, 2013 11:29 pm 
Не в сети
KSoC/GSoC Student

Зарегистрирован: Ср июл 11, 2012 3:17 am
Сообщения: 224
Писалось для своих нужд, возможно кому-то будет полезным.
http://board.kolibrios.org/download/file.php?id=5166
Полезные мелочи:
- пути могут содержать любое количество пробелов (но не табов)
- пробелы в параметрах типа "my folder/file.me" не учитываются и считаются за один параметр




Функции:


__get_param_count - возвращает общее количество параметров
Код:
на входе: esi -> указатель на строку с параметрами
на выходе: eax -> число параметров
портит: eax

__get_param_str - возвращает параметр по порядковому номеру
Код:
на входе: esi -> указатель на строку с параметрами
на входе: eax -> порядковый номер параметра, который требуется вернуть
на выходе: eax -> длина в символах возвращаемого параметра
на выходе: edx -> указатель на буффер в который записан параметр
портит: eax,edx


Применение:


example.asm
Код:
  use32
  org    0x0

  db    'MENUET01'
  dd    0x01
  dd    START
  dd    I_END
  dd    0x1000
  dd    0x1000
  dd    APP_PARAM  ; ----> ! ВАЖНО
  dd    0x0

START:
    mov     esi, APP_PARAM ; строка с параметрами
    call  __get_param_count ; вызываем функцию
    mov     [count],eax ; получили в eax общее количество переданных параметров

    mov     esi, APP_PARAM ; строка с параметрами (необязательно, т.к. esi не испорчен)
    mov     eax,2 ; просим вернуть 2 параметр ввиде строки
    call  __get_param_str ; вызываем функцию
    mov     [paramlen],eax; получили длину символов 2го параметра
    ; edx - хранит указатель на строку (256 byte), которую впринципе можно вывести через 4ю функцию
    ;...
    ;...
    include "getparam.asm";
    ;...
    ;...

    APP_PARAM dd 256 dup(0)
    count    dd 0
    paramlen    dd 0

getparam.asm
Код:
    GP_BUFF_SIZE equ 64 ; максимальная длина возвращаемого параметра (одного) 64*4 (dd) = 256 байт


Примеры:


Код:
example.bin   /a   /b="immortal/good.png" /t="sys/my folder/1.png"    +O -Y  #23
__get_param_count вернет: 6
__get_param_str вернет:
 /a
 /b="immortal/good.png"
 /t="sys/my folder/1.png"
 +O
 -Y
 #23


Планы:


__get_param_type - возвращает типы
- строка (/t) (+IO) (time)
- структура (a=****)
- путь (".....")
- целочисленное (5)
- дробное (2.71)
- hex (0x0...)
__get_param_name - возвращает имя параметра если его тип "структура"
__get_param_value - возвращает значение параметра если его тип "структура"
color=0x000000 - ( color - имя, 0x000000 - значение)
Изображение


Вложения:
getparam.zip [2.25 КБ]
150 скачиваний
Вернуться к началу
СообщениеДобавлено: Пт сен 13, 2013 12:23 am 
Не в сети

Зарегистрирован: Вс окт 30, 2011 6:43 pm
Сообщения: 930
Похоже на результат работы самодельного транслятора.
Код:
    dec     eax                 ; get path length

    cmp     eax,0               ; length = 0
    je      loc_gpc_end         ; goto exit

Тут cmp не нужно — dec воздействует на zero-flag.

Цитата:
Планы:

__get_param_type - возвращает типы
Как ты будешь строку 0123 отличать от числа 0123?

Кстати, вместе с masm32 поставляется что-то похожее(файл masm32\M32LIB\CLARGS.ASM).


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 2 сообщения ] 

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB