主题:win32汇编如果我想控制台输出HELLO WORLD,也要用DOS中断吗?
llydd
[专家分:200] 发布于 2006-10-02 23:11:00
win32汇编如果我想控制台输出HELLO WORLD,也要用DOS中断吗?
回复列表 (共6个回复)
沙发
chenzep [专家分:3640] 发布于 2006-10-02 23:44:00
用API,具体的去www.aogosfot.com学习.
板凳
xabcxyz [专家分:940] 发布于 2006-10-03 09:07:00
可以用
3 楼
XCHG [专家分:0] 发布于 2006-10-05 19:13:00
不能用,用api
4 楼
oppenheimar [专家分:0] 发布于 2006-10-18 07:09:00
请问一下
win32下是否可以调用中断?
据说可以
怎么实现的?
5 楼
cnhanxiao [专家分:450] 发布于 2006-10-22 01:57:00
可以使用DOS中断,但是绝对不建议使用!因为控制台已经是32位模式了,为什么还要调用VM86模式的DOS中断呢?请使用Win32 API!示例程序:
;文件名:Hello.ASM
.586p
.model flat,stdcall ;平面内存模式,标准调用规则(C调用入栈顺序,Pascal的被调用者清栈)
;Win32 API
extrn FreeConsole:proc
extrn AllocConsole:proc
extrn SetConsoleTitleA:proc
extrn GetStdHandle:proc
extrn ExitProcess:proc
extrn WriteConsoleA:proc
extrn CloseHandle:proc
NULL equ 0
STD_OUTPUT_HANDLE equ -11
.data
Caption db 'Test',0 ;控制台标题
text db ' Hello, The Console With Win32 !',0Dh,0Ah,0 ;显示的信息
textlen equ $-text-1
align 4
hStdout dd ?
tmp dd ?
.code
main: ;call FreeConsole ;不继承已有控制台(加上此句下面则分配新控制台)
call AllocConsole ;分配控制台(无上句则继承,若无可继承则分配新的)
;
call SetConsoleTitleA,offset Caption ;设置或改变控制台标题
call GetStdHandle,STD_OUTPUT_HANDLE ;获取标准输出句柄
mov hStdout,eax
call WriteConsoleA,hStdout,offset text,textlen,offset tmp,NULL ;显示
;
exit: call CloseHandle,hStdout ;关闭控制台标准输出句柄
call ExitProcess,0
;
end main
上面的程序在TASM5.0下编译链接,MAKEFILE文件内容如下:
NAME = Hello
OBJS = $(NAME).obj
IMPORT=$(MAKEDIR)\..\lib\import32.lib
$(NAME).EXE: $(OBJS) $(DEF)
tlink32 /Tpe /ap /c /V4.0 $(OBJS),$(NAME),, $(IMPORT),
.asm.obj:
tasm32 /ml $&.asm
6 楼
StarsunYzL [专家分:100] 发布于 2006-10-22 18:10:00
在masm32.inc里好像有个Stdin,Stdout可以向控制台输出
我来回复