Сборка и Win32API ввод-вывод - PullRequest
       19

Сборка и Win32API ввод-вывод

1 голос
/ 30 ноября 2011

Я пытаюсь понять это, но немного озадачен.То, что я пытаюсь сделать, это использовать функции ReadConsole / WriteConsole из библиотеки win32 и заставить ее работать на степень, но только не там.У меня возникают проблемы с корректной работой второй консоли записи.Я не думаю, что я посылаю буфер в переменную справа.Я, должно быть, что-то здесь упускаю, и я не знаю, что это такое.Вот что у меня есть

TITLE MASM Template                     (main.asm)

  ; Description:
  ; 
   ; Revision date:

 INCLUDE Irvine32.inc
 BufSize = 80
 .data
  endl EQU <0dh,0ah>            ; end of line sequence

 ;variable holders
 firstN db ?
 fNSize db ($-firstN)

 ;messages for getting input
 fName LABEL BYTE
BYTE "Enter your first name", endl
 fNameSize DWORD ($-fName)

 ;output handlers
 consoleHandle HANDLE 0     ; handle to standard output device
 bytesWritten  DWORD ?      ; number of bytes written

 ;input handlers
 buffer BYTE BufSize DUP(?)
 stdInHandle HANDLE ?
 bytesRead   DWORD ?

 .code
 main PROC
 ; Get the console output handle:
    INVOKE GetStdHandle, STD_OUTPUT_HANDLE
  mov consoleHandle,eax

  ; Write a string to the console:
INVOKE WriteConsole,
  consoleHandle,        ; console output handle
  ADDR fName,           ; string pointer
  fNameSize,            ; string length
  ADDR bytesWritten,    ; returns num bytes written
  0                     ; not used

   ; Get handle to standard input
INVOKE GetStdHandle, STD_INPUT_HANDLE
   mov   stdInHandle,eax

   ; Wait for user input
 INVOKE ReadConsole, stdInHandle, ADDR buffer,
  BufSize, ADDR bytesRead, 0

 ;cheack to see if read consol worked
  mov esi, OFFSET buffer
  mov ecx, bytesRead
  mov ebx, TYPE buffer
  call DumpMem

 ;move the input into the variable
  mov firstN, TYPE  buffer



   ; Write a string to the console:
INVOKE WriteConsole,
  consoleHandle,        ; console output handle
  ADDR firstN,          ; string pointer
  fNSize,           ; string length
  ADDR bytesWritten,    ; returns num bytes written
  0                     ; not used


INVOKE ExitProcess,0
   main ENDP
  END main

Спасибо за любую помощь:)

1 Ответ

1 голос
/ 30 ноября 2011

firstN и fNSize - это каждый байт, а это не то, что вам нужно. Просто сделайте это для второго вызова WriteConsole:

INVOKE WriteConsole,
  consoleHandle,        ; console output handle
  ADDR buffer,          ; string pointer
  bytesRead,            ; string length
  ADDR bytesWritten,    ; returns num bytes written
  0                     ; not used
...