Машинный код

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

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

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

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

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

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

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

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

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

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

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

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

Микрокод

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

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

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

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

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

Возможность создания позиционно-независимого кода зависит от архитектуры и системы команд целевой платформы. Например, если во всех инструкциях перехода в системе команд должны указываться абсолютные адреса, то код, требующий переходов, практически невозможно сделать позиционно-независимым. В архитектуре 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. 1 2 3 Толковый словарь по вычислительным системам = 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 года.

Read other articles:

Netralitas artikel ini dipertanyakan. Diskusi terkait dapat dibaca pada the halaman pembicaraan. Jangan hapus pesan ini sampai kondisi untuk melakukannya terpenuhi. (Pelajari cara dan kapan saatnya untuk menghapus pesan templat ini) Contoh-contoh dan sudut pandang artikel ini kemungkinan tidak mencakup keseluruhan sudut pandang yang signifikan. Silakan perbaiki artikel atau diskusikan masalah ini. (Februari 2017) (Pelajari cara dan kapan saatnya untuk menghapus pesan templat ini) Setelah sera...

 

2011 film directed by S. Wyeth Clarkson The MountieFilm posterDirected byS. Wyeth Clarkson[1]Written byCharles Johnston,S. Wyeth Clarkson,Grant Sauvé[1]Produced byPhillip Daniels,Andrew Williamson,S. Wyeth Clarkson,Michael Vernon[1]Starring Andrew Walker Jessica Paré Earl Pastko George Buza Tony Munch Matthew G. Taylor John Wildman CinematographyRene SmithEdited byKerry DavieMusic byIvan BarbotinProductioncompanyTravesty Productions & Releasing[1]Distribu...

 

Sepasang ikan cupang (Betta sp.) bereproduksi di bawa sarang gelembung. Reproduksi pada setiap jenis ikan berbeda-beda tergantung kondisi lingkungan, ada yang berlangsung setiap musim dan ada juga yang tergantung pada kondisi tertentu setiap tahunnya. Dalam keadaan normal, ikan melangsungkan pemijahan minimum satu kali dalam satu daur hidupnya. Hampir semua jenis ikan pemijahannya berdasarkan reproduksi seksual yaitu terjadinya penyatuan sel reproduksi organ berupa telur dari ikan betina dan ...

Artikel ini tidak memiliki referensi atau sumber tepercaya sehingga isinya tidak bisa dipastikan. Tolong bantu perbaiki artikel ini dengan menambahkan referensi yang layak. Tulisan tanpa sumber dapat dipertanyakan dan dihapus sewaktu-waktu.Cari sumber: Uretra – berita · surat kabar · buku · cendekiawan · JSTOR UretraUretra priaPengidentifikasiMeSHD014521TA98A08.4.01.001F A08.5.01.001MTA23426, 3442FMA19667Daftar istilah anatomi[sunting di Wikidata] ...

 

1861 book by Isabella Beeton Mrs. Beeton's Book of Household Management Title page: the first edition did not use the Mrs. of later editions.AuthorIsabella BeetonLanguageEnglishSubjectCookeryGenreManualPublisherS. O. Beeton PublishingPublication date1861TextMrs. Beeton's Book of Household Management at Wikisource Mrs. Beeton's Book of Household Management, also published as Mrs. Beeton's Cookery Book, is an extensive guide to running a household in Victorian Britain, edited by Isabella Beeton...

 

Dmitry BukhmanLahir27 Mei 1985 (umur 38)Vologda, Uni SovietKebangsaanIsraelAlmamaterVologda State Pedagogical Institute [ru]KerabatIgor Bukhman Dmitry Bukhman (lahir 27 Mei 1985) adalah seorang pengusaha Israel kelahiran Rusia. Bersama saudaranya Igor Bukhman, mereka mendirikan perusahaan game daring Playrix, yang terkenal dengan game aplikasi selulernya seperti Homescapes dan Fishdom.[1] Kehidupan awal Dmitry dan saudaranya Igor lahir di kota Vologda, Soviet. Ketik...

イスラームにおける結婚(イスラームにおけるけっこん)とは、二者の間で行われる法的な契約である。新郎新婦は自身の自由な意思で結婚に同意する。口頭または紙面での規則に従った拘束的な契約は、イスラームの結婚で不可欠だと考えられており、新郎と新婦の権利と責任の概要を示している[1]。イスラームにおける離婚は様々な形をとることができ、個�...

 

1995 single by Paul Weller Broken StonesSingle by Paul Wellerfrom the album Stanley Road B-sideSteamReleased18 September 1995 (1995-09-18)[1]Length3:16LabelGo! DiscsSongwriter(s)Paul WellerProducer(s)Brendan Lynch, Paul WellerPaul Weller singles chronology You Do Something to Me (1995) Broken Stones (1995) Out of the Sinking (1996) Broken Stones is a song by English singer-songwriter Paul Weller, released in September 1995 by Go! Discs as the fourth single from his thir...

 

Untuk kegunaan lain, lihat Kajang. Sebuah masjid di Kajang, Selangor. Kajang (penduduk 189.400 (2001) ialah sebuah kota di negara bagian Selangor, Malaysia (2,98 derajat U, 101,77 derajat T). Terletak sekitar 20 km ke selatan Kuala Lumpur. Kajang terkenal karena makanan satenya. 1 universitas dekat Kajang ialah Universiti Tenaga Nasional (Uniten), sedangkan Universiti Kebangsaan Malaysia (National University of Malaysia), dekat Bangi, ialah salah satu universitas terbesar nasional. Letna...

Not to be confused with Webcomic or Motion comic. Comic released digitally Digital comicComicsSpeech balloon Comics studies Education Glossary History by country Methods Cartooning Photo comics Media formats Comic book Comic strip Digital comic Gag cartoon Trade paperback Graphic novel Political cartoon Webcomic Webtoon Comics by country and culture American comics Argentine comics Australian comics Bandes dessinées (Belgium / Quebec) Brazilian comics British comics (Welsh-language) Canadian...

 

2020年夏季奥林匹克运动会奥地利代表團奥地利国旗IOC編碼AUTNOC奧地利奧林匹克委員會網站www.olympia.at(德文)2020年夏季奥林匹克运动会(東京)2021年7月23日至8月8日(受2019冠状病毒病疫情影响推迟,但仍保留原定名称)運動員75參賽項目21个大项旗手开幕式:托马斯·扎亚克(英语:Thomas Zajac)和塔尼娅·弗兰克(帆船)[1]闭幕式:安德烈亚斯·米勒(自行车)[2]...

 

Weekly, monthly and yearly updated list of top 50 singles on Slovenian radio stations For the active official Slovenian SloTop50 singles chart, see List of number-one singles of 2021 (Slovenia). This article has multiple issues. Please help improve it or discuss these issues on the talk page. (Learn how and when to remove these template messages) The topic of this article may not meet Wikipedia's notability guideline for music. Please help to demonstrate the notability of the topic by citing ...

Cristoforo LandinoCristoforo Landino, détail de la scène de l'Annuncio dell'angelo a Zaccaria, peinte par Domenico Ghirlandaio, dans la Chapelle Tornabuoni de la basilique Santa Maria Novella à Florence.BiographieNaissance 8 février 1424FlorenceDécès 24 septembre 1498 (à 74 ans)Borgo alla Collina (d)Activités Philosophe, poète, écrivain, historien de l’artAutres informationsMaître Carlo Marsuppinimodifier - modifier le code - modifier Wikidata Cristoforo Landino (né à Flor...

 

Сельское поселение России (МО 2-го уровня)Новотитаровское сельское поселение Флаг[d] Герб 45°14′09″ с. ш. 38°58′16″ в. д.HGЯO Страна  Россия Субъект РФ Краснодарский край Район Динской Включает 4 населённых пункта Адм. центр Новотитаровская Глава сельского пос�...

 

Swedish politician Fredrik Olovssonmember of the RiksdagIncumbentAssumed office 2002 Personal detailsBorn24 May 1973Political partySocial Democratic Fredrik Olovsson (born 24 May 1973) is a Swedish Social Democratic politician who has been a member of the Riksdag since 2002. References Fredrik Olovsson (S) vte← Members of the Riksdag, 2018–2022 → Speaker: Andreas Norlén (M) First Deputy Speaker: Åsa Lindestam (S) Second Deputy Speaker: Lotta Johnsson Fornarve (V) Third Deputy Spea...

هذه المقالة يتيمة إذ تصل إليها مقالات أخرى قليلة جدًا. فضلًا، ساعد بإضافة وصلة إليها في مقالات متعلقة بها. (أبريل 2019)Learn how and when to remove this message كارلوس روزا   معلومات شخصية الميلاد 21 سبتمبر 1984 (40 سنة)[1]  سان فرانسيسكو دي ماكوريس  مواطنة جمهورية الدومينيكان  الطول 183 �...

 

Scottish footballer Gareth Wardlaw Wardlaw playing for St MirrenPersonal informationFull name Gareth WardlawDate of birth (1979-03-07) 7 March 1979 (age 45)Place of birth Kirkcaldy, ScotlandHeight 6 ft 0 in (1.83 m)Position(s) ForwardSenior career*Years Team Apps (Gls)2004–2008 Ayr United 92 (24)2008–2009 Raith Rovers 20 (2)2009–2010 Cowdenbeath 31 (16)2010–2011 St Mirren 23 (3)2011–2012 Ayr United 25 (2)2012–2013 East Fife 15 (4)2013–2014 Hill of Beath Hawth...

 

Abd as-Salam Arif Nama dalam bahasa asli(ar) عبد السلام عارف BiografiKelahiran21 Maret 1921 Bagdad Kematian13 April 1966 (45 tahun)Sungai Shatt al-Arab, dekat Penyebab kematianKecelakaan pesawat terbang 2 Daftar Presiden Irak 8 Februari 1963 – 13 April 1966 ← Muhammad Najib ar-Ruba'i – Abdul Rahman Arif → Data pribadiAgamaIslam Sunni KegiatanPekerjaanpolitikus, personel militer Partai politikPartai Ba'th Sosialis Arab – Wilayah Irak Cabang mil...

Human mitochondrial DNA haplogroup This article is about the human mtDNA Haplogroup T. For the unrelated human Y-Chromosome Haplogroup T-M184, see Haplogroup T-M184. Haplogroup TPossible time of origin25,149 ± 4,668 years before presentPossible place of originNear East, and/or CaucasusAncestorJTDescendantsT1 and T2Defining mutationsG709A, G1888A, A4917G, G8697A, T10463C, G13368A, G14905A, A15607G, G15928A, C16294T Haplogroup T is a human mitochondrial DNA (mtDNA) haplogroup. It is believed t...

 

23°7′2″N 113°15′50″E / 23.11722°N 113.26389°E / 23.11722; 113.26389 中央银行旧址广东省文物保护单位地址广州市越秀区沿江中路193号分类近现代重要史迹及代表性建筑时代民国(1914年)编号4-109认定时间2002年 中央银行大楼建于1914年,位于珠江北岸,两层钢筋混凝土结构,建筑面积1098平方米。正中大堂的外墙以花岗岩石构筑,门口两侧置两只西式风格的石狮,�...