您的位置:逆风者 汇编技术 正文
原作者:www.upwinder.com 添加时间:2007-09-01 原文发表:2007-08-31 人气:40 来源:未知

本文章共1823字,分2页,当前第1页,快速翻页:
 

控制台输出就象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
);

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

;下面我们看一个程序,作用是显示一个字符串信息!

.386
.model flat,stdcall
option casemap:none

include windows.inc

include kernel32.inc
include user32.inc

includelib kernel32.lib
includelib user32.lib

.data
messdb 'How are you !',0;要显示的信息

.data?
StdOutdd ?;存放标准输出的把柄
CharOut dd ?;记录实际输出的字符数

.code
start:
invoke GetStdHandle,STD_OUTPUT_HANDLE ;获取标准输出的把柄
mov StdOut,eax;保存把柄号

lea eax,mess
invoke lstrlen,eax;求字符串的长度

lea ecx,CharOut
invoke WriteFile,StdOut,addr mess,eax,ecx,NULL;写文件

invoke ExitProcess,NULL ;程序结束
end start
--------------------------------------------------------------
编译链接,下面给出详尽的信息,供分析参考:
D:\MASM7>dir /ad

Volume in drive D has no label
Volume Serial Number is 18F0-186B
Directory of D:\MASM7

.〈DIR〉02-12-0317:36 .
.. 〈DIR〉02-12-0317:36 ..
LIB〈DIR〉 02-12-0317:38 LIB
INCLUDE〈DIR〉02-12-0317:38 INCLUDE
0 file(s)0 bytes
4 dir(s) 2,411,925,504 bytes free

D:\MASM7>ml /coff /I include 4.asm /link /subsystem:console /libpath:lib
Microsoft (R) Macro Assembler Version 6.14.8444 └─ 控制台程序
Copyright (C) Microsoft Corp 1981-1997.All rights reserved.

Assembling: 4.asm
Microsoft (R) Incremental Linker Version 5.12.8078
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.
 

本文章更多内容1 - 2 - 下一页>>
相关文章

列表视图控件
80386的中断和异常
修改文件操作
矛与盾的较量——CRC原理篇
移位指令在Win32消息处理中的一些问题
小试Win32汇编
客户寄存器结构
事件对象
扩展Int 13H调用规范
内存映射文件
在弹出菜单的同时再次弹出菜单
自己编程实现多引导
虚拟设备驱动程序初步
VxD 程序设计入门
Win32调试API 第一部分
树型视图控件
80386的异常类型
把数据写到代码段
5个DOS专用文件的6种io重定向,more实现管道
汇编中参数的传递和堆栈修正

相关评论


本文章所属分类:首页 汇编技术

  热门关键字:
进制数据输出的通用程序 2007-09-12
汇编源码--showmem 2007-08-31
汇编源码--CLEAN 2007-08-31
汇编源码--hdr 2007-08-31
汇编源码--basload 2007-08-31
汇编源码--CHAR 2007-08-31
汇编源码--fxn 2007-08-31
汇编源码--alarm 2007-08-31
汇编源码--getsect 2007-08-31
汇编源码--DEV 2007-08-31
汇编源码--getspace 2007-08-31
汇编源码--frespace 2007-08-31
CIH文件型病毒检测消除程序 2007-08-31
Mixer Volume Ctrler V1.0 2007-08-31
汇编源码--COMINT 2007-08-31
自己用汇编语言写的一个病毒(源码... 2007-08-31
汇编源码--col 2007-08-31
汇编源码--BURNOUT 2007-08-31