News:

Masm32 SDK description, downloads and other helpful links
Message to All Guests

Main Menu

AN OLD STYLE ASSEMBLY FILE?

Started by felipe, May 28, 2018, 10:32:28 AM

Previous topic - Next topic

felipe

I mean, using uppercase in the source file (everywhere possible... :P). Btw, the Upper Case feature from Qeditor (from the 64 package) works just fine Hutch  :icon14:!


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; THIS FILE WAS STARTED BY FELIPE AT 2018-05-17.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;===============================================
OPTION  CASEMAP:NONE
INCLUDE \MASM32\INCLUDE64\WIN64.INC
INCLUDE \MASM32\INCLUDE64\KERNEL32.INC
INCLUDELIB  \MASM32\LIB64\KERNEL32.LIB
;===============================================

;=====================================================
_DATA SEGMENT PARA  'DATA'
CONSOLE_TITLE BYTE  'USING THE CONSOLE CAN BE FUN!',0
THE_MSG       BYTE  'YES! IS TRUE!'
INBUFF        BYTE  256 DUP(' ')
CHRSWRIT      DWORD ?
CHRSREAD      DWORD ?
_DATA ENDS
;=====================================================

;================================================================================
_TEXT SEGMENT PARA  'CODE'
START PROC
      SUB   RSP,28H
     
      CALL  AllocConsole

      MOV   RCX,GENERIC_READ OR GENERIC_WRITE
      MOV   RDX,FILE_SHARE_READ OR FILE_SHARE_WRITE
      MOV   R8,NULL
      MOV   R9,CONSOLE_TEXTMODE_BUFFER
      MOV   DWORD PTR[RSP+20H],NULL
      CALL  CreateConsoleScreenBuffer

      MOV   R15,RAX                   ; STDOUT.

      LEA   RCX,CONSOLE_TITLE
      CALL  SetConsoleTitle

      MOV   RCX,0000000000500019H     ; 80 COLUMNS AND 25 ROWS.
      MOV   RDX,R15                   ; STDOUT.
      CALL  SetConsoleScreenBufferSize

      MOV   RCX,R15                   ; STDOUT.
      MOV   RDX,FOREGROUND_BLUE OR FOREGROUND_GREEN OR BACKGROUND_BLUE
      CALL  SetConsoleTextAttribute

      MOV   RCX,R15                   ; STDOUT.
      LEA   RDX,THE_MSG
      MOV   R8,SIZEOF THE_MSG
      LEA   R9,CHRSWRIT
      MOV   DWORD PTR[RSP+20H],NULL
      CALL  WriteConsole

      MOV   RCX,R15                   ; STDOUT.
      CALL  SetConsoleActiveScreenBuffer

      MOV   RCX,STD_INPUT_HANDLE
      CALL  GetStdHandle

      MOV   RCX,RAX                   ; STDIN.
      LEA   RDX,INBUFF
      MOV   R8,SIZEOF INBUFF
      LEA   R9,CHRSREAD
      MOV   DWORD PTR[RSP+20H],NULL
      CALL  ReadConsole

      MOV   RCX,R15                   ; STDOUT.
      CALL  CloseHandle               ; THE END OF THE CONSOLE SCREEN BUFFER.

      CALL  FreeConsole

      XOR   RCX,RCX
      CALL  ExitProcess
START ENDP
_TEXT ENDS
;=====================================================================================
      END


.exe attached.
What is funny (i didn't knew that  :redface:) is that you can write, then press esc key, then write again, then press esc key, etc...Esc key here deletes what you type... :shock:
Program terminates closing the window or by pressing enter key  :idea:.

felipe

Quote from: felipe on May 28, 2018, 10:32:28 AM

      MOV   RCX,0000000000500019H     ; 80 COLUMNS AND 25 ROWS.



::) There's an error here...I forgotten the little endianness... This screen buffer size is actually 25 columns x 80 rows... :redface:

felipe

 :idea: As you can see here:


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; THIS FILE WAS STARTED BY FELIPE AT 2018-05-17.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;===============================================
OPTION  CASEMAP:NONE
INCLUDE \MASM32\INCLUDE64\WIN64.INC
INCLUDE \MASM32\INCLUDE64\KERNEL32.INC
INCLUDELIB  \MASM32\LIB64\KERNEL32.LIB
;===============================================

;=====================================================
_DATA SEGMENT PARA  'DATA'
CONSOLE_TITLE BYTE  'USING THE CONSOLE CAN BE FUN!',0
THE_MSG       BYTE  'YES! IS TRUE!'
INBUFF        BYTE  256 DUP(' ')
CHRSWRIT      DWORD ?
CHRSREAD      DWORD ?
_DATA ENDS
;=====================================================

;================================================================================
_TEXT SEGMENT PARA  'CODE'
START PROC
      SUB   RSP,28H
     
      CALL  AllocConsole

      MOV   RCX,GENERIC_READ OR GENERIC_WRITE
      MOV   RDX,FILE_SHARE_READ OR FILE_SHARE_WRITE
      MOV   R8,NULL
      MOV   R9,CONSOLE_TEXTMODE_BUFFER
      MOV   DWORD PTR[RSP+20H],NULL
      CALL  CreateConsoleScreenBuffer

      MOV   R15,RAX                   ; STDOUT.

      LEA   RCX,CONSOLE_TITLE
      CALL  SetConsoleTitle

      MOV   RCX,0000000000500019H     ; 80 COLUMNS AND 25 ROWS. (**WRONG, MUST BE 00190050H**)
      MOV   RDX,R15                   ; STDOUT.
      CALL  SetConsoleScreenBufferSize

      MOV   RCX,R15                   ; STDOUT.
      MOV   RDX,FOREGROUND_BLUE OR FOREGROUND_GREEN OR BACKGROUND_BLUE
      CALL  SetConsoleTextAttribute

      MOV   RCX,R15                   ; STDOUT.
      LEA   RDX,THE_MSG
      MOV   R8,SIZEOF THE_MSG
      LEA   R9,CHRSWRIT
      MOV   DWORD PTR[RSP+20H],NULL
      CALL  WriteConsole

      MOV   RCX,R15                   ; STDOUT.
      CALL  SetConsoleActiveScreenBuffer

      MOV   RCX,STD_INPUT_HANDLE
      CALL  GetStdHandle

      MOV   R14,RAX
      MOV   RCX,RAX                   ; STDIN.


      LEA   RDX,INBUFF
      MOV   R8,SIZEOF INBUFF
      LEA   R9,CHRSREAD
      MOV   DWORD PTR[RSP+20H],NULL
      CALL  ReadConsole

      MOV   RCX,R15                   ; STDOUT.
      MOV   RDX,000000000000000AH                                        ; GO TO COLUMN 10 IN ROW 0 (THIS IS CORRECT).
      CALL  SetConsoleCursorPosition

      MOV   RCX,R15                   ; STDOUT.
      LEA   RDX,THE_MSG
      MOV   R8,SIZEOF THE_MSG
      LEA   R9,CHRSWRIT
      MOV   DWORD PTR[RSP+20H],NULL
      CALL  WriteConsole

      MOV   RCX,R14                   ; STDIN.
      LEA   RDX,INBUFF
      MOV   R8,SIZEOF INBUFF
      LEA   R9,CHRSREAD
      MOV   DWORD PTR[RSP+20H],NULL
      CALL  ReadConsole     

      MOV   RCX,R15                   ; STDOUT.
      CALL  CloseHandle               ; THE END OF THE CONSOLE SCREEN BUFFER.

      CALL  FreeConsole

      XOR   RCX,RCX
      CALL  ExitProcess
START ENDP
_TEXT ENDS
;=====================================================================================
      END