@AlexB_49
Студент

Как в текстовом режиме вывести с помощью псевдографики изображение символа «N» на ассемблере?

Нужно вывести с помощью псевдографики изображение символа "N".
Как я понимаю, псевдографические символы расположены между 176 и 223 кодом в таблице ASCII. Но вот что с этим делать дальше я не знаю, так как по-сути только сегодня начал учить ассемблер, и уже нужно сделать такое задание.

У меня есть пример, как вывести с помощью псевдографики символ "О", но эта программа даже не хочет скомпилироватся, так как в ней есть ошибки. Вот код:
.686
.model flat, stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\kernel32.lib
.data
hConsoleOutput dd 0
NumberOfCharsWritten dd 0
Symbol db 60 dup (32),10,13
 db 19 dup (32),26 dup(219),19 dup (32), 10, 13
 db 17 dup (32),2 dup(219),7 dup(176),2 dup(219),8 dup(32),2 dup(219),7 dup(176),2
dup(219),17 dup(32), 10, 13
 db 15 dup (32),2 dup(219),7 dup(176),2 dup(219),12 dup(32),2 dup(219),7 dup(176),2
dup(219),15 dup(32), 10,13
 db 13 dup (32),2 dup(219),7 dup(176),2 dup(219),16 dup(32),2 dup(219),7 dup(176),2
dup(219),13 dup(32), 10,13
 db 11 dup (32),2 dup(219),7 dup(176),2 dup(219),20 dup(32),2 dup(219),7 dup(176),2
dup(219),11 dup(32), 10,13
 db 8 dup( 9 dup (32),2 dup(219),7 dup(176),2 dup(219),24 dup(32),2 dup(219),7
dup(176),2 dup(219),9 dup(32), 10,13)
 db 11 dup (32),2 dup(219),7 dup(176),2 dup(219),20 dup(32),2 dup(219),7 dup(176),2
dup(219),11 dup(32), 10,13
 db 13 dup (32),2 dup(219),7 dup(176),2 dup(219),16 dup(32),2 dup(219),7 dup(176),2
dup(219),13 dup(32), 10,13
 db 15 dup (32),2 dup(219),7 dup(176),2 dup(219),12 dup(32),2 dup(219),7 dup(176),2
dup(219),15 dup(32), 10,13
 db 17 dup (32),2 dup(219),7 dup(176),2 dup(219),8 dup(32),2 dup(219),7 dup(176),2
dup(219),17 dup(32), 10,13
 db 19 dup (32),26 dup(219),19 dup (32),13,10
 db 60 dup (32),10,13
NumberOfCharsToWrite dd $-Symbol
ReadBuf db 128 dup(?)
hConsoleInput dd 0
.code
start:
call AllocConsole
push -11
call GetStdHandle
mov hConsoleOutput, eax
push 0
push offset NumberOfCharsWritten
push NumberOfCharsToWrite
push offset Symbol
push hConsoleOutput
call WriteConsoleA
push -10
call GetStdHandle
mov hConsoleInput, eax
push 0
push offset NumberOfCharsWritten
push 128
push offset ReadBuf
push hConsoleInput
call ReadConsoleA
push 0
call ExitProcess
end start


Я вообще не понимаю, что делают большинство команд, особенно для чего нужен код типа Symbol db 60 dup (32),10,13
db 19 dup (32),26 dup(219) и так далее
.

Подскажите, как реализовать данную программу? Буду очень благодарен за помощь.
  • Вопрос задан
  • 317 просмотров
Решения вопроса 1
fox_12
@fox_12
Расставляю биты, управляю заряженными частицами
Я вообще не понимаю, что делают большинство команд, особенно для чего нужен код типа
Symbol db 60 dup (32),10,13 db 19 dup (32),26 dup(219)


Symbol - это массив символов, который нужно вывести на экран
db 60 dup (32), 10,13 - это буквально значит - "60 пробелов (ascii код 32), потом перевод строки (ascii код 10, 13)
db 19 dup (32), 26 dup(219), 19 dup (32), 10, 13 - это буквально значит "вывести 19 пробелов, потом 26 символов псевдокода (ascii код 219), потом снова 19 пробелов, и перевод строки"
В итоге у вас выведет:
_                 ██████████████████████████
                 ██░░░░░░░██        ██░░░░░░░██
               ██░░░░░░░██            ██░░░░░░░██
             ██░░░░░░░██                ██░░░░░░░██
           ██░░░░░░░██                    ██░░░░░░░██
         ██░░░░░░░██                        ██░░░░░░░██
         ██░░░░░░░██                        ██░░░░░░░██
         ██░░░░░░░██                        ██░░░░░░░██
         ██░░░░░░░██                        ██░░░░░░░██
         ██░░░░░░░██                        ██░░░░░░░██
         ██░░░░░░░██                        ██░░░░░░░██
         ██░░░░░░░██                        ██░░░░░░░██
         ██░░░░░░░██                        ██░░░░░░░██
           ██░░░░░░░██                    ██░░░░░░░██
             ██░░░░░░░██                ██░░░░░░░██
               ██░░░░░░░██            ██░░░░░░░██
                 ██░░░░░░░██        ██░░░░░░░██
                   ██████████████████████████

Чтобы вывести другой символ - то рисуете его подобным образом в текстовом редакторе и копируете в массив данных.

вставляю этот код, сохраняю, потом нажимаю Project -> Build All (пробовал по-разному). И получаю вот такой результат:

потому что бездумно копируете, не учитывая что у вас там перевод строки идет, и вы рвете выражения объявления данных. Там строка не с dup должна начинаться, а с db
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы