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

RusFAQ.ru: программирование на языке Assembler


Информационный Канал Subscribe.Ru

RusFAQ.ru: программирование на языке Assembler

Выпуск № 763
от 30.08.2004, 23:10

Администратор:
Имя: Калашников О.А.
URL: Информационный ресурс
ICQ: 68951340
Россия, Москва
О рассылке:
Задано вопросов: 5793
Отправлено ответов: 15555
Активность: 268.5 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе][Обсудить на форуме]


 Список экспертов, ответы которых опубликованы в данном выпуске

PavPS
Статус: Доверительный
Общий рейтинг: 115.95
[Подробней >>]
Горячев Игорь
Статус: Доверительный
Общий рейтинг: 117.94
[Подробней >>]
bocha
Статус: Опытный
Общий рейтинг: 123.39
[Подробней >>]
 
Алексей
Статус: Доверительный
Общий рейтинг: 147.22
[Подробней >>]
Artemy
Статус: Опытный
Общий рейтинг: 108.45
Телефон: 8 905 549 38 66
[Подробней >>]
Tigran K. Kalaidjian
Статус: Профессиональный
Общий рейтинг: 186.72
URL: Персональная страничка
[Подробней >>]
 
Евгений Иванов
Статус: Профессиональный
Общий рейтинг: 132.87
URL: Super Assembler Software
Телефон: НСС +7 831 3107039
[Подробней >>]
flasher
Статус: Доверительный
Общий рейтинг: 105.23
[Подробней >>]
Ayl
Статус: Профессиональный
Общий рейтинг: 116.43
[Подробней >>]
 
SackTap
Статус: Доверительный
Общий рейтинг: 112.18
[Подробней >>]
Стас
Статус: Опытный
Общий рейтинг: 122.2
[Подробней >>]
ASMодей
Статус: Профессиональный
Общий рейтинг: 111.07
[Подробней >>]
 
Dark_Lord
Статус: Профессиональный
Общий рейтинг: 109.28
[Подробней >>]
_vt
Статус: Профессиональный
Общий рейтинг: 118.03
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 5765. Здраствуйте. Слышал что в защищённом режиме процессор не допустит записи в сегмент кода (как правил... (ответов: 7)
Вопрос № 5766. Здравствуйте, уважаемые эксперты! Прошу вас о помощи... Дайте хоть какую-нибудь информацию про прогр... (ответов: 1)
Вопрос № 5768. Здравствуйте, Эксперты! Киньте ссылки на информацию, как создавать многонитевое приложение. Спасибо.... (ответов: 2)
Вопрос № 5769. здрасьти! вот этот кусок кода (как вы поняли) должен запускаться без операционки. не пойму как он ра... (ответов: 6)
Вопрос № 5770. Не могу разобраться как обрабатывать в VC++ NULL значения в полях recordset-a, а ты при их выводе вы... (ответов: 2)
Вопрос № 5771. Имеется следующий код (см. приложение). Функция MyMessage - просто вызывает MessageBox и все. На сях... (ответов: 1)
Вопрос № 5772. Hi всем. У меня такой вопрос, как после перехода в protected mode передать управление по опрделенном... (ответов: 2)
Вопрос № 5773. Здрасте ув. господа эксперты! Подскажите пожалуйста, где можно скачать ПОЛНЫЙ справочник по Win32Api... (ответов: 7)

Вопросов: 8, ответов: 28


 Вопрос № 5765

Здраствуйте.
Слышал что в защищённом режиме процессор не допустит записи в сегмент кода (как правило, он даже не разрешит считывать его как данные).Но как тогда например hex-редакторы правят файлы, если записывать(и читать) нельзя???



Вопрос отправлен: 25.08.2004, 13:57
Отправитель: Семен

[Следующий вопрос >>] [Список вопросов]

Отвечает PavPS

Приветствую Вас, Семен!
Так ведь HEX редакторы пишут в файл, а не в страницу памяти с аттрибутами защиты ХХХ. И кстати, во время выполнения можно читать из сегмента кода, если поставить у секции кода Readeble,writeble,executeble например.

Ответ отправлен: 26.08.2004, 10:27
Отправитель: PavPS


Отвечает Горячев Игорь

Добрый день, Семен!
Речь идет об исполняемой в данный момент программе. (Сегмент кода определен только у "работающей" проги). Hex - редакторы редактируемый файлы не исполняют, а только побайтно считывают, а это проц запретить не может.

Ответ отправлен: 25.08.2004, 23:04
Отправитель: Горячев Игорь


Отвечает bocha

Добрый день, Семен!
редактор открывает файл для чтения-записи, а не для исполнения.

Ответ отправлен: 25.08.2004, 16:38
Отправитель: bocha


Отвечает Алексей

Доброе время суток, Семен!
Все очень просто. Создается еще один дескриптор. Т.е. имеем сегмент данных с резрешением чтения и записи в ЭТУ ЖЕ область данных. И это ничего, что сегменты перекрываются. Это не страшно, и процессор это допускает ;) операционные системы тоже...

Ответ отправлен: 25.08.2004, 16:14
Отправитель: Алексей


Отвечает Artemy

Добрый день, Семен!
В файлы можно... в память нельзя.

Ответ отправлен: 25.08.2004, 14:05
Отправитель: Artemy


Отвечает Tigran K. Kalaidjian

Приветствую Вас, Семен!
Файлы находятся на диске, а не в памяти.

Ответ отправлен: 29.08.2004, 12:38
Отправитель: Tigran K. Kalaidjian


Отвечает Евгений Иванов

Здравствуйте, Семен!
файлы, заметь, а не память :)
* EMan: -=- И легко перо, да на крышу не закинешь. =-=


Ответ отправлен: 27.08.2004, 01:03
Отправитель: Евгений Иванов


 Вопрос № 5766

Здравствуйте, уважаемые эксперты!
Прошу вас о помощи... Дайте хоть какую-нибудь информацию про программное управление монитором через аналоговый или цифровой вход. В общем, надо поменять яркость/контрастность через шнур, который идёт к монитору :) Знающие люди могут сказать хотя бы как это всё называется, а то я даже не имею представления в какую сторону копать... Если кто знает такую программульку, то я хочу сделать подобие MagicTune™.
Спасибо за то, что вы меня терпите :)


Приложение:


Вопрос отправлен: 25.08.2004, 15:46
Отправитель: UKY

[Следующий вопрос >>] [Список вопросов]

Отвечает Tigran K. Kalaidjian

Здравствуйте, UKY!
Если есть монитор с такими выходами, то надо конкретизировать марку.
Если есть монитор "с кнопочками" без нужного входа для управления, то он разбирается, нажатия эмулируются с помощью LPT-порта и оптопары. Делается это совсем просто.
Хотите узнать подробнее? Пишите на kalaidjian@pochtamt.ru

Ответ отправлен: 29.08.2004, 12:47
Отправитель: Tigran K. Kalaidjian


 Вопрос № 5768

Здравствуйте, Эксперты!
Киньте ссылки на информацию, как создавать многонитевое приложение. Спасибо.



Вопрос отправлен: 25.08.2004, 23:51
Отправитель: Igor

[Следующий вопрос >>] [Список вопросов]

Отвечает Tigran K. Kalaidjian

Добрый день, Igor!
Читайте на wasm.ru в подборке "Туториалы Iczelion'a", там всё подробно и на русском.

Ответ отправлен: 27.08.2004, 19:39
Отправитель: Tigran K. Kalaidjian


Отвечает flasher

Приветствую Вас, Igor!
http://www.wasm.ru/article.php?article=1001015

Ответ отправлен: 26.08.2004, 13:12
Отправитель: flasher


 Вопрос № 5769

здрасьти!
вот этот кусок кода (как вы поняли) должен запускаться без операционки. не пойму как он работает:
как работает эта kputs?
куда lodsb копирует строку? зачем AL проверяется, причем тут вообще AL?
что это за прерывание и что это за ф-я 0х0e ?
а hlt зачем проц останавливает, что будет если этой команды не будет?
и еще, что это за ассемблер в котором перед регистрами % ставиться? (всысле я понял что это синтаксис такой, а где об это поподробнее почитать?)


Приложение:


Вопрос отправлен: 26.08.2004, 10:50
Отправитель: очень хочу научиться

[Следующий вопрос >>] [Список вопросов]

Отвечает Алексей

Здравствуйте, очень хочу научиться!
все по порядку:
Сначала запрет прерываний cli. Зачем это...? Если произойдет прерывание, а стек у нас еще не задан... куда он сохранит точку возврата? Скорее всего все будет нормально, но... Потом выставляем все сегментные регистры в 07с0h - это смещение, куда грузится код при загрузке (копируется с нулевого сектора дискадискеты). Стек (sp) устанавливается "выше" этой программы. Далее грузится si смещением msg. это для того, чтобы потом использовать команду lodsb. Она делает сл. (если дословно): mov al, ds:[si] и inc si. после чего идет test al, al - это для того, чтобы проверить, не находится ли в al значение 0 (jz .quit) и если не находится, то используется функция 0eh прерывания 10h - это вывод символа на экран. Короче вывод строки заканчивающейся нулем. Далее опять запрет прерываний (маскируемых). Немаскируемые прерывания продолжают работать. А hlt - останов процессора (чтобы не грузить процессор бесконечными jmp short $). Но даже если и произойдет прерывание, то уже в этом случае зацикливаемся...
Короче, это код загрузки, если поместить на дискету в 0 сектор, то при загрузки с дискеты высветится на экран надпись "Hello from the world of real programming!" и комп "повиснет". Спасет только RESET, так как прерывания в этот момент отрублены, и Ctrl+Alt+Del не поможет.
Вообще без hlt можно обойтись... да и к тому же зачем подпись db 0xAA, 0x55... Это подпись FAT - зачем она нужна? Все равно программа потерла всю информацию о диске (эта информация начинается с третьего байта), а там у нас mov'ы всякие...

Приложение:

Ответ отправлен: 26.08.2004, 13:20
Отправитель: Алексей


Отвечает Tigran K. Kalaidjian

Здравствуйте, очень хочу научиться!
lodsb копирует байт по адресу [si] в AL и увеличивает значение si на единицу. AL проверяется на нуль, т.е. на окончание строки (посмотрите, в конце строчки msg ноль стоит).
HLT останавливает процессор. В сочетании с cli (запрет прерываний) и jmp short $ (бесконечный цикл) завешивает машину. Это нужно для обеспечения безопасности =)
На остальные вопросы ответит отрывок из руководства Ральфа Брауна:
INT 10 - VIDEO - TELETYPE OUTPUT
AH = 0Eh
AL = character to write
BH = page number
BL = foreground color (graphics modes only)
Return: nothing
Desc: display a character on the screen, advancing the cursor and scrolling
the screen as necessary
Notes: characters 07h (BEL), 08h (BS), 0Ah (LF), and 0Dh (CR) are interpreted
and do the expected things
IBM PC ROMs dated 1981/4/24 and 1981/10/19 require that BH be the same
as the current active page
BUG: if the write cau ses the screen to scroll, BP is destroyed by BIOSes
for which AH=06h destroys BP


Ответ отправлен: 27.08.2004, 21:19
Отправитель: Tigran K. Kalaidjian


Отвечает Горячев Игорь

Добрый день, очень хочу научиться!
Все достаточно просто. Собственно call - это тотже jmp, но с сохранением адреса следующей после call инструкции (именно по этому адресу идет возвращение командой ret). Далее: lodsb - команда загрузает элемент из постедовательности (цепочки) в регистр-аккумулятор AL/AX/EAX. Итак, судя по коду, когда а AL уже ничего не загрузилось (считали всю строку) - заканчиваем программу. А пока в AL не 0 (см. объявление msg) выводим AL на экран:
mov ah, 0x0E
int 0x10
Это функция BIOS (ничего другого у нас пока нет). ВСЁ!
Да, Если проц не останавливать, то ничего не будет :)

Ответ отправлен: 29.08.2004, 23:44
Отправитель: Горячев Игорь


Отвечает Ayl

Приветствую Вас, очень хочу научиться!
Ну нормально работает. Это код для boot-sector'а. При старте компа он загружается по адресу 0000:7C00. Поэтому в начале проги и стоит org 7C00h.
Далее. kputs выводит на экран строку, адрес которой передается в регистрах ds:si. Строка завершается нулевым символом.
Команда lodsb ничего никуда не копирует, а просто загружает в регистр AL значение из памяти по адресу ds:si и увеличивает значение регистра SI на 1. Вообще-то команды ассемблера уже пора бы выучить или хотя бы иметь под рукой справочник по командам. Благо, не в первый раз тут вопросы задаешь.
Соответственно, после загрузки регистра AL он проверяется на 0 с помощью команды test. Также значение регистра на 0 можно проверять с помощью команд:
-- оптимально
or al, al
and al, al
-- не очень оптимально
or al, 0
and al, 0ffh
test al, 0ffh
xor al, 0
cmp al, 0
-- совсем неоптимально, но иногда полезно:
neg al - неоптима льно, потому что значение регистра изменяется на противоположное, кроме значений 0 и 80h

Фнукция 0Eh прерывания BIOS 10h выводит символ, указанный в регистре AL на терминал (в твоем случае - на экран монитора). Обрабатывает специальным образом следующие коды символов:
0dh - возврат каретки
0ah - перевод строки
07h - звонок

Кстати, справочник по прерываниям тоже неплохо под рукой иметь.

Насчет hlt. Т.к. ОС, которой можно передать управление после завершения программы, нет, то просто выдается команда на останов процессора. По идее, в конце кода для загрузочного сектора должен идти код загрузки операционной системы и передачи ей управления. Но в этом примере этого не сделано.


Ответ отправлен: 26.08.2004, 12:00
Отправитель: Ayl


Отвечает SackTap

Доброе время суток, очень хочу научиться!
lodsb из строки по адресу, передаваемому в si (mov si, msg), по байту загружает в al. al проверяется на нуль-
символ (сигнал о конце строки, у Вас же ноль в конце строки msg стоит для того, чтобы kputs определила, когда закончить вывод.
al - это один из параметров, передаваемых фурнкции 0x0e прерывания 0x10. 0x10 - одно из основных прерываний (программных), это функции экрана (вывод). Вот, функция 0x0e - выводит один симвл на экран, причем символ передается в al.
а ассемблер с % это at&t assembler. синтаксис конечно жуть. а почитать можно ну например на lowlevel.ru

Ответ отправлен: 26.08.2004, 12:16
Отправитель: SackTap


Отвечает Стас

Здравствуйте, очень хочу научиться!
1)как работает эта kputs?
lodsb ; al загружается значением из [DS:SI]
test al, al; если AL 0
jz .quit; Выходим и процедуры печати строки
mov ah, 0x0E
int 0x10; вывод символа в AL на экран
2) куда lodsb копирует строку?
НИКУДА. lodsb не копирует строки, а см. выше
3) зачем AL проверяется, причем тут вообще AL?
еще не понял? см выше.
4) что это за прерывание и что это за ф-я 0х0e ?
Наиди доки по прерывания DOS. И конкретнее описание INT10 -видео сервис.
5)а hlt зачем проц останавливает,
Останавливает проц. Чтоб не грелся :))
6) что будет если этой команды не будет?
Проц разогреется до неведомых величин и превратится в плазму!!! ~:) Ничего не будет. Понты это!
7)и еще, что это за ассемблер в котором перед регистрами % ставиться?
Где ты это взял? Здесь не вижу...

Ответ отправлен: 26.08.2004, 13:30
Отправитель: Стас


 Вопрос № 5770

Не могу разобраться как обрабатывать в VC++ NULL значения в полях recordset-a, а ты при их выводе вываливается сообщение "несоответствие типов" (см. приложение).
И еще, если программно формируется запрос с русскими буквами, тоже вываливается ошибка - 0x800A0BCD (источник ADODB.RecordSet).
Пожалуйста помогите!!! Заранее спасибо за ответы.


Приложение:


Вопрос отправлен: 26.08.2004, 17:42
Отправитель: neepolas (1neepolas@ua.fm)

[Следующий вопрос >>] [Список вопросов]

Отвечает Евгений Иванов

Приветствую Вас, neepolas!
Тут Ассемблер.
* EMan: -=- И легко перо, да на крышу не закинешь. =-=


Ответ отправлен: 28.08.2004, 13:57
Отправитель: Евгений Иванов


Отвечает Алексей

Здравствуйте, neepolas!
Конечно немножко не по теме ;) но все же.
Если я не ошибаюсь, то должна быть такая функция IsNull и IsEmpty (или похожая). Что-то типа GetItem(long(0))->IsNull. А вот насчет использования русских букв - кодировка у базы какая? Cyr'илицу поставить надо. И при коннекте к базе тоже её (кодировку) указывать.

Ответ отправлен: 26.08.2004, 18:40
Отправитель: Алексей


 Вопрос № 5771

Имеется следующий код (см. приложение).
Функция MyMessage - просто вызывает MessageBox и все.
На сях все прекрасно работает (функция вызывается второй раз
- первый вызов просто для загрузки модуля),
но вот с использованием встроенного асема (закомментированная
вставка) не получается второй раз вызвать функцию. Вернее он вызывается но неполноценно
отсутствует рамка и т.д. с чем это может быть связано. Глядел в отладчике
там видимо сначала вызывается функция-заглушка которая просто передает управление (jmp)
на нужную мне функцию, но как тогда узнать куда загрузилась моя функция?
Вопрос такой как с помощью ассемблера в этом коде вызвать мою функцию
второй раз?


Приложение:


Вопрос отправлен: 26.08.2004, 21:04
Отправитель: 1

[Следующий вопрос >>] [Список вопросов]

Отвечает ASMодей

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


Ответ отправлен: 30.08.2004, 14:35
Отправитель: ASMодей


 Вопрос № 5772

Hi всем. У меня такой вопрос, как после перехода в protected mode передать управление по опрделенному адресу
(селектор:смещение)? У меня не получается.



Вопрос отправлен: 26.08.2004, 22:54
Отправитель: filt (linuxoid2003@mail.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает PavPS

Здравствуйте, filt!
Тута http://www.wasm.ru/article.php?article=pipm08 и помимо этого есть. Такой пример там рассмитривается.

Ответ отправлен: 26.08.2004, 23:35
Отправитель: PavPS


Отвечает Алексей

Доброе время суток, filt!
; загрузим в CS селектор на подготовленный сегмент кода. Мы не можем просто взять и написать mov CS,селектор:
dd 66h ; префикс изменения разрядности операнда
db 0EAh ; опкод команды jmp far
dd ? ; смещение в сегменте, на которое мы jmp-аем
dw ? ; селектор сегмента, в который мы jmp-аем

Ответ отправлен: 27.08.2004, 10:26
Отправитель: Алексей


 Вопрос № 5773

Здрасте ув. господа эксперты! Подскажите пожалуйста, где можно скачать ПОЛНЫЙ
справочник по Win32Api с описанием ВСЕХ функций, очень надо.
P.S.: Изв. что не по теме.



Вопрос отправлен: 26.08.2004, 23:01
Отправитель: Haineken (alex777dima@rambler.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает PavPS

Приветствую Вас, Haineken!
MSDN неплохая вешь. Ищи на сайте M$.

Ответ отправлен: 26.08.2004, 23:32
Отправитель: PavPS


Отвечает Tigran K. Kalaidjian

Здравствуйте, Haineken!
Справочники по WinAPI можно взять из MSDN, RSDN.
Или скачать: http://learnasm.narod.ru/download/win32.rar
Если у Вас установлен пакет Delpi или C++ Builder, то справочник можно найти в папке C:Program FilesCommon FilesBorland SharedMSHelp. Правда все эти варианты только на английском. На русском можно прочитать только обрывки:
http://www.bcbdev.ru/winapi.htm, также можно зайти на subscribe.ru и подписаться на рассылку "Win API на русском"
Так что учи английский, мой читатель =)
Справочник по функциям DirectX http://learnasm.narod.ru/download/directx.rar
Справочник по функциям OpenGL http://learnasm.narod.ru/download/opengl.rar

Ответ отправлен: 27.08.2004, 20:02
Отправитель: Tigran K. Kalaidjian


Отвечает Алексей

Приветствую Вас, Haineken!
www.microsoft.com
тебе нужен MSDN. Последняя версия на 3х дисках

Ответ отправлен: 27.08.2004, 10:27
Отправитель: Алексей


Отвечает Dark_Lord

Здравствуйте, Haineken!
www.msdn.com

Ответ отправлен: 27.08.2004, 10:51
Отправитель: Dark_Lord


Отвечает _vt

Доброе время суток, Haineken!
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/psdk-full.htm - самый полный справочник. Около 400 Мб. Бесплатный.
* Origin : Life begins at 1000Mhz!


Ответ отправлен: 28.08.2004, 14:00
Отправитель: _vt


Отвечает bocha

Приветствую Вас, Haineken!
Описания ВСЕХ ф-й не найдешь нигде, наиболее полный - MSDN

Ответ отправлен: 27.08.2004, 06:13
Отправитель: bocha


Отвечает SackTap

Приветствую Вас, Haineken!
лучше зайти на msdn.microsoft.com или купить диски с msdn а если надо в инете, то в поисковике набери справочник по winapi

Ответ отправлен: 27.08.2004, 12:31
Отправитель: SackTap



Форма отправки вопроса

Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

(C) 2002-2003 Команда RusFAQ.ru.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


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


Получить ответов:


 Выбор рассылки

Программисту
Assembler (26)
C / C++ (15)
Perl (6)
Builder / Delphi (13)
Pascal (24)
Basic / VBA (5)
Java / JavaScript (6)
PHP (12)
Криптография (7)
WinAPI (10)
Радиоэлектроника (11)
Пользователю
Windows 95/98/Me (50)
Windows NT/2000/XP (63)
"Железо" (44)
Поиск информации (19)
Администратору
Windows NT/2000/XP (38)
Linux / Unix (16)
Юристу
Гражданское право (10)
Семейное право (7)
Трудовое право (9)
КоАП (6)

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




Задать вопрос | Регистрация эксперта | Поиск в базе | Чат | Форумы | Новости
Проект экспертов RusFAQ.ru | Фотоальбом | Virus.RusFAQ.ru | Администрирование
Профессиональная WEB-Студия B.I.T.


Яндекс цитирования
© 2001-2004 Россия, Москва. Авторское право: Калашников О.А.

http://subscribe.ru/
http://subscribe.ru/feedback/
Адрес подписки
Отписаться

В избранное