Машинный код
Машинный код (также употребляются термины собственный код, или платформенно-ориентированный код, или родной код, или нативный код — от англ. native code) — система команд конкретной вычислительной машины, которая интерпретируется непосредственно микропроцессором или микропрограммами данной вычислительной машины.
Каждая модель процессора имеет свой собственный набор команд, хотя во многих моделях эти наборы команд сильно перекрываются. Говорят, что процессор A совместим с процессором B, если процессор A полностью «понимает» машинный код процессора B. Если процессор A знает несколько команд, которых не понимает процессор B, то B несовместим с A.
«Слова» машинного кода называются машинными инструкциями. Каждая из них описывает элементарное действие, выполняемое процессором, такое как «переслать байт из памяти в регистр». Программа — это просто длинный список инструкций, выполняемых процессором. Раньше процессоры просто выполняли инструкции одну за другой, но новые суперскалярные процессоры способны выполнять несколько инструкций за раз. Прямой поток выполнения команд может быть изменён инструкцией перехода, которая переносит выполнение на инструкцию с заданным адресом. Инструкция перехода может быть условной, выполняющей переход только при соблюдении некоторого условия.
Также инструкции бывают постоянной длины (у RISC, MISC-архитектур) и диапазонной (у CISC-архитектур; например, для архитектуры x86 команда имеет длину от 8 до 120 битов).
[править] Программа «Hello, World!»
| Этот раздел должен быть полностью переписан.
На странице обсуждения могут быть пояснения.
|
Программа «Hello, World!» для процессора архитектуры x86 (ОС ДОС, ввод вывод при помощи 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
| Комментарии к программе |
|---|
| Отдельные инструкции выделены цветом. Малиновым показаны данные (строка «Hello, world!») Данная программа работает при её размещении по смещению 10016
org 100h ; .COM программа DOS размещается по смещению 0x100 байт от начала сегмента памяти.
mov bx, 111h ; положить в bx смещение строки HW
mov cx, 0Dh ; положить в cx длину строки HW
mov ah, 0Eh ; положить в ah номер функции прерывания 10h
label: ; метка начала цикла
mov al, [bx] ; загрузить байт из ячейки, номер которой хранится в bx, в ax.
inc bx ; перейти к следующему символу строки (увеличить смещение на 1)
int 10h ; вызов прерывания 10h
loop label ; если cx≠0, то перейти к метке label и уменьшить cx на 1.
int 20h ; выйти в DOS
HW db 'Hello, World!' ; сама строка, которую требуется напечатать, её смещение 111h |
[править] См. также
| Это заготовка статьи о компьютерах. Вы можете помочь проекту, исправив и дополнив её. Это примечание по возможности следует заменить более точным. |
| Это заготовка статьи по информатике. Вы можете помочь проекту, исправив и дополнив её. |