Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Ассемблер? Это просто! Учимся программировать


Новое направление Портала RusFAQ.ru:
MosHoster.ru - Профессиональный хостинг

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Assembler (Ассемблер)

Выпуск № 964
от 31.01.2008, 16:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 358, Экспертов: 16
В номере:Вопросов: 3, Ответов: 5

Нам важно Ваше мнение об этой рассылке.
Оценить этот выпуск рассылки >>


Вопрос № 120185: Очень прошу уважаемых экспертов Задача на тему обработка битовой последовательности Задана 16 разрядная последовательность xххххххххххххххx -----?*****..... 1гр. 4 2гр. 3гр. ПЕРЕСТАВИТЬ 5-битные группы в со...
Вопрос № 120240: Здравствуйте! Меня зовут Феликс. Я из Казахстана. Недавно начал изучать ассемблер - пока только на уровне COM-файлов под DOS. А работаю я в Windows XP. Т.е. в режиме эмуляции. Это я на всякий случай все сообщаю. Хотелось бы задать два следующих в...
Вопрос № 120244: Есть такое задание: В первую строчку экрана вывести 16 символов NUL (ASCII код 0) с разными значениями атрибута фона (старшая тетрада атрибута символа). Написал первую часть, тоесть без работы еще с мышкой и она почему у меня не работает...

Вопрос № 120.185
Очень прошу уважаемых экспертов

Задача на тему обработка битовой последовательности

Задана 16 разрядная последовательность
xххххххххххххххx
-----?*****.....
1гр. 4 2гр. 3гр.

ПЕРЕСТАВИТЬ 5-битные группы в соответствии 2 1 3
4 группу - ? необходимо оставить на месте

Огровное спасибо за помощь заочнице
Отправлен: 25.01.2008, 21:50
Вопрос задала: ИринаИсанаева (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Евгений Иванов
Здравствуйте, ИринаИсанаева!

Представим, что число находится в регистре 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-файла в наше время уже не так важно; программирование на уровне портов и использование прерываний - это в СИ++ делать можно, а с арифметикой там проще; прямое обращение к видео памяти - думаю тоже можно не только на Ассме...и т.д.). Вы уж извините что я такой злой, но мне это действительно очень интересно знать. Да и вообще думаю, что второй вопрос общемассовый, т.к. речь о том - каковы перспективы знания Ассма!
Отправлен: 26.01.2008, 12:11
Вопрос задал: Бартосик Феликс Михайлович (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Евгений Иванов
Здравствуйте, Debfil!

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

mov ax, 0b800h
mov es, ax

mov si, offset txt
mov di, 80*2 ; 80 symbols*2 bytes <sym, attr>
mov cx, (offset @txt - offset txt) / 2
cld

rep movsw

mov AX,4C00h
int 21h
text ends

data segment use16
txt db 'T',0fh,'E',0fh,'S',0fh,'T',0fh,'!',0fh
txt label byte
data ends

end begin

Прошу помочь со 2-й частью, есть идея, но как ее реализовать незнаю=(... Идея самая примитивная - делаем инициалзацю мышки, показываем курсор, включаем обработчик сос-ия мышки , получаем какие-то координты в СХ и ДХ, а вот потом как сделать что бы текст менялся и что делать вообще дальше , и как реализовать не знаю=(. Помогите
Отправлен: 26.01.2008, 12:32
Вопрос задал: _Алексей Сергеевич (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 10)

Отвечает: Евгений Иванов
Здравствуйте, _Алексей Сергеевич !

Первая задача вроде правильная - осталось включить паузу по нажатию клавиши перед выходом. У вас, вероятно, сразу выходит, вот вы и думаете, что не работает.

Насчет мыши - есть интерфейс для работы с ней.
INT 33h вроде. поищите более точно.

Вам нужно устроить цикл, в котором вызывать функцию для определления, пришло ли от мыши изменение или нажатие на клавишу.


---------
Знания - сила
Ответ отправил: Евгений Иванов (статус: Профессор)
Россия, Москва
Тел.: +79168790776
Адрес: ул. Тверская
WWW: Eugene Ivanov
ICQ: 214889076
----
Ответ отправлен: 26.01.2008, 14:17
Оценка за ответ: 5


Вы имеете возможность оценить этот выпуск рассылки.
Нам очень важно Ваше мнение!
Оценить этот выпуск рассылки >>

Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2008, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Техподдержка портала, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.70 от 17.01.2008
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное