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

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


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

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

Выпуск № 726
от 19.05.2004, 03:10

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

Реклама

Добро пожаловать в сообщество, где можно обсуждать всесторонние вопросы и темы об Ассемблере.
Прошу экспертов регистрироваться там для помощи изучающим этот лучший язык.

http://www.npj.ru/assembler


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

_vt
Статус: Профессиональный
Общий рейтинг: 118.57
[Подробней >>]
Foamplast
Статус: Профессиональный
Общий рейтинг: 152.1
URL: мой личный сайт
[Подробней >>]
Pawel
Статус: Профессиональный
Общий рейтинг: 155.46
[Подробней >>]
 
Artemy
Статус: Опытный
Общий рейтинг: 111.83
Телефон: 8 905 549 38 66
[Подробней >>]
Евгений Иванов
Статус: Профессиональный
Общий рейтинг: 133.68
URL: Super Assembler Software
Телефон: НСС +7 831 3107039
[Подробней >>]
Ayl
Статус: Профессиональный
Общий рейтинг: 116.58
[Подробней >>]
 
Стас
Статус: Доверительный
Общий рейтинг: 129.41
[Подробней >>]
VOVAN
Статус: Опытный
Общий рейтинг: 105.49
[Подробней >>]
flasher
Статус: Начальный
Общий рейтинг: 106.76
[Подробней >>]


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

Вопрос № 5268. Уважаемые эксперты, подскажите пожалуйста как установить прерывание на какой-то диапазон портов в So... (ответов: 1)
Вопрос № 5270. Здравствуйте, эксперты! Начал заниматься программированием COM-порта и возникли вопросы. Объясните, ... (ответов: 1)
Вопрос № 5271. Здравствуйте! Подскажите, пожалуйста, как можно измерить время выполнения программы либо в тактах пр... (ответов: 3)
Вопрос № 5272. Добрый день! я хотел бы больше узнать про видеоускорители, а именно про аппаратное ускорение. как я ... (ответов: 4)
Вопрос № 5273. Где можно найти исходник или хотя бы алгоритм перехода в ring0 под W2K?... (ответов: 4)
Вопрос № 5274. продолжение вопроса 5252 Спасибо за то, что стали мне помогать. Я кусок дописал, но у меня опять нич... (ответов: 2)
Вопрос № 5275. Здравствуйте, уважаемые эксперты! Спасибо за предыдущие ответы. Ответьте, пожалуйта, почему следующи... (ответов: 4)
Вопрос № 5276. Добрый день! Вопрос к знатокам ASM'a нужно преобразовать число в строку для вывода на экран, т.е. я... (ответов: 3)
Вопрос № 5277. Доброе время суток, уважаимые знатоки! Скажите пожалуска, как можно сделать резидентную програму для... (ответов: 3)

Вопросов: 9, ответов: 25


 Вопрос № 5268

Уважаемые эксперты, подскажите пожалуйста как установить прерывание на какой-то диапазон портов в SoftIce 4.1.



Вопрос отправлен: 13.05.2004, 17:26
Отправитель: Marilyn Manson

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

Отвечает _vt

Приветствую Вас, Marilyn Manson!
По моему, командой BPIO.
E-Man : Life begins at 1000Mhz!


Ответ отправлен: 16.05.2004, 21:51
Отправитель: _vt


 Вопрос № 5270

Здравствуйте, эксперты!
Начал заниматься программированием COM-порта и возникли вопросы.
Объясните, пожалуйста, как понимать словосочетание "1.5 стоповых бита"? Почему 1.5 и как его представить в двоичном виде?
И еще:
есть MicroPC "Octagon Systems" 5066, опер. система (ROM-DOS)которого совместима с версией DOS 6.22. Также этот MicroPC имеет два последовательных порта (RS232). Так вот к первому порту цепляется счетчик газа и передает какие-то данные по протоколу IEC 61107. Ко второму порту цепляется контроллер Yokogawa. В него уже данные должны поступать по протоколу Modbus. Этот MicroPC выступает посредником, в котором нужно конвертировать протоколы. Итак, а теперь вопросы: 1) должна ли быть программа (C, Asm) обязательно быть резидентной или есть какие-то другие механизмы? 2) если в программе будут недокументированные функции DOS, будут ли они корректно работать в MicroPC?
Если кто программировал на данных MicroPC прошу поделиться опытом.
Заранее огромное спасибо!



Вопрос отправлен: 14.05.2004, 00:11
Отправитель: Эдуард (hied345@mail.ru)

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

Отвечает _vt

Приветствую Вас, Эдуард!
> должна ли быть программа (C, Asm) обязательно быть резидентной или есть какие-то другие механизмы?
Если этот PC используется только для твоей задачи, то можно сделать обычную программу - пусть бесконечно работает! :) Есть еще механизм
драйверов... А в чем проблема?
> если в программе будут недокументированные функции DOS, будут ли они корректно работать в MicroPC?
Если их поддерживает этот DOS, то будут. Но лучше не рисковать. :) И зачем использовать недокументированые функции?
> Если кто программировал на данных MicroPC прошу поделиться опытом.
Я не программировал, но если он действительно совместим с MS-DOS, то никаких особых проблем возникнуть не должно.
E-Man : Life begins at 1000Mhz!


Ответ отправлен: 16.05.2004, 21:51
Отправитель: _vt


 Вопрос № 5271

Здравствуйте! Подскажите, пожалуйста, как можно измерить время выполнения программы либо в тактах проца, либо в миллисекундах?



Вопрос отправлен: 14.05.2004, 12:12
Отправитель: dimon1979 (dimon4386@yandex.ru)

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

Отвечает Foamplast

Приветствую Вас, dimon1979!

Есть такая команда: Read Time-Stamp Counter. Она считывает число из 64-разрядного счётчика тактов. Он увеличивается с каждым тактом и обнуляется при перезагрузке. Младшая часть этого счётчика после выполнения команды попадает в регистр Eax, страшая - в Edx. Обозначается команда RDTSC.




Ответ отправлен: 16.05.2004, 02:04
Отправитель: Foamplast


Отвечает Pawel

Приветствую Вас, dimon1979!
В тактах: посчитайте суммарный вес блока комманд(в байтах) и разделите на разрядность проца. Получите результат для реального режима проца.

Ответ отправлен: 15.05.2004, 20:58
Отправитель: Pawel


Отвечает Artemy

Доброе время суток, dimon1979!
Да

Ответ отправлен: 14.05.2004, 16:30
Отправитель: Artemy


 Вопрос № 5272

Добрый день!
я хотел бы больше узнать про видеоускорители,
а именно про аппаратное ускорение.
как я понимаю, когда я посылаю команду OpenGL,
то винда крутит-вертит её, а потом отправляет
видеоускорителю (если он есть), вместо того, чтобы делать это всё через процессор.
видеоускоритель имеет спец. микорсхемы, которые и
обрабатывают все эти полигоны и освещение,
причём в память они лазят в обход ЦПУ, а потом карта
выводит уже готовые объекты прямо в видеопамять.
правильно ли я понял работу видеоускорителя?



Вопрос отправлен: 14.05.2004, 17:03
Отправитель: soflot (soflot@ukr.net)

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

Отвечает Foamplast

Здравствуйте, soflot!
Да, я думаю, не хуже меня.


Ответ отправлен: 16.05.2004, 02:05
Отправитель: Foamplast


Отвечает Pawel

Доброе время суток, soflot!
В обшем так.

Ответ отправлен: 15.05.2004, 21:01
Отправитель: Pawel


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

Здравствуйте, soflot!
Да, правильно.
* EMan: -=- Любовь существует! =-=


Ответ отправлен: 15.05.2004, 00:22
Отправитель: Евгений Иванов


Отвечает _vt

Здравствуйте, soflot!
Как-то муторно... :-)
OpenGL - это кросс-платформенное API для работы с графикой. В зависимости от реализации на конкретной платформе, программа, написанная с использованием OpenGL, может как задействовать аппаратные возможности видеоускорителя, так и нет. Например, в Windows, OpenGL API был реализован программно, а для нормальной работы игр и прочей графики OpenGL, надо было отдельно устанавливать драйвера OpenGL для конкретной видеокарты. Например, для видеокарт nVidia, файл opengl32.dll и ему сопутствующие, входят в комплект драйверов видеокарты. Реализация от nVidia использует расширенные возможности CPU (MMX,SSE и пр.), использует аппаратные возможности видеокарты и ее процессора (GPU). GPU обрабатывает "все эти полигоны и освещение" с использованием системной памяти и памяти видеокарты. Полностью "в обход" CPU он не работает.
E-Man : Life begins at 1000Mhz!


Ответ отправлен: 16.05.2004, 21:51
Отправитель: _vt


 Вопрос № 5273

Где можно найти исходник или хотя бы алгоритм перехода в ring0 под W2K?



Вопрос отправлен: 14.05.2004, 20:00
Отправитель: Dart Bobr (bnv@chtei.cv.ua)

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

Отвечает Pawel

Добрый день, Dart Bobr!
Интересно, а слыхал ли Foamplast про драйвера (sys например), и про то, что они работают именно в ring-0????!!!!
Есть интересный пример, написанный Kevin Zheng (Zheng Hongwen) на FASM, переводящий приложение (EXE) под Win32 в ring-0? с использованием sys драйвера.
Если интересно пиши мне, или загляни на
http://board.flatassembler.net/


Ответ отправлен: 16.05.2004, 14:09
Отправитель: Pawel


Отвечает _vt

Доброе время суток, Dart Bobr!
В интернете. Точно есть ;)
E-Man : Life begins at 1000Mhz!


Ответ отправлен: 16.05.2004, 21:52
Отправитель: _vt


Отвечает Foamplast

Добрый день, Dart Bobr!

Ха-ха-ха. В ring0. Ха-ха. Хоть винда и не лучшая система, а вот в ring0, скорее всего, не пустит. (я не рассматриваю полукровок 9Х). Пишите драйвер. Пусть пользователь его сам ставит. Или программа ставит (если у пользователя есть такие права).


P.S. Если найдёте такой исходник, обязательно пришлите его мне!


P.P.S. А чего это всем так в ring0 хочется, там что бананы на пальмах, или деньги мешками? На мой взгляд, там совершенно неуютно.




Ответ отправлен: 16.05.2004, 02:06
Отправитель: Foamplast


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

Приветствую Вас, Dart Bobr!
В ней самой же.
* EMan: -=- Любовь существует! =-=


Ответ отправлен: 15.05.2004, 00:23
Отправитель: Евгений Иванов


 Вопрос № 5274

продолжение вопроса 5252
Спасибо за то, что стали мне помогать. Я кусок дописал, но у меня опять ничего не получается,исправьте, пожалуйста, ошибки или подскажите в чем они, заключаются.


Приложение:


Вопрос отправлен: 14.05.2004, 20:36
Отправитель: Саша (zevskl@tut.by)

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

Отвечает Pawel

Доброе время суток, Саша!
Много ошибок.

Ответ отправлен: 16.05.2004, 14:12
Отправитель: Pawel


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

Здравствуйте, Саша!
Ошибки одна на другой.
И все глупые - то тут перепутано, то здесь забыто.
Ищи и исправляй - только если ты сам будешь это учиться делать, станешь настоящим программстом.
Скажу лишь, что 61h порт нужно сначала устанавливать 7 бит, а потом сбрасывать.. а не исходное.
Удачи!
* EMan: -=- Любовь существует! =-=


Ответ отправлен: 15.05.2004, 00:24
Отправитель: Евгений Иванов


 Вопрос № 5275

Здравствуйте, уважаемые эксперты! Спасибо за предыдущие ответы.
Ответьте, пожалуйта, почему следующие строки эквивалентны
mov a,offset ddd
(1)mov cs:[a],0ffh
(2)mov a,0ffh
a dw ?
ddd:
(1) строка должна записывать по адресу метки ddd число 0xff, а (2) должна в переменнюу записывать 0xff (по моей логике). Я рассуждаю так: переменная 'a' хранить смещение, так почему нельзя записать так как записано в строке (1). Меня удивило, что под отладчиком эти строки эквивалентны!?
word ptr cs:[...]. И что такое это значит. Я понимаю, что это указатель на слово по адресу cs:[...]. Но почему ассемблер в строке (2) не делает, что я хочу. Все... я заговорился от непонимания... Объясните, пожалуста.Если можно поподробнее.
Спасибо.



Вопрос отправлен: 14.05.2004, 21:29
Отправитель: Alexander

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

Отвечает Foamplast

Добрый день, Alexander!

Предисловие: Все заданные вопросы происходят из-за неоднозначности синтаксиса ассемблера для x86, предложенного в своё время Intel. Конечно, же, умные люди были всегда, и есть синтаксис, с которым бы у Вас не возникло таких вопросов - это синтаксис AT&T. К сожалению, он не поддерживается microsoft, а потому не распространён под DOS/Windows. В настоящее время уже осознали эту проблему, и существуют ассемблеры без такой ерунды: NASM и FASM. Используйте их!

Ответ: Всё дело в том, что в синтаксисе Intel [address] означают обращение к памяти по адресу address. То есть Mov [25], Al означает "поместить значение регистра Al в ячейку памяти под номером 25". С этим у Вас всё ОК. Но прикол в том, что Mov a, 5 значит "занести 5 в ячейку памяти, под номером, соответствующим переменной а"! То есть Mov a, 5 и Mov [a], 5 - это одно и то же! Соответственно обе Ваши команды заносят 0хFF в переменную а. Чтобы заполнить ячейку ddd, пишите либо Mov [ddd], 0xff, либо
Mov Eax, offset ddd
Mov [Eax], 0xff




Ответ отправлен: 18.05.2004, 04:04
Отправитель: Foamplast


Отвечает Ayl

Доброе время суток, Alexander!
Как это эквивалентны? Нифига не эквивалентны.
mov a, offset ddd эквивалентно mov ds:[a], offset ddd - записывает в переменную a смещение метки ddd. Адресация выполняется через сегментный регистр ds. Т.к. у тебя скорее всего программа типа COM, то значения регистров CS и DS совпадают.
Команда (1) должна при компиляции выдавать предупреждение о необходимости указания размера операндов. Вообще-то она должна выглядеть так: mov word ptr cs:[a], 0ffh. И производит она запись в переменную a значения 00FFh.
Команда (2) эквивалентна команде (1) в режиме MASM. В этом режиме для доступа к переменным можно не указывать квадратные скобки. Я не люблю такую запись. Если использовать компилятор TASM в режиме IDEAL, то команда (2) вызовет ошибку синтаксиса, там нужно использовать запись, подобную (1).
Кстати, насчет эквивалентности я не совсем прав, они эквивалентны только при условии равенства значений регистров CS и DS. А так, во-первых, команда (1) требует на 1 байт больше за счет применения префикса переопределения сегмента (cs), а во-вторых, команда (2) использует для обращения к памяти регистр DS.
Насчет того, что (1) должна записывать по адресу метки ddd число 0ffh - это ты не прав. Чтобы сделать то, что ты хочешь, надо бы написать что-то типа такого:
mov byte ptr cs:[[a]], 0ffh
но такой команды не существует! Косвенно-косвенной адресации в процессорах Intel нет! И сомневаюсь, что она может быть в каком-либо другом процессоре. Чтобы сделать то, что ты хочешь, надо писать так:
lea si, ddd ; эквиваленно mov si, OFFSET ddd
mov byte ptr cs:[si], 0ffh


Ответ отправлен: 17.05.2004, 16:32
Отправитель: Ayl


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

Доброе время суток, Alexander!
Это тебе не С плюс плюс ;))
Тут нет указателей и прочей херни.
Есть только адрес и всё.
mov a,offset ddd - занесёт по адресу [a] число, которое представляет собой адрес метки ddd.
Дальше идём...
(1) занесёт в переменную a, которая слово, число 255.
(2) тоже самое.
Чтобы тебе сделать то, что ты хочешь, делай так:
mov [a], offset ddd
...
mov si,[a]
mov [si], word ptr 255 или mov [word ptr si], 255
Бывай!

* EMan: -=- Любовь существует! =-=


Ответ отправлен: 15.05.2004, 00:24
Отправитель: Евгений Иванов


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

Доброе время суток, Alexander!
Запутанно-то как!
mov a,offset ddd
1)mov cs:[a],0ffh
2)mov a,0ffh
Совсем не эквивалентны, если DS указывает на другой сегмент.
По умолчанию, именно он используется для адресации данных.
Или речь идет о том, что ты сначала в ячейку памяти А запихиваешь какой-то Offset, а потом в неё же (но через CS) уже байтовое значение.
А хотел адресовать память через адрес в памяти? Т.е. примеро так mov [offset [a]],0ffh. Так нельзя. Загрузи в аресные регистры offset, через них адресуй, они для этого и существуют.


Ответ отправлен: 15.05.2004, 04:36
Отправитель: Стас


 Вопрос № 5276

Добрый день!
Вопрос к знатокам ASM'a нужно преобразовать число в строку для вывода на экран, т.е. я в проге вычисляю некоторые данные, а вто с выводом проблемы так как не преобразовал вывод. Вот кусок моего вывода:
mov ah,40h ;Запрос на вывод
mov bx,01 ;Выводное устройство
mov cx,2 ;Макс.число байт
lea dx,[y1] ;Адрес области данных
int 21h ;Вызов DOS



Вопрос отправлен: 14.05.2004, 21:27
Отправитель: Владислав

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

Отвечает Foamplast

Приветствую Вас, Владислав!

Посмотрите архив рассылки. Этот вопрос задают каждую неделю.




Ответ отправлен: 18.05.2004, 04:05
Отправитель: Foamplast


Отвечает VOVAN

Приветствую Вас, Владислав!
вот вывод НЕХ числа на экран. если надо вывести десятичное, могу и для десятичного кинуть. тут число должно быть в АХ.
mov cx,4
mov bx,16
loops:
xor dx,dx
div bx
push dx
loop loops
mov cx,4
loops1:
pop dx
cmp dl,10
jae bukva
cifra:
add dl,'0'
jmp prints
bukva:
add dl,'A'-10
prints:
mov al,dl
int 29h
loop loops1

Ответ отправлен: 14.05.2004, 22:16
Отправитель: VOVAN


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

Приветствую Вас, Владислав!
В общих чертах, если нужно перевести число в регистре AX в символьную строку:
1) проверяешь AX=0 - завершение перевода.
2) делишь AX на 10.
3) К остатоку от деления (0..9) прибавляешь код 30h - получашь символ от '0' до '9'.
4) Помещаешь его в строку которая готовится к выводу на экран.
Единственное, помни, что ты идешь от послених цифр числа к началу. И сохранять надо также. От конца к началу.
Напр.: 1234 / 10 = 123(остаток 4) /10 = 12(остаток 3) /10 = 1(остаток 2)/10 = 0(конец цикла)(остаток 1).
Если так и вывести получишь 4321.
Вообще этот вопрос регулярно здесь мусолится. Смотри архив.

Ответ отправлен: 15.05.2004, 04:17
Отправитель: Стас


 Вопрос № 5277

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



Вопрос отправлен: 15.05.2004, 03:04
Отправитель: OL

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

Отвечает Foamplast

Доброе время суток, OL!
Можно написать оболочку, которая будет передавать команды настоящей оболочке, анализируя их. Если введена ненужная команда, можно выдать соответствующее сообщение.


Ответ отправлен: 18.05.2004, 23:45
Отправитель: Foamplast


Отвечает Pawel

Доброе время суток, OL!
Под какую ОС? Что значит блокировка программ.
Блокировка запуска? Или блокировка обращений к памяти? Или приостановка выполнения программы?
Опишите точнее.


Ответ отправлен: 16.05.2004, 14:18
Отправитель: Pawel


Отвечает flasher

Доброе время суток, OL!
исходники резидентов в инете полно... возьму.. и под ся найтрой...
вот http://www.codenet.ru/progr/asm/vwd/index.php

Ответ отправлен: 15.05.2004, 09:43
Отправитель: flasher



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

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

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

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

Ваше имя:

Ваш e-mail:

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


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

Ваш вопрос:


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


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


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

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

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




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


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


http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу


В избранное