荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: 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软件 网络书店