Википедия

Машинный код

Маши́нный код (платфо́рменно-ориенти́рованный код), маши́нный язы́к — система команд (набор кодов операций) конкретной вычислительной машины, которая интерпретируется непосредственно процессором или микропрограммами этой вычислительной машины.

image
Памятка программиста, 1960-е годы. Цифровой (машинный) код «Минск-22»

Компьютерная программа, записанная на машинном языке, состоит из машинных инструкций, каждая из которых представлена в машинном коде в виде т. н. опкода — двоичного кода отдельной операции из системы команд машины. Для удобства программирования вместо числовых опкодов, которые только и понимает процессор, обычно используют их условные буквенные мнемоники. Набор таких мнемоник, вместе с некоторыми дополнительными возможностями (например, некоторыми макрокомандами, директивами), называется языком ассемблера.

Каждая модель процессора имеет собственный набор команд, хотя во многих моделях эти наборы команд сильно перекрываются. Говорят, что процессор A совместим с процессором B, если процессор A полностью «понимает» машинный код процессора B. Если процессоры A и B имеют некоторое подмножество инструкций, по которым они взаимно совместимы, то говорят, что они одной «архитектуры» (имеют одинаковую архитектуру набора команд).

Машинная инструкция

Каждая машинная инструкция выполняет определённое действие, такое как операция с данными (например, сложение или копирование машинного слова в регистре или в памяти) или переход к другому участку кода (изменение порядка исполнения; при этом переход может быть безусловным или условным, зависящим от результатов предыдущих инструкций). Любая исполнимая программа состоит из последовательности таких атомарных машинных операций.

Операции, записываемые в виде одной машинной инструкции, можно разделить на «простые» (элементарные операции) и «сложные». Кроме того, большинство современных процессоров состоит из отдельных «исполнительных устройств» — вычислительных блоков, которые умеют исполнять лишь ограниченный набор простейших операций. При исполнении очередной инструкции специальный блок процессора — декодер — транслирует (декодирует) её в последовательность элементарных операций, понимаемых конкретными исполнительными устройствами.

Архитектура набора команд процессора определяет, какие операции он способен выполнять, и какой машинной инструкции какие числовые коды операций (опкоды) соответствуют. Опкоды бывают постоянной длины (у RISC-, MISC-архитектур) и диапазонной (у CISC-архитектур; например: для архитектуры x86 команда имеет длину от 8 до 120 битов).

Современные суперскалярные процессоры способны выполнять несколько машинных инструкций за один такт.

Машинный код как язык программирования

Машинный код можно рассматривать как примитивный язык программирования или как самый низкий уровень представления скомпилированных или ассемблированных компьютерных программ. Хотя вполне возможно создавать программы прямо в машинном коде, сейчас это делается редко в силу громоздкости кода и трудоёмкости ручного управления ресурсами процессора, за исключением ситуаций, когда требуется экстремальная оптимизация. Поэтому подавляющее большинство программ пишется на языках более высокого уровня и транслируется в машинный код компиляторами. Машинный код иногда называют нативным кодом (также собственным или родным кодом — от англ. native code), когда говорят о платформенно-зависимых частях языка или библиотек.

Программы на интерпретируемых языках (таких как Basic или Python) не транслируются в машинный код; вместо этого они либо исполняются непосредственно интерпретатором языка, либо транслируются в псевдокод (байт-код). Однако интерпретаторы этих языков (которые сами можно рассматривать как процессоры), как правило, представлены в машинном коде.

Микрокод

В некоторых компьютерных архитектурах поддержка машинного кода реализуется ещё более низкоуровневым слоем программ, называемых микропрограммами. Это позволяет обеспечить единый интерфейс машинного языка у всей линейки или семейства компьютеров, которые могут иметь значительные структурные отличия между собой, и облегчает перенос программ в машинном коде между разными моделями компьютеров. Примером такого подхода является семейство компьютеров IBM System/360 и их преемников: несмотря на разные шины шириной от 8 до 64 бит и выше, тем не менее, у них общая архитектура на уровне машинного языка.

Использование слоя микрокода для реализации эмулятора позволяет компьютеру представлять архитектуру совершенно другого компьютера. В линейке System/360 это использовалось для переноса программ с более ранних машин IBM на новое семейство — например, эмулятор IBM 1401/1440/1460 на IBM S/360 model 40.

Абсолютный и позиционно-независимый код

Абсолютный код (англ. absolute code) — программный код, пригодный для прямого выполнения процессором, то есть код, не требующий дополнительной обработки (например, разрешения ссылок между различными частями кода или привязки к адресам в памяти, обычно выполняемой загрузчиком программ). Примерами абсолютного кода являются исполнимые файлы в формате .COM и загрузчик ОС, располагаемый в MBR. Часто абсолютный код понимается в более узком смысле как позиционно-зависимый код (то есть код, привязанный к определённым адресам памяти).

Позиционно-независимый код (англ. position-independent code) — программа, которая может быть размещена в любой области памяти, так как все ссылки на ячейки памяти в ней относительные (например, относительно счётчика команд). Такую программу можно переместить в другую область памяти в любой момент, в отличие от перемещаемой программы, которая хотя и может быть загружена в любую область памяти, но после загрузки должна оставаться на том же месте.

Возможность создания позиционно-независимого кода зависит от архитектуры и системы команд целевой платформы. Например, если во всех инструкциях перехода в системе команд должны указываться абсолютные адреса, то код, требующий переходов, практически невозможно сделать позиционно-независимым. В архитектуре x86 непосредственная адресация в инструкциях работы с данными представлена только абсолютными адресами, но поскольку адреса данных считаются относительно сегментного регистра, который можно поменять в любой момент, это позволяет создавать позиционно-независимый код со своими ячейками памяти для данных. Кроме того, некоторые ограничения набора команд могут сниматься с помощью самомодифицирующегося кода или нетривиальных последовательностей инструкций.

Программа «Hello, world!»

Программа «Hello, world!» для процессора архитектуры x86 (ОС MS DOS, вывод при помощи BIOS прерывания int 10h) выглядит следующим образом (в шестнадцатеричном представлении):

BB 11 01 B9 0D 00 B4 0E 8A 07 43 CD 10 E2 F9 CD 20 48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21

Данная программа работает при её размещении по смещению 10016. Отдельные инструкции выделены цветом:

  • BB 11 01, B9 0D 00, B4 0E, 8A 07 — команды присвоения значений регистрам.
  • 43 — инкремент регистра BX.
  • CD 10, CD 20 — вызов программных прерываний 1016 и 2016.
  • E2 F9 — команда для организации цикла.
  • Малиновым показаны данные (строка «Hello, world!»).

Тот же код ассемблерными командами:

XXXX:0100  mov bx, 0111h  ; поместить в bx смещение строки HW XXXX:0103  mov cx, 000Dh  ; поместить в cx длину строки HW XXXX:0106  mov ah, 0Eh  ; поместить в ah номер функции прерывания 10h XXXX:0108  mov al, [bx]  ; поместить в al значение ячейки памяти, адрес которой находится в bx XXXX:010A  inc bx  ; перейти к следующему байту строки (увеличить смещение на 1) XXXX:010B  int 10h  ; вызов прерывания 10h XXXX:010D  loop 0108  ; уменьшить cx на 1 и, если результат≠0, то перейти по адресу 0108 XXXX:010F  int 20h  ; прерывание 20h: завершить программу XXXX:0111 HW db 'Hello, World!' ; строка, которую требуется напечатать 

См. также

Примечания

  1. Толковый словарь по вычислительным системам = Dictionary of Computing / Под ред. В. Иллингуорта и др.: Пер. с англ. А. К. Белоцкого и др.; Под ред. Е. К. Масловского. — М.: Машиностроение, 1990. — 560 с. — 70 000 (доп.) экз. — ISBN 5-217-00617-X (СССР), ISBN 0-19-853913-4 (Великобритания).
  2. Kate Gregory. Managed, Unmanaged, Native: What Kind of Code Is This? (28 апреля 2003). Дата обращения: 27 марта 2012. Архивировано 30 мая 2012 года.

Википедия, чтение, книга, библиотека, поиск, нажмите, истории, книги, статьи, wikipedia, учить, информация, история, скачать, скачать бесплатно, mp3, видео, mp4, 3gp, jpg, jpeg, gif, png, картинка, музыка, песня, фильм, игра, игры, мобильный, телефон, Android, iOS, apple, мобильный телефон, Samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Сеть, компьютер, Информация о Машинный код, Что такое Машинный код? Что означает Машинный код?

Eta statya o sisteme komand v celom ob instrukciyah sm Kod operacii V state ne hvataet ssylok na istochniki sm rekomendacii po poisku Informaciya dolzhna byt proveryaema inache ona mozhet byt udalena Vy mozhete otredaktirovat statyu dobaviv ssylki na avtoritetnye istochniki v vide snosok 11 dekabrya 2022 Mashi nnyj kod platfo rmenno orienti rovannyj kod mashi nnyj yazy k sistema komand nabor kodov operacij konkretnoj vychislitelnoj mashiny kotoraya interpretiruetsya neposredstvenno processorom ili mikroprogrammami etoj vychislitelnoj mashiny Pamyatka programmista 1960 e gody Cifrovoj mashinnyj kod Minsk 22 Kompyuternaya programma zapisannaya na mashinnom yazyke sostoit iz mashinnyh instrukcij kazhdaya iz kotoryh predstavlena v mashinnom kode v vide t n opkoda dvoichnogo koda otdelnoj operacii iz sistemy komand mashiny Dlya udobstva programmirovaniya vmesto chislovyh opkodov kotorye tolko i ponimaet processor obychno ispolzuyut ih uslovnye bukvennye mnemoniki Nabor takih mnemonik vmeste s nekotorymi dopolnitelnymi vozmozhnostyami naprimer nekotorymi makrokomandami direktivami nazyvaetsya yazykom assemblera Kazhdaya model processora imeet sobstvennyj nabor komand hotya vo mnogih modelyah eti nabory komand silno perekryvayutsya Govoryat chto processor A sovmestim s processorom B esli processor A polnostyu ponimaet mashinnyj kod processora B Esli processory A i B imeyut nekotoroe podmnozhestvo instrukcij po kotorym oni vzaimno sovmestimy to govoryat chto oni odnoj arhitektury imeyut odinakovuyu arhitekturu nabora komand Mashinnaya instrukciyaOsnovnaya statya Instrukciya informatika Kazhdaya mashinnaya instrukciya vypolnyaet opredelyonnoe dejstvie takoe kak operaciya s dannymi naprimer slozhenie ili kopirovanie mashinnogo slova v registre ili v pamyati ili perehod k drugomu uchastku koda izmenenie poryadka ispolneniya pri etom perehod mozhet byt bezuslovnym ili uslovnym zavisyashim ot rezultatov predydushih instrukcij Lyubaya ispolnimaya programma sostoit iz posledovatelnosti takih atomarnyh mashinnyh operacij Operacii zapisyvaemye v vide odnoj mashinnoj instrukcii mozhno razdelit na prostye elementarnye operacii i slozhnye Krome togo bolshinstvo sovremennyh processorov sostoit iz otdelnyh ispolnitelnyh ustrojstv vychislitelnyh blokov kotorye umeyut ispolnyat lish ogranichennyj nabor prostejshih operacij Pri ispolnenii ocherednoj instrukcii specialnyj blok processora dekoder transliruet dekodiruet eyo v posledovatelnost elementarnyh operacij ponimaemyh konkretnymi ispolnitelnymi ustrojstvami Arhitektura nabora komand processora opredelyaet kakie operacii on sposoben vypolnyat i kakoj mashinnoj instrukcii kakie chislovye kody operacij opkody sootvetstvuyut Opkody byvayut postoyannoj dliny u RISC MISC arhitektur i diapazonnoj u CISC arhitektur naprimer dlya arhitektury x86 komanda imeet dlinu ot 8 do 120 bitov Sovremennye superskalyarnye processory sposobny vypolnyat neskolko mashinnyh instrukcij za odin takt Mashinnyj kod kak yazyk programmirovaniyaSm takzhe Yazyk assemblera Mashinnyj kod mozhno rassmatrivat kak primitivnyj yazyk programmirovaniya ili kak samyj nizkij uroven predstavleniya skompilirovannyh ili assemblirovannyh kompyuternyh programm Hotya vpolne vozmozhno sozdavat programmy pryamo v mashinnom kode sejchas eto delaetsya redko v silu gromozdkosti koda i trudoyomkosti ruchnogo upravleniya resursami processora za isklyucheniem situacij kogda trebuetsya ekstremalnaya optimizaciya Poetomu podavlyayushee bolshinstvo programm pishetsya na yazykah bolee vysokogo urovnya i transliruetsya v mashinnyj kod kompilyatorami Mashinnyj kod inogda nazyvayut nativnym kodom takzhe sobstvennym ili rodnym kodom ot angl native code kogda govoryat o platformenno zavisimyh chastyah yazyka ili bibliotek Programmy na interpretiruemyh yazykah takih kak Basic ili Python ne transliruyutsya v mashinnyj kod vmesto etogo oni libo ispolnyayutsya neposredstvenno interpretatorom yazyka libo transliruyutsya v psevdokod bajt kod Odnako interpretatory etih yazykov kotorye sami mozhno rassmatrivat kak processory kak pravilo predstavleny v mashinnom kode MikrokodOsnovnaya statya Mikrokod V nekotoryh kompyuternyh arhitekturah podderzhka mashinnogo koda realizuetsya eshyo bolee nizkourovnevym sloem programm nazyvaemyh mikroprogrammami Eto pozvolyaet obespechit edinyj interfejs mashinnogo yazyka u vsej linejki ili semejstva kompyuterov kotorye mogut imet znachitelnye strukturnye otlichiya mezhdu soboj i oblegchaet perenos programm v mashinnom kode mezhdu raznymi modelyami kompyuterov Primerom takogo podhoda yavlyaetsya semejstvo kompyuterov IBM System 360 i ih preemnikov nesmotrya na raznye shiny shirinoj ot 8 do 64 bit i vyshe tem ne menee u nih obshaya arhitektura na urovne mashinnogo yazyka Ispolzovanie sloya mikrokoda dlya realizacii emulyatora pozvolyaet kompyuteru predstavlyat arhitekturu sovershenno drugogo kompyutera V linejke System 360 eto ispolzovalos dlya perenosa programm s bolee rannih mashin IBM na novoe semejstvo naprimer emulyator IBM 1401 1440 1460 na IBM S 360 model 40 Absolyutnyj i pozicionno nezavisimyj kodAbsolyutnyj kod angl absolute code programmnyj kod prigodnyj dlya pryamogo vypolneniya processorom to est kod ne trebuyushij dopolnitelnoj obrabotki naprimer razresheniya ssylok mezhdu razlichnymi chastyami koda ili privyazki k adresam v pamyati obychno vypolnyaemoj zagruzchikom programm Primerami absolyutnogo koda yavlyayutsya ispolnimye fajly v formate COM i zagruzchik OS raspolagaemyj v MBR Chasto absolyutnyj kod ponimaetsya v bolee uzkom smysle kak pozicionno zavisimyj kod to est kod privyazannyj k opredelyonnym adresam pamyati Pozicionno nezavisimyj kod angl position independent code programma kotoraya mozhet byt razmeshena v lyuboj oblasti pamyati tak kak vse ssylki na yachejki pamyati v nej otnositelnye naprimer otnositelno schyotchika komand Takuyu programmu mozhno peremestit v druguyu oblast pamyati v lyuboj moment v otlichie ot peremeshaemoj programmy kotoraya hotya i mozhet byt zagruzhena v lyubuyu oblast pamyati no posle zagruzki dolzhna ostavatsya na tom zhe meste Vozmozhnost sozdaniya pozicionno nezavisimogo koda zavisit ot arhitektury i sistemy komand celevoj platformy Naprimer esli vo vseh instrukciyah perehoda v sisteme komand dolzhny ukazyvatsya absolyutnye adresa to kod trebuyushij perehodov prakticheski nevozmozhno sdelat pozicionno nezavisimym V arhitekture x86 neposredstvennaya adresaciya v instrukciyah raboty s dannymi predstavlena tolko absolyutnymi adresami no poskolku adresa dannyh schitayutsya otnositelno segmentnogo registra kotoryj mozhno pomenyat v lyuboj moment eto pozvolyaet sozdavat pozicionno nezavisimyj kod so svoimi yachejkami pamyati dlya dannyh Krome togo nekotorye ogranicheniya nabora komand mogut snimatsya s pomoshyu samomodificiruyushegosya koda ili netrivialnyh posledovatelnostej instrukcij Programma Hello world Programma Hello world dlya processora arhitektury x86 OS MS DOS vyvod pri pomoshi BIOS preryvaniya int 10h vyglyadit sleduyushim obrazom v shestnadcaterichnom predstavlenii BB 11 01 B9 0D 00 B4 0E 8A 07 43 CD 10 E2 F9 CD 20 48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21 Dannaya programma rabotaet pri eyo razmeshenii po smesheniyu 10016 Otdelnye instrukcii vydeleny cvetom BB 11 01 B9 0D 00 B4 0E 8A 07 komandy prisvoeniya znachenij registram 43 inkrement registra BX CD 10 CD 20 vyzov programmnyh preryvanij 1016 i 2016 E2 F9 komanda dlya organizacii cikla Malinovym pokazany dannye stroka Hello world Tot zhe kod assemblernymi komandami XXXX 0100 mov bx 0111h pomestit v bx smeshenie stroki HW XXXX 0103 mov cx 000Dh pomestit v cx dlinu stroki HW XXXX 0106 mov ah 0Eh pomestit v ah nomer funkcii preryvaniya 10h XXXX 0108 mov al bx pomestit v al znachenie yachejki pamyati adres kotoroj nahoditsya v bx XXXX 010A inc bx perejti k sleduyushemu bajtu stroki uvelichit smeshenie na 1 XXXX 010B int 10h vyzov preryvaniya 10h XXXX 010D loop 0108 umenshit cx na 1 i esli rezultat 0 to perejti po adresu 0108 XXXX 010F int 20h preryvanie 20h zavershit programmu XXXX 0111 HW db Hello World stroka kotoruyu trebuetsya napechatatSm takzheYazyk assemblera JIT kompilyaciyaPrimechaniyaTolkovyj slovar po vychislitelnym sistemam Dictionary of Computing Pod red V Illinguorta i dr Per s angl A K Belockogo i dr Pod red E K Maslovskogo M Mashinostroenie 1990 560 s 70 000 dop ekz ISBN 5 217 00617 X SSSR ISBN 0 19 853913 4 Velikobritaniya Kate Gregory Managed Unmanaged Native What Kind of Code Is This neopr 28 aprelya 2003 Data obrasheniya 27 marta 2012 Arhivirovano 30 maya 2012 goda

NiNa.Az

NiNa.Az - Абсолютно бесплатная система, которая делится для вас информацией и контентом 24 часа в сутки.
Взгляните
Закрыто