Работа с файлами

Тема в разделе "WASM.BEGINNERS", создана пользователем kolombo, 23 дек 2007.

  1. kolombo

    kolombo New Member

    Публикаций:
    0
    Регистрация:
    23 дек 2007
    Сообщения:
    2
    Взял код из этой статьи http://www.wasm.ru/article.php?article=1001012
    Мне нужно практически тоже самое только надо подсчитать количество букв "a" в файле при открытии.
    Код (Text):
    1.                invoke CreateFile,ADDR buffer,\
    2.                                       GENERIC_READ or GENERIC_WRITE ,\
    3.                                        NULL,\
    4.                                        NULL,OPEN_EXISTING,NULL,\
    5.                                        NULL
    6.         mov hFile,eax
    7.         invoke GlobalAlloc,GMEM_MOVEABLE or GMEM_ZEROINIT,MEMSIZE
    8.         mov  hMemory,eax
    9.         invoke GlobalLock,hMemory
    10.         mov  pMemory,eax
    11.         invoke ReadFile,hFile,pMemory,MEMSIZE-1,ADDR SizeReadWrite,NULL
    После этого куска кода я пытался сделать, что-то вроде
    Код (Text):
    1.     .while SizeReadWrite > esi
    2.        mov al,byte ptr pMemory[esi]
    3.        cmp al, 61h
    4.        jne noninca
    5.               inc count
    6.         noninca:
    7.        inc esi
    8.     .endw
    однако безрезультатно. Буду очень признателен за помощь.
     
  2. zoool

    zoool New Member

    Публикаций:
    0
    Регистрация:
    1 дек 2007
    Сообщения:
    412
    mov esi, pBuf
    mov ecx,BufSize
    xor edx, edx
    @@:
    dec ecx
    jz @F
    lodsb
    cmp al, 'a' ;если строчные
    jnz @B
    inc edx
    jmp @B
    @@:
    ...
    тут в едх - число букафф
     
  3. kolombo

    kolombo New Member

    Публикаций:
    0
    Регистрация:
    23 дек 2007
    Сообщения:
    2
    Спасибо большое, если не трудно, то можно еще код, как лучше это число вывести с помощью MessageBox, наброски есть кое-какие, но может что-нибудь универсальное предложите.
     
  4. iceaxe

    iceaxe New Member

    Публикаций:
    0
    Регистрация:
    22 дек 2007
    Сообщения:
    14
    Привет kolombo!

    Держи код:
    Код (Text):
    1. .DATA
    2. ...
    3. szTitle     DB "Преобразованное число",0
    4. szFormat  DB "%u",0 ;Тип числа, в данном случае беззнаковое целое
    5. ...
    6.  
    7. .DATA?
    8. ...
    9. szBuff    DB 256 DUP (?) ;Ну можно и поменьше :)
    10. ...
    11. .CODE
    12. ...
    13.   mov edx,23456 ;Число какое-нибудь
    14.   INVOKE wsprintf,OFFSET szBuff,OFFSET szFormat,edx
    15.   INVOKE MessageBox,0,OFFSET szBuff,OFFSET szTitle,MB_OK
    16. ...
    Функция wsprintf экспортируется из user32.dll, легальная и документированная.
    Аналог sprintf из Си. Единственный недостаток - не поддерживает вещественные числа :dntknw:

    Удачи!