Вопрос № 120185: Очень прошу уважаемых экспертов
Задача на тему обработка битовой последовательности
Задана 16 разрядная последовательность
xххххххххххххххx
-----?*****.....
1гр. 4 2гр. 3гр.
ПЕРЕСТАВИТЬ 5-битные группы в со...Вопрос № 120240: Здравствуйте! Меня зовут Феликс. Я из Казахстана. Недавно начал изучать ассемблер - пока только на уровне COM-файлов под DOS. А работаю я в Windows XP. Т.е. в режиме эмуляции. Это я на всякий случай все сообщаю.
Хотелось бы задать два следующих в...Вопрос № 120244: Есть такое задание:
В первую строчку экрана вывести 16 символов NUL (ASCII код 0) с разными значениями атрибута фона (старшая тетрада атрибута символа).
Написал первую часть, тоесть без работы еще с мышкой и она почему у меня не работает...
Вопрос № 120.185
Очень прошу уважаемых экспертов
Задача на тему обработка битовой последовательности
Отвечает: Евгений Иванов
Здравствуйте, ИринаИсанаева!
Представим, что число находится в регистре AX.
Дальше действуем так:
mov bx, ax
mov cx, ax
and bx, 1111100000000000b
and cx, 0000001111100000b
and ax, 0000010000011111b
shl cx, 6
or ax, cx
shr bx, 6
or ax, bx
Вот и всё. Успехов вам.
--------- Знания - сила
Ответ отправил: Евгений Иванов (статус: Профессор) Россия, Москва Тел.: +79168790776 Адрес: ул. Тверская WWW:Eugene Ivanov ICQ: 214889076 ---- Ответ отправлен: 25.01.2008, 23:05 Оценка за ответ: 5
Отвечает: Зенченко Константин Николаевич
Здравствуйте, ИринаИсанаева!
Вам нужен этот код: mov dx,ax;копируем значение АХ mov bx,ax;копируем значение АХ shl bx,6;2-ю группу перемещаем влево shr dx,6;1-ю группу перемещаем вправо and ax,41fh;оставляем только 4-ю и 3-ю группу ;0000010000011111 and bx,0f800h;выделяем только 2-ю группу ;1111100000000000 and
dx,3e0h;выделяем только 1-ю группу ;0000001111100000 or ax,dx;побитно складываем с 1-ой группой or ax,bx;побитно складываем с 2-ой группой
на входе: в АХ последовательность бит; на выходе: в АХ переставленная последовательность групп. ps:это все нужно делать для 186 процессора либо заменить команды сдвига на их аналоги: shr dx,1;повторить команду 6-ть раз или mov cx,6;указываем кол-во повторений shr dx,cx;сдвигаем Удачи!
--------- И только наступив на грабли мы приобретаем драгоценный опыт!
Ответ отправил: Зенченко Константин Николаевич (статус: Профессионал) Украина, Киев Тел.: +380958380164 Адрес: Украина г.Киев ---- Ответ отправлен: 25.01.2008, 23:07 Оценка за ответ: 5
Вопрос № 120.240
Здравствуйте! Меня зовут Феликс. Я из Казахстана. Недавно начал изучать ассемблер - пока только на уровне COM-файлов под DOS. А работаю я в Windows XP. Т.е. в режиме эмуляции. Это я на всякий случай все сообщаю.
Хотелось бы задать два следующих вопроса.
1) При запуске в текстовом режиме прекрасно отображаются русские символы из нижней части таблицы ASCII-кодов. При попытке вывести их в графическом режиме, и даже переключившись из графического в текстовый, как я понял вместо кодировки cp866 начинает использоваться кодировка IBM (может я неправильно называю - вобщем там символы других славянских языков).
В своей программе я хотел бы переключаться между граф. и текст. режимами и при этом использовать руские буквы, а не латинские.
Можно ли как то менять кодировку в программе?
2) Что можно в Асемблере делать такого интересного, чего нельзя делать в Delphi или в СИ++? (Обычно в примерах про Winassm32 показывают как создавать пустую форму, MesageBox и другие визуальные компоненты - так это в Delphi все уже готовое, а размеры EXE-файла в наше время уже не так важно; программирование на уровне портов и использование прерываний - это в СИ++ делать можно, а с арифметикой там проще; прямое обращение к видео памяти - думаю тоже можно не только на Ассме...и т.д.). Вы уж извините что я такой
злой, но мне это действительно очень интересно знать. Да и вообще думаю, что второй вопрос общемассовый, т.к. речь о том - каковы перспективы знания Ассма!
1. нужно использовать кодировку 866 - dos.
используйте редактор FAR
2. дельфи тоже уже устарел - сейчас все пишется для веба на серверных языках и клиентских - js , флеш.
ассемблер нужен для быстроты - драйвера видео, звука и другое.
--------- Знания - сила
Ответ отправил: Евгений Иванов (статус: Профессор) Россия, Москва Тел.: +79168790776 Адрес: ул. Тверская WWW:Eugene Ivanov ICQ: 214889076 ---- Ответ отправлен: 26.01.2008, 14:06
Отвечает: Зенченко Константин Николаевич
Здравствуйте, Debfil!
1) Для написания программ под DOS Вам нужны редакторы которые поддерживают кодировки ср886 (PSPad(бесплатный) или Notepad+(платный), стандартный блокнот Windows для русских букв использует кодировку ср1251.
2) На ассемблере можно написать все (от драйверов, до полноценной программы), к выше перечисленому добавлю ещё защиты от дисассемблирования и антиотладки.
К примеру, из самого простого: 11 0007 B8 EB 02 mov ax,02ebh 12 000A EB FA jmp short $-4;эта команда перeдаст управление на выделенный байт ЕВ, которая передаст управление на выделенный байт В4 13 000C B4 4C mov ah,4ch 14 000E CD 21 int 21h при попытке это дизассемблировать IDA выдает такой результат (ошибаясь даже в адресе перехода на 2 байта, не учитывая что в IP - адрес следующей ко
манды): seg000:0007 mov ax, 02EBh seg000:000A jmp short near ptr loc_10005+1 вот тут уже требуется вмешательство человека, для анализа кода побайтно с учетом знаний машинных опкодов, видов адресаций, хранения данных в памяти и многое другое, и без знания ассемблера ну никак seg000:000C db 0B4h, 4Ch, 0CDh, 21h
В отличии от других языков высокого уровня ассемблер более требователен к программисту, ошибку в алгоритме ЯВУ, ещё может обнаружить
и исправить компилятор, а может и пропустить, тогда она может проявится к примеру "как переполнение буфера" в самый не подходящий момент и хакер уже на Вашем комьютере как дома или система "упала". В ассемблере этого нет, за все отвечает прогаммист (компилятор ищет только ошибки синтаксиса), и если есть ошибка в программе, то во всем виноваты только "кривые ручки" или ещё какая нибуть запчасть.
Все результаты компиляции любой пр
ограммы на ЯВУ превращаются в машинный код и насколько я знаю полноценной связки (ЯВУ - > код - > ЯВУ) нет, в отличии от ассемблер - > код - > дизассемблер. Вот для анализа Вашей программы и нужен ассемблер.
Пока существуют процессоры, которые поддерживают определенную систему команд - будет и ассемблер. Вот такие перспективы на сегодня.
Удачи!
--------- И только наступив на грабли мы приобретаем драгоценный опыт!
Ответ отправил: Зенченко Константин Николаевич (статус: Профессионал) Украина, Киев Тел.: +380958380164 Адрес: Украина г.Киев ---- Ответ отправлен: 28.01.2008, 16:26
Вопрос № 120.244
Есть такое задание:
В первую строчку экрана вывести 16 символов NUL (ASCII код 0) с разными значениями атрибута фона (старшая тетрада атрибута символа).
Написал первую часть, тоесть без работы еще с мышкой и она почему у меня не работает, помогите...
В другую строчку вывести любую фразу.Если курсор мишки находится на одном из символов NUL, то при нажатии правой кнопки мишки обеспкчить цвет символов фразы раный цвету выбранного фона.
Вот код первой части
.386
text segment use16
assume CS:text,DS:data
begin :
mov AX, data
mov DS, AX
mov ax, 0003h
int 10h
mov ax, 0b800h
mov gs,ax
xor ax,ax
xor bx,bx
1:
mov word ptr gs:[bx], ax
add ah,10h
inc bx
inc bx
cmp bx,20h
jne @1
data segment use16
txt db 'T',0fh,'E',0fh,'S',0fh,'T',0fh,'!',0fh
txt label byte
data ends
end begin
Прошу помочь со 2-й частью, есть идея, но как ее реализовать незнаю=(... Идея самая примитивная - делаем инициалзацю мышки, показываем курсор, включаем обработчик сос-ия мышки , получаем какие-то координты в СХ и ДХ, а вот потом как сделать что бы текст менялся и что делать вообще дальше , и как реализовать не знаю=(. Помогите
Отвечает: Евгений Иванов
Здравствуйте, _Алексей Сергеевич !
Первая задача вроде правильная - осталось включить паузу по нажатию клавиши перед выходом. У вас, вероятно, сразу выходит, вот вы и думаете, что не работает.
Насчет мыши - есть интерфейс для работы с ней.
INT 33h вроде. поищите более точно.
Вам нужно устроить цикл, в котором вызывать функцию для определления, пришло ли от мыши изменение или нажатие на клавишу.
--------- Знания - сила
Ответ отправил: Евгений Иванов (статус: Профессор) Россия, Москва Тел.: +79168790776 Адрес: ул. Тверская WWW:Eugene Ivanov ICQ: 214889076 ---- Ответ отправлен: 26.01.2008, 14:17 Оценка за ответ: 5