Как перечислить числа, прочитанные из текстового файла - PullRequest
0 голосов
/ 04 апреля 2019

У меня есть файл .txt, который состоит из нескольких чисел, например 5123453479. Их нужно прочитать из этого файла, а затем найти их сумму. Мой код для чтения файлов работает нормально. Проблема в том, что я не могу получить определенный элемент из этого буфера. Допустим, я хочу получить индекс 2 из буфера (5123453479), который номер 2.

lea edx, buffer[2]
push edx
call StdOut

Код выше возвращает 123453479 вместо 2.

Это весь код:

include \masm32\include\masm32rt.inc

Main PROTO

.data
  newLine db 10, 13, 0

  txtFilter db "*.txt", 0

  txtFD WIN32_FIND_DATA <>
  txtHandle HANDLE ?
  fHandle HANDLE ?

  bufferLength dd ?
  buffer db 5000 dup(?)
  lnt dd 1024

  error db "Error!", 0

.code

start:
  invoke Main
  invoke ExitProcess, 0

Main proc
  ; Find first .txt file in current directory
  push offset txtFD
  push offset txtFilter
  call FindFirstFile

  mov txtHandle, eax

  ; Print current file name
  push offset txtFD.cFileName
  call StdOut

  ; Print a newline
  push offset newLine
  call StdOut

  ; Open file
  push 0                          ; HANDLE    hTemplateFile
  push FILE_ATTRIBUTE_NORMAL      ; DWORD     dwFlagsAndAttributes
  push OPEN_EXISTING              ; DWORD     dwCreationDisposition
  push 0                          ; LPSECURITY_ATTRIBUTES lpSecurityAttributes
  push 0                          ; DWORD     dwShareMode
  push GENERIC_READ               ; DWORD     dwDesiredAccess
  push offset txtFD.cFileName     ; LPCTSTR   lpFileName,
  call CreateFile

  .if eax == INVALID_HANDLE_VALUE
      jmp _error
  .else
      mov fHandle, eax
  .endif

  push 0                          ; LPOVERLAPPED lpOverlapped
  push offset bufferLength        ; LPDWORD   lpNumberOfBytesRead
  push lnt                        ; DWORD     nNumberOfBytesToRead
  push offset buffer              ; LPVOID    lpBuffer
  push fHandle                    ; HANDLE    hFile
  call ReadFile

  jmp _next

_error:
  push offset error
  call StdOut
  jmp _next

_next:
  ; Print text from file
  push offset buffer
  call StdOut

  ; Print a newline
  push offset newLine
  call StdOut

  ; Faulty code here
  lea edx, buffer[2]
  push edx
  call StdOut

  ; Close a file handle
  push fHandle
  call CloseHandle

  ; Close a handle
  push txtHandle
  call FindClose

  ret
Main endp

end start

Выход:

test.txt
5123453479
123453479

buffer[2] неправильно. В настоящее время я просто хочу перечислить номер буфера по номеру, чтобы, наконец, я мог суммировать числа. Как я мог это сделать?

...