| 网站首页 | 文章中心 | 电子书下载 | 矢量图库 | 视频教程 | 素材下载 | 程序代码下载 | JS代码 | 论坛 | 
常用软件类:
|杀毒安全 |联络聊天 |网络软件 |多媒体类 |系统工具 |图形图像 |系统工具 |应用软件 |行业软件
开发设计类:
|动画制作 |图像处理 |3D设计 |操作系统 |站长学院 |网络相关 |WEB设计 |数据库类 |程序开发
汇编技巧Windows下控制台输出
作者:佚名    文章来源:网络    点击数:    更新时间:2006-12-9
 

 控制台输出就象dos下的输出,可不是图形界面。象ping/ipconfig/ftp等命令都是这类程序。

    回忆过去,在dos下进行文件操作时,常用到“文件把柄”的概念,使用文件把柄操作时,非常方便,操作时,只要知道把柄号就可以,而不用操心文件的位置。dos下,设备也都有自己的专用把柄,这些把柄是:
    0000H  标准输入设备 (stdin)
    0001H  标准输出设备 (stdout)
    0002H  标准错误设备 (stderr)
    0003H  标准辅助设备 (stdaux)
    0004H  标准打印设备 (stdprn)

    stdin和stdout可以被再定向,dos下常用的“输入改向”和“输出改向”就是这个意思。

    下面的dos功能调用中将向屏幕输出信息:
        mov ah,40h      ;写到文件或设备
        mov bx,1        ;标准输出设备
        lea dx,OutData  ;DS:DX->要输出的数据
        mov cx,Count    ;要输出字符的个数
        int 21h         ;执行dos功能调用
        
    利用同样的道理,在windows下,也可向屏幕输出信息。这要用到两个Api函数,一个是GetStdHandle,另一个是WriteFile,在Win32 developer’s References中它们是这样定义的:
------------------------------------------------------------
HANDLE GetStdHandle(
    DWORD nStdHandle    // input, output, or error device
    );  

    The GetStdHandle function returns a handle for the standard input, standard output, or standard error device. 

nStdHandle->Specifies the device for which to return the handle. This parameter can have one of the following values: 
        Value               |   Meaning
        --------------------+---------------------------
        STD_INPUT_HANDLE    |   Standard input handle
        STD_OUTPUT_HANDLE   |   Standard output handle
        STD_ERROR_HANDLE    |   Standard error handle

If the function succeeds, the return value is a handle of the specified device.
------------------------------------------------------------
BOOL WriteFile(
    HANDLE hFile,       // handle to file to write to
    LPCVOID lpBuffer,   // pointer to data to write to file
    DWORD nNumberOfBytesToWrite,        // number of bytes to write
    LPDWORD lpNumberOfBytesWritten,     // pointer to number of bytes written
    LPOVERLAPPED lpOverlapped   // pointer to structure needed for overlapped I/O
    );  

=============================================================

[1] [2] 下一页


相关文章