только что начал изучать ассемблер, что-то я не догоняю, помогите плз консольное приложение под win32 как вывести на экран содержимое регистра? (напимер eax) и как вывести на экран содержимое одного (определенного) байта в оперативе, т.е. не строки, а именно одного байта с известным адресом
Сначала надо перевести значение в 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
приблизительно так, но здесь еще и цветной вывод Код (Text): format PE console entry start include '%fasminc%\win32a.inc' FOREGROUND_BLUE = 0001h ; text color contains blue FOREGROUND_GREEN = 0002h ; text color contains green FOREGROUND_RED = 0004h ; text color contains red FOREGROUND_INTENSITY = 0008h ; text color is intensified BACKGROUND_BLUE = 0010h ; background color contains blue BACKGROUND_GREEN = 0020h ; background color contains green BACKGROUND_RED = 0040h ; background color contains red BACKGROUND_INTENSITY = 0080h ; background color is intensified ENABLE_PROCESSED_INPUT = 0001h ENABLE_LINE_INPUT = 0002h ENABLE_ECHO_INPUT = 0004h ENABLE_WINDOW_INPUT = 0008h ENABLE_MOUSE_INPUT = 0010h section '.code' code readable executable align 4 start: invoke GetStdHandle, STD_OUTPUT_HANDLE mov [hOutPut], eax invoke SetConsoleTextAttribute, eax,\ FOREGROUND_RED or \ FOREGROUND_GREEN or \ FOREGROUND_INTENSITY mov eax, 12ABCDEFh cinvoke wsprintf, szBuff, format_string, eax invoke WriteFile, [hOutPut], szBuff, eax, NumberOfBytesWritten, NULL invoke SetConsoleTextAttribute, [hOutPut],\ FOREGROUND_BLUE or \ FOREGROUND_INTENSITY invoke WriteFile, [hOutPut], OutputString, OutputString_len, NumberOfBytesWritten, NULL invoke GetStdHandle, STD_INPUT_HANDLE mov [hInput], eax invoke SetConsoleMode, eax, ENABLE_PROCESSED_INPUT @@: invoke ReadFile, [hInput], szBuff, 1, NumberOfBytesWritten, NULL cmp BYTE [szBuff], 'q' je @F cmp BYTE [szBuff], 'Q' jne @B @@: invoke ExitProcess, 0 section '.data' data readable writeable format_string db "%08lX",13,10,0 OutputString db "Press 'q' to quit",13,10 OutputString_len = $ - OutputString szBuff rb 11 align 4 hOutPut dd ? NumberOfBytesWritten dd ? hInput dd ? section '.idata' import data readable writeable library kernel32,'KERNEL32.DLL',\ user32,'USER32.DLL' include '%fasminc%\APIA\KERNEL32.INC' include '%fasminc%\APIA\USER32.INC'