Win32 консоль. вывод содержимого регистра на экран

Тема в разделе "WASM.BEGINNERS", создана пользователем IndRes, 6 окт 2007.

  1. IndRes

    IndRes New Member

    Публикаций:
    0
    Регистрация:
    6 окт 2007
    Сообщения:
    1
    только что начал изучать ассемблер, что-то я не догоняю, помогите плз
    консольное приложение под win32
    как вывести на экран содержимое регистра? (напимер eax)
    и как вывести на экран содержимое одного (определенного) байта в оперативе, т.е. не строки, а именно одного байта с известным адресом
     
  2. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    c wsprintf формируешь буффер
    writefile выводешь
     
  3. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    Сначала надо перевести значение в ASCII строку, а потом выводить. Или использовать printf из msvcrt.dll или что-нибудь подобное.
    Байт ничего не содержит, он равняется значению. С ним аналогично. Но так как функция printf принимает на вход только адреса строк или двойные слова (в x86), то этот байт сначала нужно поместить в регистр (например eax), а регстр передавать в кач-ве параметра printf.

    byte_to_display db 0xFE
    szFormat db "%d", 0

    movzx eax, [byte_to_display]
    invoke printf, szFormat, eax
     
  4. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    приблизительно так, но здесь еще и цветной вывод
    Код (Text):
    1. format PE console
    2. entry start
    3.  
    4. include '%fasminc%\win32a.inc'
    5.  
    6. FOREGROUND_BLUE         =  0001h   ; text color contains blue
    7. FOREGROUND_GREEN        =  0002h   ; text color contains green
    8. FOREGROUND_RED          =  0004h   ; text color contains red
    9. FOREGROUND_INTENSITY    =  0008h   ; text color is intensified
    10. BACKGROUND_BLUE         =  0010h   ; background color contains blue
    11. BACKGROUND_GREEN        =  0020h   ; background color contains green
    12. BACKGROUND_RED          =  0040h   ; background color contains red
    13. BACKGROUND_INTENSITY    =  0080h   ; background color is intensified
    14.  
    15. ENABLE_PROCESSED_INPUT  =  0001h
    16. ENABLE_LINE_INPUT       =  0002h
    17. ENABLE_ECHO_INPUT       =  0004h
    18. ENABLE_WINDOW_INPUT     =  0008h
    19. ENABLE_MOUSE_INPUT      =  0010h
    20.  
    21.  
    22. section '.code' code readable executable
    23.  
    24. align 4
    25. start:
    26.    invoke GetStdHandle, STD_OUTPUT_HANDLE
    27.    mov [hOutPut], eax
    28.    invoke SetConsoleTextAttribute, eax,\
    29.                                    FOREGROUND_RED or \
    30.                                    FOREGROUND_GREEN or \
    31.                                    FOREGROUND_INTENSITY
    32.    mov eax, 12ABCDEFh
    33.    cinvoke wsprintf, szBuff, format_string, eax
    34.    invoke WriteFile, [hOutPut], szBuff, eax, NumberOfBytesWritten, NULL
    35.    invoke SetConsoleTextAttribute, [hOutPut],\
    36.                                    FOREGROUND_BLUE or \
    37.                                    FOREGROUND_INTENSITY
    38.    invoke WriteFile, [hOutPut], OutputString, OutputString_len, NumberOfBytesWritten, NULL
    39.    invoke GetStdHandle, STD_INPUT_HANDLE
    40.    mov [hInput], eax
    41.    invoke SetConsoleMode, eax, ENABLE_PROCESSED_INPUT
    42. @@:
    43.    invoke ReadFile, [hInput], szBuff, 1, NumberOfBytesWritten, NULL
    44.    cmp BYTE [szBuff], 'q'
    45.    je @F
    46.    cmp BYTE [szBuff], 'Q'
    47.    jne @B
    48. @@:
    49.    invoke ExitProcess, 0
    50.  
    51.  
    52. section '.data' data readable writeable
    53.  
    54. format_string         db  "%08lX",13,10,0
    55. OutputString          db  "Press 'q' to quit",13,10
    56. OutputString_len       =  $ - OutputString
    57. szBuff                rb  11
    58.  
    59. align 4
    60. hOutPut               dd  ?
    61. NumberOfBytesWritten  dd  ?
    62. hInput                dd  ?
    63.  
    64.  
    65. section '.idata' import data readable writeable
    66.  
    67. library kernel32,'KERNEL32.DLL',\
    68.           user32,'USER32.DLL'
    69.  
    70. include '%fasminc%\APIA\KERNEL32.INC'
    71. include '%fasminc%\APIA\USER32.INC'