首页
社区
课程
招聘
关于汇编的问题
发表于: 2005-7-13 11:08 5710

关于汇编的问题

2005-7-13 11:08
5710
小弟最近写WIN32汇编,想在DOS窗口打印一些文本,可是不知道怎么打印,不再知道应该怎么办。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 217
活跃值: (99)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
最简单的方法是调用msvcrt.printf
直接用Win32API的话建议参考一下MSDN,使用起来比较麻烦.
2005-7-13 11:13
0
雪    币: 442
活跃值: (107)
能力值: ( LV9,RANK:350 )
在线值:
发帖
回帖
粉丝
3
你的意思是在控制台中输出或输入字符么?
有现成的函数,可以看偶写的相关的代码:

.386
.model flat,stdcall
option casemap :none

include                i:\masm32\include\windows.inc
include         i:\masm32\include\user32.inc
include         i:\masm32\include\kernel32.inc
includelib        i:\masm32\lib\user32.lib
includelib        i:\masm32\lib\kernel32.lib

        .const
szinput                db        '输入加数(0-99):',0
szend                db        '结果是 :  %d',0
szexit                db        '按任意键退出...',0

        .data?
num0                dw        ?
num1                dw        ?
actread                dd        ?
hstdin                dd        ?
hstdout                dd        ?
buf                db        256        dup(?)
bufc                db        256        dup(?)

        .code
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
change        proc        _addrnum

        pushad
        push        eax
        shr        eax,8
        push        eax
       
        pop        eax
        .if        al==0dh
                pop        eax
                and        eax,0ffh
                sub        al,30h
                mov        edx,_addrnum
                mov        word ptr ds:[edx],ax
        .else
                pop        eax
                sub        ax,3030h
                mov        bx,ax
                mov        cl,10
                mul        cl
                shr        bx,8
                add        ax,bx
                mov        edx,_addrnum
                mov        word ptr ds:[edx],ax
        .endif

        popad
        ret

change        endp
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
start:
        invoke        GetStdHandle,STD_INPUT_HANDLE
        mov        hstdin,eax
        invoke        GetStdHandle,STD_OUTPUT_HANDLE
        mov        hstdout,eax

        invoke        lstrlen,addr szinput
        invoke        WriteConsole,hstdout,offset szinput,eax,NULL,NULL
        invoke        ReadConsole,hstdin,offset bufc,20,offset actread,NULL
        mov        eax,dword ptr bufc[0]
        and        eax,0ffffh
       
        invoke        change,addr num0

        invoke        lstrlen,addr szinput
        invoke        WriteConsole,hstdout,offset szinput,eax,NULL,NULL
        invoke        ReadConsole,hstdin,offset bufc,20,offset actread,NULL
        mov        eax,dword ptr bufc[0]
        and        eax,0ffffh
       
        invoke        change,addr num1

        xor          eax,eax
        mov        ax,num0
        add        ax,num1

        invoke         wsprintf,addr buf,offset szend,eax,eax
        invoke        WriteConsole,hstdout,offset buf,16,NULL,NULL
       
        invoke        lstrlen,addr szexit
        invoke        WriteConsole,hstdout,offset szexit,eax,NULL,NULL
        invoke        ReadConsole,hstdin,offset bufc,20,offset actread,NULL

        invoke        CloseHandle,hstdin
        invoke        CloseHandle,hstdout
       
        invoke        ExitProcess,NULL
end        start

win 2000 + masm32v8.2 运行成功。
2005-7-26 19:36
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
程序是不是缺了一些东西啊,你控制台还没有建立,那你用GetStdHandle能得到标准输入,输出的句柄吗??????
应该在start处加上invoke AllocConsole 程序才ok!!!
2005-7-30 07:06
0
游客
登录 | 注册 方可回帖
返回
//