注册 登录
编程论坛 汇编论坛

汇编win32控制台如何清屏

网络小白 发布于 2016-07-14 18:20, 4341 次点击
刚学汇编,用汇编在控制台下写个电话薄,但是在控制台不知道怎么清屏,每次都输出好多。。。
3 回复
#2
zhulei19782016-07-14 19:31
直接向显存写数据啊,写入空格
#3
Valenciax2016-07-14 22:24
win32控制台不能像dos一样可以用int10,或者直接写显存。
以下是一个范例,它先显示四列字符串,呼叫ClearScreen子程后再显示第2串字符。
楼主的程式可以直接叫用ClearScreen。
用法:
invoke GetStdHandle,STD_OUTPUT_HANDLE ;取得控制台标准输出句柄
invoke ClearScreen,eax ;呼叫清屏子程序


程序代码:

include \masm32\include\masm32rt.inc
ClearScreen proto :Dword

.stack 500h
.data
.code
start:
    print "first string",10,13
    print "first string",10,13
    print "first string",10,13
    print "first string",10,13
    inkey " "
    invoke GetStdHandle,STD_OUTPUT_HANDLE ;取得控制台标准输出句柄
    invoke ClearScreen,eax ;呼叫清屏子程序
    print "second string after clear screen"
    inkey " "
    invoke  ExitProcess, 0

;---------------------------------------------------
ClearScreen  PROC    hConsole:HANDLE ;清屏子程序
        push    ebx
        push    edi
        mov     ebx,hConsole                  ;EBX = hConsole
        xor     edi,edi
        sub     esp,(sizeof CONSOLE_SCREEN_BUFFER_INFO+3) and -4
        INVOKE  GetConsoleScreenBufferInfo,ebx,esp
        movzx   eax,word ptr [esp].CONSOLE_SCREEN_BUFFER_INFO.dwSize.x
        movzx   edx,word ptr [esp].CONSOLE_SCREEN_BUFFER_INFO.dwSize.y
        mul     edx
        push    edx
        INVOKE  FillConsoleOutputCharacter,ebx,32,eax,edi,esp
        pop     eax
        movzx   edx,word ptr [esp].CONSOLE_SCREEN_BUFFER_INFO.wAttributes
        push    edx
        push    eax
        INVOKE  FillConsoleOutputAttribute,ebx,edx,eax,edi,esp
        INVOKE  SetConsoleCursorPosition,ebx,edi
        pop     ecx
        pop     edx
        xchg    eax,edi
        add     esp,(sizeof CONSOLE_SCREEN_BUFFER_INFO+3) and -4
        pop     edi
        pop     ebx
        ret     4

ClearScreen  ENDP
end start   


只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录


[此贴子已经被作者于2016-7-14 22:25编辑过]

#4
wookpecker2020-06-04 15:52
回复 3楼 Valenciax
能问下上面的代码是在什么编译器上运行的吗?
1