荔园在线
荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀
[回到开始]
[上一篇][下一篇]
发信人: Mic (不要变,行不行), 信区: Virus
标 题: 七、控制台Win32汇编语言程序
发信站: 荔园晨风BBS站 (Fri Jun 1 07:50:40 2001), 转信
运行在控制台(MS-DOS窗口)下,与DOS下的C语言程序十分相似,程序入口点是
main函数,使用标准C语言I/O函数进行I/O,也可以调用API。实际上控制台
Win32应用程序与普通Win32应用程序没有本质上的区别,标准C语言I/O函数实际
上还是调用了API,在控制台上进行I/O。控制台Win32汇编语言程序与C语言程序
有一定的差别,需要获取控制台I/O句柄,然后使用控制台I/O句柄进行I/O(与
文件句柄I/O相似),笔者以MASM 6.11中自带的控制台Win32汇编语言程序实例(
HELLO.ASM)为例,程序如下:
.386
.MODEL flat, stdcall
STD_OUTPUT_HANDLE EQU -11
GetStdHandle PROTO NEAR32 stdcall,
nStdHandle:DWORD
WriteFile PROTO NEAR32 stdcall,
hFile:DWORD, lpBuffer:NEAR32, nNumberOfBytesToWrite:DWORD,
lpNumberOfBytesWritten:NEAR32, lpOverlapped:NEAR32
ExitProcess PROTO NEAR32 stdcall,
dwExitCode:DWORD
.STACK 4096
.DATA
msg DB "Hello, world.", 13, 10
written DD 0
hStdOut DD 0
.CODE
_start:
INVOKE GetStdHandle,
STD_OUTPUT_HANDLE ; Standard output handle
mov hStdOut, eax
INVOKE WriteFile,
hStdOut, ; File handle for screen
NEAR32 PTR msg, ; Address of string
LENGTHOF msg, ; Length of string
NEAR32 PTR written, ; Bytes written
0 ; Overlapped mode
INVOKE ExitProcess,
0 ; Result code for parent process
PUBLIC _start
END
汇编连接本程序的命令如下:
ml /c /coff /Cp hello.asm
link /subsystem:console /entry:_start hello.obj kernel32.lib
连接命令中/subsystem:console选项表示连接器生成控制台Win32应用程序。在MS-
DOS窗口(控制台)下运行汇编连接后生成的HELLO.EXE文件,将会像MS-DOS程序一
样显示出“Hello, world.”字符串。
本程序调用了GetStdHandle函数获取标准控制台输出设备句柄,然后调用
WriteFile函数向标准控制台输出设备句柄写字符串,完成控制台字符串输出,最
好像有点多余,又一次回到了dos后调用了ExitProcess函数终止程序的执行。
--
┏─┓ ┏─┓ ┏─┓
│┏┴┓ │邪├┓ ┏─┓ ┏┴┓│
┗┤东├╮ ┗┬┛│ ┏┤西│ │毒├┛
┗─┛╰╮ ┗┬┛ │┗┬┛ ┗┬┛
╭╭──────╯╭╭──╯ ┗─┛ ╰──╯ Mic@virus
╰╰────────╰──────────── ────────── ─ ─
※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.28.108]
[回到开始]
[上一篇][下一篇]
荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店