Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler: Windows/protected mode
Войти
Регистрация
Восстановить пароль
 
Sierra26
2 / 2 / 2
Регистрация: 04.06.2015
Сообщений: 103
1

Зажечь пиксель

16.02.2018, 17:21. Просмотров 169. Ответов 11
Метки нет (Все метки)

Покопался в интернете про язык Assembler. Многие пишут, что с помощью него можно все. А примеров этого всемогущего языка, только Hallow World или использование Win - функций, которые в языке Си тоже можно вызвать. В связи с этим хотел задать вопрос. Можно ли зажечь конкретный пиксель в Windows 7 посреди экрана, не использую функции windows ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.02.2018, 17:21
Ответы с готовыми решениями:

Зажечь светодиоды на клавиатуре
MODEL SMALL .DATA ;------------------------------ .STACK 1024...

Debug.exe. Зажечь светодиоды на клавиатуре.
1.используя текстовый редактор,создайте файлы,при запуске кторых утилитой debug...

Каким стандартным софтом Windows можно смотреть пиксель в пиксель?
Здравствуйте. Есть изображение - дизайн сайта. Можно ли каким встроенным...

Нужно ввести в элементы массива 0, если пиксель белый, или 1 ,если пиксель чёрный
Есть чёрно белая картинка 3x5. Нужно ввести в элементы массива 0, если пиксель...

Верстка "пиксель в пиксель"
В заданиях на верстку, часто вижу требования верстки "пиксель в пиксель" с...

11
ФедосеевПавел
Модератор
3667 / 2036 / 842
Регистрация: 01.02.2015
Сообщений: 6,772
16.02.2018, 17:41 2
Нет.
0
Uncle Remus
Заблокирован
16.02.2018, 19:29 3
Sierra26,
можно, но для чего это нужно?
0
Sierra26
2 / 2 / 2
Регистрация: 04.06.2015
Сообщений: 103
16.02.2018, 19:53  [ТС] 4
Ну применение. Я найду. Первое - это понять как это работает. Если есть возможность написать небольшой код, то я буду очень благодарен.
0
Kukuxumushu
Нарушитель
990 / 545 / 100
Регистрация: 13.06.2015
Сообщений: 1,794
Завершенные тесты: 2
16.02.2018, 20:11 5
Цитата Сообщение от Sierra26 Посмотреть сообщение
не использую функции windows ?
Вы знаете что такое API? Вот например, можно ли написать приложение для ВК, не используя VK API?
Для программиста Windows - это закрытый чёрный ящик. Что внутри него - неизвестно, наружу выходят только функции WinAPI. Более того, ядро Windows работает в привилегированном режиме защиты процессора, инструкции непосредственного доступа к аппаратуре работают только в нём, а пользовательские программы работают в другом кольце защиты.
1
Sierra26
2 / 2 / 2
Регистрация: 04.06.2015
Сообщений: 103
16.02.2018, 21:23  [ТС] 6
"Вы знаете что такое API?" не знаю. Нечего не понял. То есть можно пользоваться только теме функциями которые предоставляет Windows. А как же библиотека OpenGL она тоже рисует с помощью LineTo и.т.д?
0
Kukuxumushu
Нарушитель
990 / 545 / 100
Регистрация: 13.06.2015
Сообщений: 1,794
Завершенные тесты: 2
16.02.2018, 21:38 7
Sierra26, библиотека OpenGL рисует всё в памяти, а чтобы вывести нарисованное на экран, оно должно пройти через Z-буфер и ещё кучу всего, чтобы Windows смогла определить какими окнами ваш рисунок загораживается, в каком положении окно с ним находится на экране и т.д.
Более того, любое приложение Windows должно использовать как минимум 1 функцию API - ExitProcess. Они потому и называются "приложениями", т.к. "прилагаются" к Windows и пользуются тем, что она предоставляет, а не чем вздумается. Без API и контроля доступа со стороны ОС программы просто поубивали бы друг друга за ресурсы аппаратуры.
1
ФедосеевПавел
Модератор
3667 / 2036 / 842
Регистрация: 01.02.2015
Сообщений: 6,772
16.02.2018, 21:45 8
https://ru.wikipedia.org/wiki/OpenGL
Таким образом появился программный интерфейс OpenGL, который стандартизирует доступ к графической аппаратуре путём смещения ответственности за создание аппаратного драйвера на производителя графического устройства.
Т.е. это драйвер видеоадаптера (видеоускорителя), взаимодействующий с ядром Windows.
1
Sierra26
2 / 2 / 2
Регистрация: 04.06.2015
Сообщений: 103
16.02.2018, 21:51  [ТС] 9
Я вас понял. Но OpenGl не трогает функции Windows и у нее получается "зажечь пиксель", только в окне. Z - буфер, если я не обижаюсь тоже принадлежит OpenGl. Но не об этом. Почему я задал этот вопрос. Повторюсь. Во многих книгах и формумах сказано, что с помощью assembler можно сделать все. Где-то читал что можно сжечь винт. И меня заинтересовал это язык. А на деле оказалась что он обращается к функциям windows. Такое обращение можно сделать и с помощью языка C. Тогда есть ли приимущества этого языка (asm) над другими. (Кроме быстроты работы)?

Добавлено через 3 минуты
"Т.е. это драйвер видеоадаптера (видеоускорителя), взаимодействующий с ядром Windows. " а если ядро не Windows?
0
Kukuxumushu
Нарушитель
990 / 545 / 100
Регистрация: 13.06.2015
Сообщений: 1,794
Завершенные тесты: 2
16.02.2018, 21:54 10
Sierra26, на самом ассемблере можно сделать всё, что угодно, если у вас нет ОС, и вы пишите прям под голую аппаратуру. Если же вы пишите приложение под конкретную ОС - будьте добры играть по её правилам. Ну и "всё что угодно" тоже в рамках разумного - производители аппаратуры тоже не идиоты, железо управляется через порты в соответствии со своим собственным мини-API, в которое функции для "сжигания" давно уже не включают.
1
ФедосеевПавел
Модератор
3667 / 2036 / 842
Регистрация: 01.02.2015
Сообщений: 6,772
16.02.2018, 22:10 11
Цитата Сообщение от Sierra26 Посмотреть сообщение
Тогда есть ли приимущества этого языка (asm) над другими. (Кроме быстроты работы)?
В рамках Windows - нет. Т.к. оптимизация кода включает столько правил, что в уме их трудно удержать. А современные компиляторы уже производят код, сопоставимый с ручной оптимизацией.

Но знать ассемблер нужно, т.к. в C/C++ есть такое понятие "интринсики" - интерфейс для включения машинных инструкций в код. И тут знание ассемблера пригодилось бы. Вот пример очень быстрого вычисления НОД, который привёл Pacific на другом форуме
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
FORCEINLINE num64 GCD(num64 a, num64 b)
{
    if (a == 0) return b;
    if (b == 0) return a;
 
    unsigned long shift;
    _BitScanForward64(&shift, a | b);
 
    unsigned long index_a;
    _BitScanForward64(&index_a, a);
    a >>= index_a;
 
    do
    {
        unsigned long index_b;
        _BitScanForward64(&index_b, b);
        b >>= index_b;
 
        const num64 a1 = a;
        const num64 b1 = b;
        a = (a1 > b1) ? b1 : a1;
        b = (a1 > b1) ? a1 : b1;
 
        b -= a;
    } while (b);
 
    return (a << shift);
}
Он построен на глубоком понимании ассемблера.
Кроме того, существуют инструкции SIMD - которые дают ускорение при однообразной обработке массивов. И их тоже нужно знать для ускорения.
А с выводом на экран, воспроизведении звука, ввода с диска/клавиатуры при помощи ОС Windows/Linux/MacOS нужно смирится - это оплата стабильности работы всей системы.
1
Sierra26
2 / 2 / 2
Регистрация: 04.06.2015
Сообщений: 103
18.02.2018, 01:51  [ТС] 12
Всем Спасибо. Узнал много нового
0
18.02.2018, 01:51
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.02.2018, 01:51

Как зажечь светодиод?
Добрый день. Решил заняться электроникой, а конкретно - с простого светодиода....

Зажечь светодиод по таймеру
Всем привет! Есть диод, кнопка и **duino Mega2560. Задача состоит в том,...

Зажечь светодиод Scrol Lock
Задача стояла программно Зажечь светодиод Scrol Lock не переключая саму...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru