java readconsole_汇编语言ReadConsole函数:读取文本输入并将其送入缓冲区

函数 ReadConsole 为读取文本输入并将其送入缓冲区提供了便捷的方法。其原型如下所示:

ReadConsole PROTO,

hConsoleInput: HANDLE z                       ;输入句柄

lpBuffer:PTR BYTE,                                   ;缓冲区指针

nNumberOfCharsToRead:DWORD,         ;读取的字符数

lpNumberOfCharsRead:PTR DWORD,     ;指向读取字节数的指针

lpReserved:DWORD                                 ;未使用

hConsoleInput 是函数 GetStdHandle 返回的可用控制台输入句柄。参数 lpBuffer 是字符数组的偏移量。nNumberOfCharsToRead 是一个 32 位整数,指明读取的最大字符数。lpNumberOfCharsRead 是一个允许函数填充的双字指针,当函数返回时,字符数的计数值将被放入缓冲区。最后一个参数未使用,因此传递的值为 0。

在调用 ReadConsole 时,输入缓冲区还要包含两个额外的字节用来保存行结束字符。如果希望输入缓冲区里是空字节结束字符串,则用空字节来代替内容为 ODh 的字节。Irvine32.lib 的过程 ReadString 就是这样操作的。

注意:Win32 API 函数不会保存 EAX、EBX、ECX 和 EDX 寄存器。

【示例】要读取用户输入的字符,就调用 GetStdHandle 来获得控制台标准输入句柄,再使用该句柄调用 ReadConsoleo 下面的 ReadConsole 程序演示了这个方法。

提示:Win32 API 调用与 Irvine32 链接库兼容,因此在调用 Win32 函数的同时还可以调用 DumpRegs

; 从控制台读取 (ReadConsole.asm)

INCLUDE Irvine32.inc

BufSize = 80

.data

buffer BYTE BufSize DUP(?),0,0

stdInHandle HANDLE ?

bytesRead DWORD ?

.code

main PROC

; 获取标准输入句柄

INVOKE GetStdHandle, STD_INPUT_HANDLE

mov stdInHandle,eax

; 等待用户输入

INVOKE ReadConsole, stdInHandle, ADDR buffer,

BufSize, ADDR bytesRead, 0

; 显示缓冲区

mov esi,OFFSET buffer

mov ecx,bytesRead

mov ebx,TYPE buffer

call DumpMem

exit

main ENDP

END main

如果用户输入 “abcdefg”,程序将生成如下输出。缓冲区会插入 9 个字节:“abcdefg” 再加上 ODh 和 OAh,即用户按下 Enter 键时产生的行结束字符。bytesRead 等于 9:

9741e47e2f5039b4b45874a40a5d3f25.gif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值