Другие языки программирования и технологии

Ассемблер и программирование.

Здравствуйте. Скажите пожалуйста, может мне кто нибудь обьяснить следующие вещи:

1) вот к примеру процессор, понимает свой машинный язык, и когда мы что то нажимаем, будь то клавиатура или мышка, он видет это в двоичной прописанной ему системе кода, а вот на сам экран уже переводит непосредственно сам язык программирования. Вопрос? К примеру виндоус написан на каких то языках, и этот язык транслируется это в машинный код так?
2) Почему язык ассемблер на каждом процессоре работает по своему
1. да
2. потому что разная архитектура процессора - регистры, адресация
. Макс
67 550
Лучший ответ
Эмин Талыблы Вы хотите сказать, что любой язык программирования, подстроен под каждый процессор? Ну вот к примеру я написал какое то приложение на том же С++, и к примеру у меня процессор определенной модели. И вот, программа скомпилирована и переведена на машинный язык понятный процессору. А теперь представим, что я сел за компьютер через другую модель компьютера. Как же другая модель понимает язык С++?
Эмин Талыблы Точнее другая модель процессора
Ты уже несколько раз задавал подобные вопросы.
А ответы не уяснил.
Ты думаешь с твоей этакой смекалкой ты что-то поймешь в ассемблере на проекте "Ответы"?
Vuqar Qenberov
Vuqar Qenberov
81 135
Сергей Кузнецов Ну к вопросу этак восемьсотому может и допрет...)
Эмин Талыблы Тебе если не нравится моя смекалка, то иди дальше . А если объяснит нечего то не пиши! Раз я не понимаю значит и спрашиваю!
Когда разрабатываю процессор, разрабы придумывают свои "правила" работы процессора. И естественно свои команды для процессора. Именно на этих командах и работает процессор. Так как на этих командах тяжело программировать (относительно тяжело) и нужно много написать для небольшой программы, используют другие языки программирования, которые более логичны для человека. И на них легче и быстрей написать программу, чем на ассемблере.
Евгений Иванов
Евгений Иванов
15 408
Эмин Талыблы Я знаю что на ассемблере тяжело писать. Просто когда изучаешь этот ассемблер, начинаешь в интернете искать множество информации, и голова лопается что все так запутано
Для компилятора важно лишь две вещи: 1) Архитектура процессора 2) Операционная система. Компилятор переводит высокоуровневый код С++ в машинный согласно этим двум пунктам.
Для первого пункта из-за разных архитектур процессоров может быть разные операции (опкоды), разные регистры. То есть написав например так
for(unsigned i = 0;i<10;++i) printf("%d",i);
Машинный код для различных архитектур будет совершенно другим.
Для второго пункта, важен такой пункт как соглашение о вызове (calling convention), это означает, каким образом будет реагировать компилятор на передачу управления функциям, то есть какие регистры использовать как параметры, сколько параметров передавать через стек, кто будет очищать стек после вызова функции (вызываемая функция либо вызывающая функция). Также для второго пункта важно представление машинного кода в двоичных данных, например объектный код - некоторое промежуточное представление машинного кода из высокоуровневого с относительными ссылками для последующей работы линковщика. Линковщик уже строит структуру исполняемого модуля согласно ОС, порядком сегментов, относительных ссылок и т. д.
NB
New Blood A.b.c
8 452
Вот именно из-за разной архитектуры, у ассемблера очень плохо с переносимостью. Для каждой свой асм
Б8
Берген 85
2 698