Size: a a a

Ассемблер

2021 January 30

d

disba1ancer in Ассемблер
Den
а порты ведь тоже по логике в каком то сегменте замаплены как адреса ведь? порты это же адреса?
нет не замаплены, считай что это отдельное адресное пространство, но такое не на каждом процессоре есть, бывают процессоры (не x86) у которых всё через память
источник

A

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

MI

Maksim Iv in Ассемблер
ку
источник

MI

Maksim Iv in Ассемблер
ку
источник

A

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

A

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

MI

Maksim Iv in Ассемблер
Так инфы почерпать умных людей почитать. Так о себе программирование микроконтролеров интересует в том числе на асм
источник

D

Den in Ассемблер
Saenro T
Раз уж ты изучаешь как расставить пиксели на экране в режиме 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.
Ух, ты спасибо большое! это примерно, то о чем я думал, сохраню эту инструкцию, она точно пригодится для экспериментов :)
источник

D

Den in Ассемблер
disba1ancer
нет не замаплены, считай что это отдельное адресное пространство, но такое не на каждом процессоре есть, бывают процессоры (не x86) у которых всё через память
хочешь сказать, что например просто адрес в памяти и один из этих vga портов, про которые Saenro сказал 3c8h например, это не одно и то же?
источник

d

disba1ancer in Ассемблер
Den
хочешь сказать, что например просто адрес в памяти и один из этих vga портов, про которые Saenro сказал 3c8h например, это не одно и то же?
это не обязательно, всё от железяки зависит, раньше, когда большая часть устройств только через in out работала, у многих устройств не было мапингов на память, да и сейчас есть те у которых их нет, бывает по разному
источник

d

disba1ancer in Ассемблер
клавиатура ps/2, например, кроме как через in/out не доступна
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮b... in Ассемблер
я воспринимаю порты как регистры стороннего устройства, эти регистры (ячейки памяти стороннего устройства) номерные (для нашего х86 цпу), их можно читать, и в них можно писать, стоит лишь указать их номер и через in/out делать то, что нужно
источник

ST

Saenro T in Ассемблер
Некоторые можно только читать или только писать, некоторые меняют своё значение при чтении, а не при записи
источник

F

Faradei in Ассемблер
Добрый день. Я новичок.
Хотел бы задать общий вопрос для структуры о компиляторах и интерпретаторах
источник

F

Faradei in Ассемблер
По поводу интерпретатора и компилятора.
Первый: преобразует исходный язык в байт-код, байт-код транслируется в машинный код.

Второй: входной яп-> в машинный код по средствам интерпретатора.
Вопрос такой. На каждом шагу ретрансляции, сами программы ретрансляторы на каком языке ?
Ну то есть, транслятор байт кода пишется на машинном яп?
А интерпретатор входного языка ?
Для обощего понимания картины.
Конспект пишу
источник

d

disba1ancer in Ассемблер
Faradei
По поводу интерпретатора и компилятора.
Первый: преобразует исходный язык в байт-код, байт-код транслируется в машинный код.

Второй: входной яп-> в машинный код по средствам интерпретатора.
Вопрос такой. На каждом шагу ретрансляции, сами программы ретрансляторы на каком языке ?
Ну то есть, транслятор байт кода пишется на машинном яп?
А интерпретатор входного языка ?
Для обощего понимания картины.
Конспект пишу
похоже на какой-то бред
источник

F

Faradei in Ассемблер
disba1ancer
похоже на какой-то бред
Как-то пояснить - аргументировать ?
источник

d

disba1ancer in Ассемблер
Faradei
По поводу интерпретатора и компилятора.
Первый: преобразует исходный язык в байт-код, байт-код транслируется в машинный код.

Второй: входной яп-> в машинный код по средствам интерпретатора.
Вопрос такой. На каждом шагу ретрансляции, сами программы ретрансляторы на каком языке ?
Ну то есть, транслятор байт кода пишется на машинном яп?
А интерпретатор входного языка ?
Для обощего понимания картины.
Конспект пишу
интерпретатор может исполнять коды как ему вздумается, и через компиляцию в машкод, и через компиляцию в байт-код с последующим исполнением, интерпретатор не обязан как-либо транслировать данный ему на входе код, его задача выполнить код и выдать юзеру результат. А вот компилятор уже транслирует код в машкоды или байт-код, и это вроде как по определению, вроде как даже может транслировать в код на другом ЯП, исполнять код он не обязан
источник

F

Faradei in Ассемблер
disba1ancer
интерпретатор может исполнять коды как ему вздумается, и через компиляцию в машкод, и через компиляцию в байт-код с последующим исполнением, интерпретатор не обязан как-либо транслировать данный ему на входе код, его задача выполнить код и выдать юзеру результат. А вот компилятор уже транслирует код в машкоды или байт-код, и это вроде как по определению, вроде как даже может транслировать в код на другом ЯП, исполнять код он не обязан
Вопрос был про другое, но спасибо за некоторые уточнения
источник

d

disba1ancer in Ассемблер
Faradei
По поводу интерпретатора и компилятора.
Первый: преобразует исходный язык в байт-код, байт-код транслируется в машинный код.

Второй: входной яп-> в машинный код по средствам интерпретатора.
Вопрос такой. На каждом шагу ретрансляции, сами программы ретрансляторы на каком языке ?
Ну то есть, транслятор байт кода пишется на машинном яп?
А интерпретатор входного языка ?
Для обощего понимания картины.
Конспект пишу
и интерпретаторы и трансляторы можно написать на любом языке, но самые первые по любому писали на опкодах
источник