标题:汇编win32控制台如何清屏
只看楼主
网络小白
Rank: 2
等 级:论坛游民
帖 子:26
专家分:35
注 册:2014-9-13
结帖率:77.78%
已结贴  问题点数:20 回复次数:3 
汇编win32控制台如何清屏
刚学汇编,用汇编在控制台下写个电话薄,但是在控制台不知道怎么清屏,每次都输出好多。。。
搜索更多相关主题的帖子: 控制台 如何 电话 
2016-07-14 18:20
zhulei1978
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:53
帖 子:1351
专家分:1200
注 册:2006-12-17
得分:0 
直接向显存写数据啊,写入空格

其实我就是改变社会风气,提高少女素质,刺激电影市道,提高年轻人内涵,玉树临风,风度翩翩的整蛊专家,我名叫古晶,英文名叫JingKoo!
2016-07-14 19:31
Valenciax
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:11
帖 子:337
专家分:2462
注 册:2016-5-15
得分:10 
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编辑过]

2016-07-14 22:24
wookpecker
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2020-6-4
得分:0 
回复 3楼 Valenciax
能问下上面的代码是在什么编译器上运行的吗?
2020-06-04 15:52



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-466930-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.116576 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved