回 帖 发 新 帖 刷新版面

主题:win32汇编如果我想控制台输出HELLO WORLD,也要用DOS中断吗?

win32汇编如果我想控制台输出HELLO WORLD,也要用DOS中断吗? 

回复列表 (共6个回复)

沙发

用API,具体的去www.aogosfot.com学习.

板凳

可以用

3 楼


不能用,用api

4 楼

请问一下
win32下是否可以调用中断?
据说可以
怎么实现的?

5 楼


可以使用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 楼

在masm32.inc里好像有个Stdin,Stdout可以向控制台输出

我来回复

您尚未登录,请登录后再回复。点此登录或注册