Форум программистов, компьютерный форум, киберфорум
Assembler: Windows/protected mode
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
4 / 4 / 0
Регистрация: 03.12.2018
Сообщений: 75

Сообщение в консоли выводится крякозябрами

18.01.2019, 11:08. Показов 3915. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!
Почему у меня сообщение в win7 64-bit выводится крякозябрами, что надо подправить?
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
.486
.model flat, stdcall
option casemap :none
ExitProcess proto :DWORD
GetStdHandle proto :DWORD
WriteConsoleA proto :DWORD, :DWORD,\
              :DWORD, :DWORD, :DWORD
includelib \masm32\lib\kernel32.lib
.data
stdout DWORD ?
msg BYTE "Не могу молчать!" ,0dh, 0ah
cWritten DWORD ?
.code
start:
invoke GetStdHandle, -11
mov stdout, eax
invoke WriteConsoleA, stdout, ADDR msg,\
            sizeof msg, ADDR cWritten, 0 
invoke ExitProcess, 0
end start
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.01.2019, 11:08
Ответы с готовыми решениями:

Сообщение в выводится крякозябрами
Подскажите а как в этой DOS-программе добиться, чтобы буквы не выводились крякозябрами? .8086 ;Не могу молчать! (DOS-версия) ...

Что должно выводится по итогу в консоли: Написать программу с двумя своими манипуляторами.Один выводит сообщение, другой
Задание: Написать программу с двумя своими манипуляторами. Один выводит сообщение, другой устанавливает шестнадцатеричный вывод и символ...

Не выводится результат в консоли
Такое задание - распечатать фамилии рабочих бригады начинающиеся с букв а и с с указанием их месячной зарплаты В консоли всё вводится, но...

7
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4573 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
18.01.2019, 12:18
Лучший ответ Сообщение было отмечено ФедосеевПавел как решение

Решение

Platov, в консоли сообщения выводятся в досовской кодировке 866
Предлагаю два пути:
1) сохранить текст в кодировке 866
2) сделать так:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
.486
.model flat, stdcall
option casemap :none
 
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
 
.data
stdout DWORD ?
msg BYTE "Не могу молчать!" ,0dh, 0ah
cWritten DWORD ?
 
.code
start:
invoke GetStdHandle, STD_OUTPUT_HANDLE
mov stdout, eax
invoke CharToOemA, ADDR msg, ADDR msg
invoke WriteConsoleA, stdout, ADDR msg,\
            sizeof msg, ADDR cWritten, 0 
invoke ExitProcess, 0
end start
1
4 / 4 / 0
Регистрация: 03.12.2018
Сообщений: 75
18.01.2019, 15:27  [ТС]
Цитата Сообщение от liv Посмотреть сообщение
Предлагаю два пути:
2) сделать так:
Спасибо за подсказку, liv теперь смогу подправить текст в других примерах.

Добавлено через 2 часа 46 минут
А в этом примере неиспользованные символы после цифр выводятся буквой а, например 1ааааааааааааааа как дописать программу, чтобы лишние символы не выводились?
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
.486    ;вывод на экран чисел от 1 до 10
.model flat, stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
BSIZE equ 15
.data
ifmt BYTE "%d",0
buf BYTE BSIZE dup(?)
crlf BYTE 0dh,0ah
stdout DWORD ?
cWritten DWORD ?
.code
start:
invoke GetStdHandle, STD_OUTPUT_HANDLE
mov stdout, eax
mov edx,1
mov ecx,10
nxt:
    push ecx
    push edx    
    invoke wsprintf, ADDR buf, ADDR ifmt, edx 
    invoke WriteConsoleA, stdout, ADDR buf, \
    BSIZE, ADDR cWritten, NULL
    invoke WriteConsoleA, stdout, ADDR crlf, 2,
    ADDR cWritten, NULL
pop edx
inc edx
pop ecx
loop nxt    
invoke ExitProcess, 0
end start
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8644 / 4479 / 1669
Регистрация: 01.02.2015
Сообщений: 13,883
Записей в блоге: 11
18.01.2019, 16:23
Лучший ответ Сообщение было отмечено Platov как решение

Решение

Прочтите описание WriteConsoleA - один из параметров длина выводимой строки (которая меньше буфера).
А также описание wsprintf - это функция, возвращающая в eax длину результирующей строки.
https://msdn.microsoft.com/en-... p/ms687401
https://docs.microsoft.com/en-... -wsprintfa

Добавлено через 6 минут
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
.486
.model flat, stdcall
option casemap :none
 
        include \masm32\include\windows.inc
 
        include \masm32\include\user32.inc
        include \masm32\include\kernel32.inc
        include \masm32\include\masm32.inc
 
        includelib \masm32\lib\user32.lib
        includelib \masm32\lib\kernel32.lib
        includelib \masm32\lib\masm32.lib
.data
        aszCrLf         db      0Dh, 0Ah, 0
        aszPressLeftAlt db      0Dh, 0Ah, 0Dh, 0Ah, "Press Left Alt to exit", 0
        aszResult       db      0Dh, 0Ah, "The result: %d", 0Dh, 0Ah, 0
 
.data?
        hConsoleOutput  HANDLE  ?
        hConsoleInput   HANDLE  ?
        Buffer          db      1024 dup(?)
        Temp            dd      ?
.code
 
start   proc
 
        ; получение описателей ввода и вывода консоли
        invoke  GetStdHandle,   STD_INPUT_HANDLE
        mov     hConsoleInput,  eax
        invoke  GetStdHandle,   STD_OUTPUT_HANDLE
        mov     hConsoleOutput, eax
 
        ;вывод результата
        mov     eax,    129846
        invoke  wsprintf, ADDR Buffer, ADDR aszResult, eax
        invoke  WriteConsole, hConsoleOutput, ADDR Buffer,\
                eax, ADDR Temp, NULL
        ;ожидание нажатия Left Alt
        invoke  WriteConsole, hConsoleOutput, ADDR aszPressLeftAlt,\
                LENGTHOF aszPressLeftAlt - 1, ADDR Temp, NULL
        @@WaitForLAlt:
                invoke  GetAsyncKeyState, VK_LMENU
                and     eax,    8000h
        jz      @@WaitForLAlt
        ;завершение программы
        invoke  ExitProcess, 0
start   endp
 
end start
Добавлено через 4 минуты
В связке с wsprintf это лишнее, но в других случаях может пригодится StrLen, идущая с пакетом masm32 (т.е. в составе masm32.lib и masm32.inc)
Assembler
1
2
3
4
5
                invoke  wsprintf, ADDR Buffer, ADDR aszMsgResult, [Result]
                invoke  StrLen, ADDR Buffer
                mov     [BufLen],       eax
                invoke  WriteConsole, hConsoleOutput, ADDR Buffer,\
                        BufLen, ADDR BufLen, NULL
1
4 / 4 / 0
Регистрация: 03.12.2018
Сообщений: 75
18.01.2019, 16:40  [ТС]
ФедосеевПавел, теперь понятно, почему в книге приведен упрощенный пример вывода цифр.
0
222 / 19 / 0
Регистрация: 15.08.2016
Сообщений: 47
06.02.2019, 10:48
Еще шрифт консоли желательно делать юникоидным, например, Lucida console.
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8644 / 4479 / 1669
Регистрация: 01.02.2015
Сообщений: 13,883
Записей в блоге: 11
06.02.2019, 11:11
Это вместо CharToOemA?
1
222 / 19 / 0
Регистрация: 15.08.2016
Сообщений: 47
06.02.2019, 23:05
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
Это вместо CharToOemA?
Зачем "вместо"? В дополнение. Хотя кому как. Я набиваю исходный текст в редакторе FAR в DOS кодировке. Соответственно, она выводится в консоль "как есть" (WriteConsoleA). А если надо отобразить имя файла, которое возвращает WinAPI, я перекодирую его из CP1251 в CP866 (CharToOemA). А чтобы выводить разные Unicode-символы надо выставить правильный шрифт, поддерживающий Unicode. Те растровые шрифты, что идут с виндой, для этого не подходят.
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.02.2019, 23:05
Помогаю со студенческими работами здесь

[Mono] Ничего не выводится в Консоли
Создаю консольное приложение на сишарпе(типичный Хеллоу Ворлд) и жму F5. По идеи оно должно скопилироваться и вывести на консоли текст. Но...

Не выводится таблица в консоли
Суть такова: есть две программы, записывают данные в файл и выводят их в виде таблицы. Первая прога не моя, взял из примера выполнения, и...

Slice от localtime выводится в интерпретаторе, но не в консоли
Есть таймер через sleep хотелось бы чтобы перед началом действия таймера выводилось на экран текущее время (строчка отмечена комментарием),...

После компиляции в консоли не выводится русский текст
а подскажите такой вопрос.Писал в npp самую простенькую прогу public class HelloWorld { public static void main(String args) { ...

Как выводится дата и время создания файла на экран консоли?
C# Как выводится дата и время создания файла на экран консоли?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru