поиск в асме

Тема в разделе "WASM.BEGINNERS", создана пользователем giskar, 4 авг 2007.

  1. roman_pro

    roman_pro New Member

    Публикаций:
    0
    Регистрация:
    9 фев 2007
    Сообщения:
    291
    По поводу рекурсии - имхо данная задача решается с её помощью проще (и зачастую всё отлично работает), однако реально напарывался на случай переполнения стека (большое количество файлов и очень длинные пути к ним).

    Что касаемо приведённого кода - хоть в асме и не силён, думается в коде те же грабли, на которые наступал сам: (находились не все файлы с данным расширением)

    Код (Text):
    1. cmp     dword ptr [ebp-118h+eax-4],'txt.'               ; Проыерим расширение файла
    расширение файла на винте может быть и таким: .TXT, .tXt, .TxT и т.д., поэтому сравнение лучше заменить, например, на вызов lstrcmpi
     
  2. giskar

    giskar New Member

    Публикаций:
    0
    Регистрация:
    2 авг 2007
    Сообщения:
    43
    хорошо, слинковал. Он выдаёт после линковки:"LINK: warning L4017: /subsystem: unrecognized option name; option ignored"

    далее появляется Run File [windows.exe]:

    што делать, подскажите
     
  3. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
    а версия линкера какая?
     
  4. giskar

    giskar New Member

    Публикаций:
    0
    Регистрация:
    2 авг 2007
    Сообщения:
    43
    написано версия 5.31
     
  5. nitrotoluol

    nitrotoluol New Member

    Публикаций:
    0
    Регистрация:
    5 сен 2006
    Сообщения:
    848
    \masm32\bin\Link /SUBSYSTEM:WINDOWS /OPT:NOREF dd.obj
    линковка
     
  6. giskar

    giskar New Member

    Публикаций:
    0
    Регистрация:
    2 авг 2007
    Сообщения:
    43
    спасибо. работает
     
  7. giskar

    giskar New Member

    Публикаций:
    0
    Регистрация:
    2 авг 2007
    Сообщения:
    43
    товарищи, ещё такой вопрос, подскажите что делать. вот код:
    Код (Text):
    1. ; определение диска по умолчанию
    2. ; с помощью функции 19h
    3.  
    4. .model small
    5.  
    6. .stack 100h
    7.  
    8. .data
    9. mes db "po umolchaniu dick C:$"
    10. mes1 db "po umolchniu stoit drugoi disk (ne c:)$"
    11. ha dw 0FFFFh
    12. mes2 db "cf=1 , dx ne raven nulu$"
    13.  
    14. .data?
    15. wax dd ?
    16.  
    17. .code
    18. sc proc
    19.      mov ah,9
    20.      int 21h
    21.  
    22. ret
    23. sc endp
    24.  
    25. main:
    26. mov ax,@data
    27. mov ds,ax
    28.  
    29.  
    30. mov ah,19h
    31. int 21h
    32. jc exit
    33.  
    34. cmp al,02                ; в al - диск, стоящий по умолчанию (00- A:  ;  01 - B: ; 02 - С: и т.д.)
    35. jne pul
    36. mov dx,offset mes
    37. call sc
    38.  
    39. mov ah,36h
    40. mov dl,al
    41. int 21h
    42.  
    43. cmp ax,ha ; если ax=0FFFFh , то выходим
    44. jc exit
    45.  
    46.                ;если нет, то в
    47.                ; ax - число секторов в одном кластере
    48.                ; bx - количество свободных кластеров
    49.                ; cx - размер сектора в байтах
    50.                ; dx - общее число кластеров на диске
    51.    
    52. mul bx
    53. mov word ptr wax,ax
    54. mov word ptr wax+2,dx
    55.  
    56. mov eax,wax               ;всё дело в этом
    57.  
    58. jc exit
    59.  
    60. mov dx,offset mes2
    61. call sc
    62.  
    63.  
    64.  
    65. jmp exit
    66.  
    67. pul:
    68.      mov dx,offset mes1
    69.      call sc
    70.    
    71. exit:
    72.      mov ah,10h
    73.      int 16h
    74.  
    75.      mov ax,4c00h
    76.      int 21h
    77.      
    78. end main
    при ассемблировании выдаёт вот какую ошибку: "error A2085: instruction or register not accepted in current CPU mode". Я знаю, что всё дело в этой команде - mov eax,wax. Я так понимаю это из-за 32-хразрядных регистров. Объясните что делать, пожалста
     
  8. nitrotoluol

    nitrotoluol New Member

    Публикаций:
    0
    Регистрация:
    5 сен 2006
    Сообщения:
    848
    giskar
    ты че творишь???
    это 16-ти битная дос-программа!!!
    в виндовс она работать не будет!
     
  9. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    giskar
    Напиши так
    Код (Text):
    1. ...
    2. .386
    3. mov eax,wax               ;всё дело в этом
    4. .8086
    5. ...
     
  10. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    Можно обосновать? И не зачем всегда кричать.
     
  11. giskar

    giskar New Member

    Публикаций:
    0
    Регистрация:
    2 авг 2007
    Сообщения:
    43
    ага, работает. спасибо
     
  12. giskar

    giskar New Member

    Публикаций:
    0
    Регистрация:
    2 авг 2007
    Сообщения:
    43
    я в сметении. Объясните пожалуста в чем преимущество API функций? вот две проги. Выполняют одно и тоже - создают текстовый файл, но одна весит 1Кб, а другая 28Кб(!!):
    Код (Text):
    1. cseg segment
    2. org 100h
    3.  
    4. begin:
    5. mov ah,3Ch 
    6. xor cx,cx  
    7. mov dx,offset my_file  
    8. int 21h
    9.  
    10. int 20h
    11.  
    12. my_file db 'uu.txt',0
    13.  
    14. cseg ends
    15. end begin
    Код (Text):
    1. .486
    2. .model flat,stdcall
    3. option casemap:none
    4.  
    5. include \masm32\include\kernel32.inc
    6.  
    7. .data
    8. mes db 'opa.txt',0
    9. handle dd ?
    10.  
    11. .code
    12. main:
    13.  
    14. invoke CreateFile, addr mes, 80000000h,3h, 0, 1, 80h,0
    15.  
    16. mov handle,eax
    17.  
    18. invoke ExitProcess,eax
    19.  
    20. end main
    так в чем же преимущество API?
     
  13. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Встречный вопрос: китаец, русский и европеец выполняют одно и то же - например, метут улицу, одному платят условно 10$, второму 100$, третьему 1000$ (!!). Так в чем же преимущество хваленой западной демократии ? :lol:
     
  14. nitrotoluol

    nitrotoluol New Member

    Публикаций:
    0
    Регистрация:
    5 сен 2006
    Сообщения:
    848
    censored
    А то что человеку нужен поисковик под Вынь32.
    Какой может быть small и int 21h в виндовс NT??
    Смотрим последний пост топикстартера...
     
  15. Aspire

    Aspire New Member

    Публикаций:
    0
    Регистрация:
    19 май 2007
    Сообщения:
    1.028
    Я тоже в сметении... Специально даже скомпилил второй кусок кода. Получил экзешник в 656 байт. А каким образом у тебя там получилось 28 кб ???
     
  16. giskar

    giskar New Member

    Публикаций:
    0
    Регистрация:
    2 авг 2007
    Сообщения:
    43
    ну да, я как раз об этом. Так што же? Помоему китайцу платить выгоднее:)
     
  17. giskar

    giskar New Member

    Публикаций:
    0
    Регистрация:
    2 авг 2007
    Сообщения:
    43
    помогите пожалуста, не могу правильно воспользоваться функцией SearchPath, наверно чё то не так делаю:
    Код (Text):
    1. .386                          
    2. .model  flat,stdcall
    3. option casemap:none  
    4.                  
    5. include \masm32\include\user32.inc
    6. include \masm32\include\kernel32.inc
    7. includelib \masm32\lib\user32.lib
    8.  
    9. .data
    10. buf db 20 dup(?)
    11. nbuf=$-buf
    12. disk db 'c:\',0
    13. mes db 'J.com',0
    14. mes1 db "fail naiden",0
    15.  
    16. .code
    17. main:
    18. invoke SearchPath, disk, addr mes, 0,nbuf, addr buf,nbuf
    19.  
    20. cmp eax,0
    21. jne sc
    22.  
    23. gi:
    24. invoke ExitProcess,0
    25.  
    26. sc:
    27. invoke MessageBox,0,0,addr mes1,0
    28. jmp gi
    29.  
    30. end main
     
  18. giskar

    giskar New Member

    Публикаций:
    0
    Регистрация:
    2 авг 2007
    Сообщения:
    43
    всё, уже разобрался