Size: a a a

Ассемблер

2021 January 30

D

Den in Ассемблер
Пьяный Сурикат
У портов есть адреса, но порты это не адреса. В "сложных" ОС (Win, *ix) порты действительно проецируются на участки памяти (memory mapped I/O), но в DOS в обычном реальном режиме - по-моему, нет
а, спасибо, для меня это пока темная территория, хоть понять в общих чертах
источник

ПС

Пьяный Сурикат... in Ассемблер
В MMIO честно говоря слабо разбираюсь, может завтра спецы подскажут ещё
источник

D

Den in Ассемблер
Пьяный Сурикат
У портов есть адреса, но порты это не адреса. В "сложных" ОС (Win, *ix) порты действительно проецируются на участки памяти (memory mapped I/O), но в DOS в обычном реальном режиме - по-моему, нет
а что-то такое вспомнил,  тоже на ардуинке в порт записывал с помощью out вроде, как то не связал, т.е то что спроецировано как адрес всё-таки можно mov обойтись как считаешь?
источник

ПС

Пьяный Сурикат... in Ассемблер
Надо сначала спроецировать ))) В DOS реального режима вроде так не делалось, может в защищённом можно.
В некоторых процах (AVR в ардуине) по-моему и регистры, и порты сразу имеют адреса в памяти. Тут вроде нет.
источник

ПС

Пьяный Сурикат... in Ассемблер
Den
а что-то такое вспомнил,  тоже на ардуинке в порт записывал с помощью out вроде, как то не связал, т.е то что спроецировано как адрес всё-таки можно mov обойтись как считаешь?
источник

ПС

Пьяный Сурикат... in Ассемблер
источник

D

Den in Ассемблер
Пьяный Сурикат
Надо сначала спроецировать ))) В DOS реального режима вроде так не делалось, может в защищённом можно.
В некоторых процах (AVR в ардуине) по-моему и регистры, и порты сразу имеют адреса в памяти. Тут вроде нет.
просто насколько я вспоминаю, при загрузке bios именно маппит адреса найденных  устройств в память а это таблица прерываний вроде называлось, такие основные как накопители клава порты всякие типа lpt com usb и тд, чтобы потом с ними можно было как-то взаимодействовать ну и видеопамять тоже, все раскладывает по адресам ссылкам на микропрограммы, где то в самом начале поэтому и адреса такие типа 0x10 и тд. а сами микропрограммы обработчики, типа где то в другом месте памяти уже. а ну это уже прерывания bios  получаются а не порты напрямую конечно
источник

ПС

Пьяный Сурикат... in Ассемблер
То прерывания, а то порты
источник

ПС

Пьяный Сурикат... in Ассемблер
Это разные вещи
источник

ПС

Пьяный Сурикат... in Ассемблер
Ещё бывает память устройств (например, видеопамять) проецируется (мапится) на участок ОЗУ
источник

ПС

Пьяный Сурикат... in Ассемблер
Короче глянь тут по тегу #book, в любой книге по асму x86 расписано как это всё работает
источник

D

Den in Ассемблер
Пьяный Сурикат
Короче глянь тут по тегу #book, в любой книге по асму x86 расписано как это всё работает
а, спасибо, обязательно изучу со временем, это надо!
источник

К

Классный ник... in Ассемблер
Всем привет
источник

К

Классный ник... in Ассемблер
Всем кто в сети, есть ссылки на книжечки с асм
источник

楽園松本 in Ассемблер
Поищи в этой группе. Здесь их десятки
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮b... in Ассемблер
источник

🐖

🐖Глебка💨 in Ассемблер
Объясните мем
источник

🐖

🐖Глебка💨 in Ассемблер
источник

ST

Saenro T in Ассемблер
Den
извините что встреваю в разговор, а такой вопрос родился, out/in и mov это не одно и тоже т.е. можно ли в порт так записать:
mov [0x92], al
и вместо in
mov al, [0x92]
Раз уж ты изучаешь как расставить пиксели на экране в режиме int 10h, #3, чтобы они образовали окружность, то полагаю что вскоре ты захочешь раскрасить эти пиксели по своему усмотрению.
И тут тебе на помощь придут VGA порты: 3C8h, 3C9h.
В этом режиме, в ДОСБОКСЕ, одновременно можно отобразить всего 256 цветов из 262144 возможных. Но в чистом ДОСе и в этом видеорежиме одновременно можно замутить до 64000 уникальных цветов, но это уже прибегая к некоторым хитростям.
Итак, цвета программируются последовательно, а значения RGB лучше задавать заранее (подготовить палитру) в памяти и в нужный момент программировать их через порт 3C9, туда через этот порт можно отправить до 768 байт.
Порт 3C8h — индексный, т.е. в него ты записываешь адрес от 0 до 255, начиная с которого нужно начинать записывать байты через порт 3C9h.
Вся прелесть в том, что тебе не нужно заморачиваться с инкрементом индекса в 3C8h, как только ты запишешь значение в 3C9h, в 3C8h автоматически произойдёт инкремент индекса. Поэтому если ты укажешь начальный адрес — 0 (из 256 возможных), то можешь последовательно отправлять в порт 3C9 все 768 байт.
Каждый адрес принимает последовательно три байта (R,G,B).
768 байт — это 256×3 ячеек, т.е. 256 для R, 256 для G, 256 для B. И программируются , цвета поочерёдно: (R,G,B),(R,G,B),(R,G,B)...
Каждый цвет программируется тремя значениями RGB, каждое из этих значений лежит в диапазоне от 0 до 3Fh, отсюда и ограничения на количество цветов 64^3=262144.
А поскольку ячеек 768, то 768/3=256 цветов.
А вот пример программирования VGA через эти порты:
mov dx, 3C8h
xor al, al
out dx, al — будем шить с самого начала.
inc dx — 3C9h
mov cx, 300h — 768 байт
mov si, — адрес палитры из 768 байт
rep outsb — зашить последовательно все 768 байт
В итоге каждый цвет пикселя будет определяться значением от 0 до FFh.
источник

楽園松本 in Ассемблер
Я думаю, настало для reverse engeneers время переходить на новые технологии реверса. Подключать ИИ и обучение -- первое, что приходит на ум.
источник