Рассылка закрыта
При закрытии подписчики были переданы в рассылку "RFpro.ru: Ассемблер? Это просто! Учимся программировать" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
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.
Вопрос и дополнение |
Ваш вопрос:
Приложение (если необходимо):
Получить ответов:
Выбор рассылки |
Программисту 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.
http://subscribe.ru/
http://subscribe.ru/feedback/ |
Адрес подписки |
Отписаться |
В избранное | ||