The following Scroll.asm program writes 50 lines of text to the screen buffer. It then resizes
and repositions the console window, effectively scrolling the text backward. It uses the
SetConsoleWindowInfo function:
TITLE Scrolling the Console Window (Scroll.asm) INCLUDE Irvine32.inc .data message BYTE ": This line of text was written " BYTE "to the screen buffer",0dh,0ah messageSize DWORD ($-message) outHandle HANDLE 0 ; standard output handle bytesWritten DWORD ? ; number of bytes written lineNum DWORD 0 windowRect SMALL_RECT <0,0,60,11> ; left,top,right,bottom .code main PROC INVOKE GetStdHandle, STD_OUTPUT_HANDLE mov outHandle,eax .REPEAT mov eax,lineNum call WriteDec ; display each line number INVOKE WriteConsole, outHandle, ; console output handle ADDR message, ; string pointer messageSize, ; string length ADDR bytesWritten, ; returns num bytes written 0 ; not used inc lineNum ; next line number .UNTIL lineNum > 50 ; Resize and reposition the console window relative to the ; screen buffer. INVOKE SetConsoleWindowInfo, outHandle, TRUE, ADDR windowRect ; window rectangle call Readchar ; wait for a key call Clrscr ; clear the screen buffer call Readchar ; wait for a second key INVOKE ExitProcess,0 main ENDP END main
It is best to run this program directly from MS-Windows Explorer or a command prompt rather
than an integrated editor environment. Otherwise, the editor may affect the behavior and appearance
of the console window. You must press a key twice at the end: once to clear the screen
buffer and a second time to end the program.