Как ассемблеровский код переводит команды в цифровые сигналы, объясните максимально просто и доходчиво?
>>192819424 (OP)>> объясните максимально просто и доходчивоберёт и превращает, проще объяснить не смогу
>>192819424 (OP)Ассемблер (программа) транслирует мнемонические инструкции в двоичный код. Потом линкер создаёт исполняемый (ну или не исполняемый) файл.
>>192819682>Ассемблер (программа) транслирует мнемонические инструкции в двоичный код.Как он переводит в двоичный код?>Потом линкер создаёт исполняемый (ну или не исполняемый) файл.Как проц понимает что нужно исполнить этот файл?
>>192819424 (OP)>Как ассемблеровский код переводит команды в цифровые сигналы, объясните максимально просто и доходчиво?>У тебя же эти сигналы уже в оперативке лежат или на жёстком диске. Т.е. сама информация, как нужно обращаться к процессору.
Есть разные процы и там разный ассемблер, как програма может одинаково работать на тех или иных процах?
У интеловцев спроси, они ж тебе проц поставляют, который понимает как раз эти команды.Как работает?Читай wiki/Машина_Тьюринга
>>192819771>Как он переводит в двоичный код?Каждой инструкции и набору параметров соотстветстует определённая последовательность байтов.>>192819771>Как проц понимает что нужно исполнить этот файл?Операционная система создаёт в памяти ядра новый PCB, создаёт виртуальное адресное пространство, загружает в него код и данные из исполняемого файла и устанавливает указатель инструкций на точку входа.
>>192819424 (OP)Ассемблерный код практически эквивалент двоичного. Т.е. всегда мождно однозначно перевести асм в бинари и обратно для одного типа процессора.
>>192819907Ок например возьмем отображения символа в консоле, что бы отобразить символ, проц гоняет соотвествующие в определенном порядке нули и единицы циклично по кругу. Например можно создать такой исполняемый файл "0101001010010101001010010100101010010100101010010010000", он будет работать?
>>192819850Для разных ассемблеров, внезапно - никак не могут. Вот для этого и придумали Си, Фортран и прочее высокоуровневое погромирование.
>>192820183>Например можно создать такой исполняемый файл "0101001010010101001010010100101010010100101010010010000", он будет работать?На какой операционной системе?
>>192820183>Например можно создать такой исполняемый файл "0101001010010101001010010100101010010100101010010010000"Нет, нельзя. Это не исполняемый файл.
Двачую вопром! Как на физическом уровне проц понимает, что надо исполнить. И давайте без вот этой вот хуйни с операционной системой.
Пиздец вопросы, ты собрался свой проц делать? Зачем эти дебри, там же еще у каждого проца своя реализация, свои расширения, свой принцип работы. Тебе на это говно по хорошему ответит только лишь глава отдела разработки микроархитектуры конкретного проца. Дебильные вопросы. Есть процсессор как черный ящик, в который ты кидаешь что-то, и он тебе однозначно выдает в ответ результат. Все.
>>192820346Давай ты попробуешь для начала сам сдать миккроархитектуру 80086, а не будешь доебывать всех на двочах.
>>192819424 (OP)В компьютере только цифровые сигналы и есть. Во время ассемблирования компьютер переводит цифровые сигналы, кодирующие символы ассемблерного текста, в цифровые сигналы, кодирующие инструкции процессора и их параметры. Как инструкция, адрес которой оказался в указателе инструкции, порождает сигналы - гугли механизм работы процессора и его взаимодействия с памятью. Ну, типа, открываются соответствующие адресу вентили, коммутирующие регистр инструкции с соответствующей ячейкой памяти, в регистре инструкции устанавливаются кодирующие ту же инструкцию уровни напряжения, вызывая каскад переключений в АЛУ, которое выставляет в целевом регистре уровни напряжения, соответствующие битам результата
>>192820346На самом нижнем примитивном. Это черный ящик со входами и выходами. В него вставлена бесконечная лента с инструкциями, которая непрерывно поступает в проц. Проц, встречая очередную инструкцию, делает различные действия над внешней или внутренней амятью и внешними устройствами (портами ввода-вывода), включая к тому же быструю перемотку этой самой ленты (ветвеления, переходы, вызовы, прерывания). Всё, никакой магии, тупо следование инструкциям. "Понимает" он не больше того, что в него заложено разрабами.
>>192820554Блядь, ну не хуя же не понятноНахуй ты вообще вызвался что-то объяснять, ну нихуя же не понятно
>>192819424 (OP)Каждое слово переводится в какое-то число, каждое число в двоичное число. Каждый нолик или единица в уровен напряжения на контактах чипов.
>>192819424 (OP)Прост блять. У тебя есть регистры, стек и прочее говно. Ты хуяк туда инфу, а оно и посчитало. Не лезь в ассемблер, оно тебя сожрет блять
>>192820346нихуя в процах не понимаю, но очевидно же, существует "протокол" исполнения любого блока данных, который летит в процессор...ну типа взять данные/преобразовать/положить результат в ячейку памяти (вывести на экран или другое периферийное устройство зарегистрированное в биосе)...гугли модель OSI - станет немного понятнее
>>192820708Формат исполняемого файла обязывает обрамлять собственно код целой тучей заголовков, просто исполнить что-либо под шиндовс так просто не удастся. Но это уже другая история.
>>192820914>оно тебя сожрет блятьЧто да, то да. Туда лучше не лезть, и забыть, всё что здесь осуждается, это не то.
>>192821084Читай про архитектуру процов, инструкции итд.>>192821206>Туда лучше не лезтьИменно. Пишите на более высоком уровне. Только еблан пишет на ассемблере сейчас. (их нет)
>>192821293Контроллер памяти забирает инструкции и данные из оперативной памяти. Управляющий блок разбирает полученные инструкции и формирует соответствующие управляющие сигналы.
>>192821013Что есть файл - поток информации на носителе. Это от носителя зависит. Но в любом случае, файл загружается в оперативную память посредством контроллера ПДП (прямого доступа к памяти). В древних компах вообще программно грузилось - через порты ввода(вывода), тупо читался байт из порта, записывался в ячейку памяти, (да на ассемблере это было можно), следующий цикл, если грубо.
>>192821323Если эти нули и единицы являются валидными двоичными кодированиями x86 или x86-64 инструкций, то да.
>>192821326>Именно. Пишите на более высоком уровне. Только еблан пишет на ассемблере сейчас. (их нет)А как же микрооптимизации? Ну это конечно уже только для суперпиздатых специалистов, у которых компилятор обосрался.
>>192821287Прост. Тебе нужна ракета. Собираешь из говна и палок, кислородных и топливных баллонов, движка прошлого века. Качаешь смесь насосом в горелку и на тяге ебашишь к звездам. Для отрыва можешь приебашить пару бустеров твердотельных.
Давайте будем последовательны и разберем роботу компьютера по полочкам, с чего все начинается, что в системе случается когда я нажимаю кнопку включить?
>>192821323Ну тогда можно. Если ты подсунешь вместо кода набор неведомой херни, от этого нетупой Шиндвс прервёт выполнение из-за нарушений доступа к памяти или просто завершит выполнение из-за отстутсвия инструкции выхода из процесса. И всё, а что конкрнетно ты ожидал от рандомного набора нулей и единиц. Для этго трансляторы с языков в маш код и существуют. Ассемблер наиболее простой, ибо асм==маш.код.
>>192821408>микрооптимизацииЛол блять. Все современные погромисты пидорасы(Увы, но это правило такое. Нельзя стать погромистом не ебясь в сраку). Они вообще не знают слова оптимизация. Ты не задумывался, как раньше на компах с 60мгц и 8мег памяти работали? А теперь сраный браузер жрет сука 5 гигов и 2 ядра.
>>192821293любая программа или внешнее устройство может давать инструкции процу...по сути проц через шины команд и данных каждый цикл слушает кому-чего от него надо, ну и исполняет по мере сил))
>>192821559>каждый цикл Каждый такт блять.>>192821577Тогда не лезь туда. Погромист и гейшлюха не просто так получают свои 300кк/сек.
>>192821613>Тогда не лезь туда. Погромист и гейшлюха не просто так получают свои 300кк/сек.ПОЛЕЗУ! И БУДУ МИКРООПТИМИЗИРОВАТЬ!
>>192821408А что оптимизировать то. Тут, я чувствую, уже будет обсуждение культуры программирования и материальной выгоды. Сейчас объём кода вырос настолько, что чистых проектов как таковых нет и все они базируются на чём, что уже написано. Отсюда вывод - либо мы делаем быстро,выгодно и не оптимально по ресурсам, либо вытачиваем алмаз с убер-оптимизациями, который к окончанию процесса уже не будет нужен никому, включая заказчика - денег не т.Оптимизация на асме есть, но нет чистых асмовых коммерческих проектов. Это удел самоучек и нердов, я лично не считаю это чем то плохим, это не мейнстрим, и только.
>>192821685Я согласен с этим. Но если пишешь что-то своё, например рейтрейсер какой-нибудь, где скорость критически важна, асм может пригодиться.
>>192821326дурачелло ты-ебланушка. Они есть, хотя их и мало осталось. Есть области, где нужна максимальная производительность или иным образом ограничены ресурсы (микроконтроллеры), где на компиляторе даже Си ты обосрёшься.Но такие ебланы как ты, даже при написании трояна умудряются туда node.js вшить или boost прилинковать. Ушло время скилловиков, остались такие ушлёпки как ты, безголовые.
>>192819424 (OP)Так и переводит, mov a b это какой-то числовой код в шестнадцатиричном формате, если это например 0xFF то ток подается на все входы шины комад, если 0x00 то не на один. На первом пике хуета.
>>192819424 (OP)Братан, представь чип, на котором с одной и с другой стороны контакты.С одной стороны подается битовая последовательность того що нужно делоть, с другой стороны обрабатываемые данные.Тупа представь транзистор на ножках, сбоку провода, ты на них подаешь допустим на 1 и 3 провод ток, если нужно сложить, или на 1 и 4 - если вычесть, соответственно если взять 8 бит строку то в коде это будет как 10100000 и 10010000.Это говно стандартизировано и все процмейкеры придерживаются стандартного говна, так что везде ток на контакты подавать надо одинаково.Теперь представь что какой-то чел заебся редачить джвоичные коды (обычно их записывали попарно в 16-й системе, тем самым вместо команды "00000001 01001011" писали "01 4B") и такой подумал - "епты бля, создам говноинтепретатор, пусть он потом норм слова в свою двоинохуету переводит".Хуярит ехе-шник с регулярными выражениями, типа sum пусть заменяет на 00000001, ардеса также раскукоживает и все. Дальше он лишь пишет срань вида:SUM 0x0001 0x0002А интерпретатор такой ехидно:000000010100000101000002И все блять. Такая вот залупа.АЛЯРМ:Высранное мною говно нисколько не настоящий ассемблер, это псевдохуйня для примера, так сказать
>>192821967И даже там сейчас чаще всгео пишут на сях, а потом оптимизируют результат работы компилятора, если это нужно. мимо
>>192822025>Как он там выполняетсяПо инстуркциям>какие команды выполняет?Какие в него заложены. Проверка и инициализация оборудования, передача управления загрузчику.
>>192822080Чтобы быть кросплатформенной, она выполняется по сути не на процессоре, а в интерпретаторе который называется "java-машина"
>>192822080Потому что java спроектирована так, чтобы она компилилась в свой, магический говнокод, который будет разбирать отдельная реализация java-машины под конкретную платформу. Что-то вроде виртуального процессора.
>>192822054>АЛЯРМ:Высранное мною говно нисколько не настоящий ассемблер, это псевдохуйня для примера, так сказатьА ты напиши эмулятор)
>>192822054Спасибо бро, реально хорошо и доходчиво пояснил.То есть иерархия вызова такова будет.Например я написал1. int a=1Потом оно переводится вот в это2. "SUM 01 4B MOV FF DV BMI CC XR"А после еще переводится вот в это3."01000001010010101001010100101001010000101010110111101001010010101001010010100101"И тогда уже проц исполняет эти нули и единицы.
>>192822330именно))11010000 10111110 11010000 10111111 100000 11010001 10000101 11010001 10000011 11010000 10111001
>>192822381Вот поэтому и нужна джава, у нас есть её реализация под каждый процессор, и она уже превращает свой байткод в команды текущего процессора.
Почему нельзя сразу перевести инструкцию int a=1 в "01000001010010101001010100101001010000101010110111101001010010101001010010100101"?
>>192822293Да. Я сам говнокожу на параше, которая преобразует высер в си-код итд. Работает медленно и херово, зато можно писать херню и просто понятно.
BASIC, он же в обоих вариантах вроде как есть - и транслируемый (Borland/Power/etc) в исполняемый, и интерпретируемый (MS VB), вроде как.Как с ним быть в таком случае? inb4 забыть обоссать закопать
>>192822330Оооооочень упрощенно, сохраняя лишь основную суть - да, так.Но чтобы не быть мемом в дальнейшем рекомендую покурить вики и форумы, чтобы разобраться полностью.
>>192822456> которая преобразует высер в си-код итд. Звучит как последняя кросплатформенная делфи, или ГО.
>>192822483Которая просто интерпретирует, весь код (все-все варианты исполнения виртуального байт-кода) уже "записаны" в вирт. машину.
>>192822600Ассемблер это не бинарный.>>192822559Ещё хуже. Но мне похуй, главное просто и работает. Я же не пидор погромистом быть.
>>192822701да, это 10000110 в двоичной. С ними удобно потому что одна цифра в 16-ричной системе это всегда 4 цифры в двоичной, и переводить можно буквально в уме.
>>1928227010x86 семейство процессоров, у них своя система команд, соответственно свой набор двоичных команд. Это не упрощённый вид, это понятный для человеков вид одного и того же.
>>1928227510 и 1 это уровень транзисторов. В ассемблере ты задаешь что писать в регистр, какую инструкцию выполнить итд. Ты не управляешь конкретным транзистором.
>>192822822Нет в примере это был именно пример команды. Это можно понять по 0x в начале. Такого семейства процессоров нет.
>>192822859Я прекрасно знаю это. Я ответил человеку, что JVM преобразует свой байт код сразу в машинный код, а не с промежуточным ассемблерным шагом.
Вот отличная статья https://habr.com/ru/post/240929/00000001 00000101 00000111(сложить)(адрес № 5)(адрес № 7)
>>192823009>>192822955Спецификация jvm это не ограничивает, всё зависит только от реализации, не думаю что тут есть о чем спорить.
>>192823052У разных процессоров одного семейства асм может преобразовывать одинаковый код в разные команды.
>>192823497Под неявной формой здесь подразумевается установки компилятора по-умолчанию. В правильных исходниках всё /должно транслироваться/ траслируется однозначно в один и тот же код, даже на разных компиляторах.
Почему еще никто не создал язык по простоте подобный C# но что бы сразу переводился в ассемблер код, а не во всякую машиную хуиту?
>>192823602>по простоте подобный C#Заорал, запутанный, хуёвоспроектированный кусок неочевидных говен на которых бест практисы делаются одной компанией которая не может в нормальный код
>>192821019Качай какой-нибудь Quartus и в нём схемки собирай.Сперва тебе нужно выучить таблицу истинности для логических элементов (AND, OR, NAND, NOR, XOR) - пригодится, чтобы по 10 раз в справочник не лазить. Это просто.В Квартусе пробуй сперва собирать всякие изечные штуки - ячейки памяти, делители частоты и прочую подобную штуку. Как разберешься, можешь браться за штуки посложнее - стеки, LIFO, FIFO, пробуй собирать схемы битовых сдвигов и прочее. Потом можешь калькулятор собрать, например, чтобы складывал, вычитал, делил умножал, ну ты понел. Как его соберешь, так у тебя твой вопрос сам отпадет, на самом деле. Хотя можешь в майнсруфте с редстоуном повеселиться, я с этого начинал. Брат жив, 8битный калькулятор считает, зависимости нет
>>192823740У меня вопросы отпали, когда я изобрёл велосипед в виде собственного дизассемблера, реально помогло навсегда.
>>192820298Едрить, винда убогая. Поссал на виндоблядей. В линухе насколько все оптимальнее и логичнее.
>>192823687Чего блядь? Шарп язык богов и там все понятно и структурировано что даже даун поймет что и как там делается.
>>192824017Не пробовал пока. Мой путь довольно простой, мне кажется - там наглядно видно, как сигналы превращаются в команды, по которым происходит обработка данных хотел даже свой костыльный проц сделать по фану, лол
в кратце - есть такая хуйня в проце, в любом - логическая машина - в нее стекаются все операции и из нее исходят ответы посресредствам всех транзисторов, ответ на ее операции 0 или 1 шо эквивалентно току в транзисторах
>>192820554>аметры. Как инструкция, адрес которой оказался в указателе инструкции, порождает сигналы - гугли механизм работы процессора и его взаимодействия с памятью. Ну, типа, открываются соответствующие адресу вентили, коммутирующие регистр инструкции с соответствующей ячейкой памяти, в регистре инструкции устанавливаются коБля, сказал бы проще что ЕДИНИЦА это есть напруга 0 - её нет.Программа из нулей и единиц состоит, эта вся ебатория попадает в процессор, создавая там напругу. И все нули перемножаются или нет. И на выходе результат
>>192824647Лол, осилил так то, поэтому и делаю выводы, маня, на шарпе в рашке ты никогда не будешь заниматься чем то нормальным, это факт.
>>192824587А лучше было бы если на одном транзисторе могло хранится не одно значение а например 4, вот так:0 - 0.2 в1 - 0.4 в2 - 0.6 в3 - 0.8 в
>>192824871Примерно так щас память во флешках и SSD устроена (QLC).А ещё при советах была выч. машина на троичной логике Сетунь
>>192825489Никто слово DOS ещё итт не писал, кроме тебя, заметь.Дай угадаю - в твоём манямирке ассемблер это что-то древнее и убогое, что могло существовать лишь тогда, когда был этот самый ДОС, ясно-понятно.
>>192824987Ух, вот жаль, что сейчас все в двоичке уже закостенело - думается мне, что с нынешними технологиями можно было бы добиться нормальной работы троичной логики, что привело бы к заметному ускорению вычислений при тех же габаритах чипа (при вычислениях троичка быстрее сходится, в операциях со флоатами можно было бы добиваться той же точности при меньшем количестве разрядов)
>>192825834Клоун это ты, читаешь тред по диагонали. Можешь кодить где хочется, ну не обсуждался ДОС. Давай ссылку на мессагу, трепло ебаное, или продолжай свои манёвры.
>>192825991> Давай ссылку на мессагу, трепло ебаное, или продолжай свои манёвры.>Вызов главной функции DOSТаблетку что ли забыл принять?
>>192825448Нормальное это разработка фирст компания, где не менаджмент рулит а разработчики и занимаются разработкой а не удовлетворением хотелок менаджмента