- •Структура мп ix86 фирмы Intel
- •Регистры общего назначения (регистры данных)
- •Регистры-указатели
- •Регистры сегментов (сегментные регистры)
- •Указатель команд и регистр флагов
- •Сегментация памяти
- •Структура команд мп
- •Формат «Регистр-регистр» (Рг-Рг) – 2 байта
- •Формат «Регистр-память» (Рг-яп) – 2÷4 байта
- •Формат «Регистр-непосредственный операнд» (Рг-но) – 3÷4 байта
- •Формат «Память-непосредственный операнд» (яп-но) – 3÷6 байтов
- •Представление данных в пэвм
- •Целые числа
- •Двоично-десятичные числа (bcd)
- •Символьные данные
- •Вещественные данные
- •Система команд мп семейства iх86 фирмы Intel
- •Команды сложения и вычитания
- •Дополнительные команды
- •Команды умножения и деления
- •Команды преобразования длины
- •Стековые команды
- •Доступ к элементам стека с помощью регистра вр
- •Команды передачи управления
- •Близкие и далекие переходы.
- •Адресация в переходах.
- •Конструкции языка Ассемблера Литература
Формат «Регистр-непосредственный операнд» (Рг-но) – 3÷4 байта
Формат команды (см. рис.6)
1-й байт |
2-й байт |
3-й, 4-й байты |
||||
КОП |
s |
w |
md |
КОП’ |
reg |
data (1 ÷ 2 байта) |
Рис. 6
Здесь s используется в сочетании с w в разный командах немногом по-разному , но смысл – выбор длины непосредственного операнда 1 или 2 байта;
КОП’ – дополнительное поле, расширение кода операции в двухоперандных командах с непосредственным операндом;
reg - обозначает конкретный регистр в сочетании с w;
data – поле данных, причем если это слово, то – в польской инверсной записи.
Формат «Память-непосредственный операнд» (яп-но) – 3÷6 байтов
Формат команды (см. рис.7)
1-й байт |
2-й байт |
С 3-го по 6-й байты |
|||||
КОП |
s |
w |
md |
КОП’ |
r/m |
adr (1 ÷ 2 байта) |
data (1 ÷ 2 байта) |
Рис. 7
Смысл полей аналогичен описанным выше.
Наибольшие сложности при анализе машинных кодов программ возникают при записи непосредственных операндов, т.к. отрицательные числа представляются в дополнительных кодах и хранятся в памяти в польской инверсной записи.
Представление данных в пэвм
Целые числа
ЭВМ поддерживает работу с числами, длиной в :
байт (1Б);
слово (2Б);
двойное слово (4Б);
Выделяются 2 типа целых чисел:
беззнаковые (неотрицательные);
числа со знаком.
Это позволяет использовать 2 диапазона чисел. Например, для 1 байта
беззнаковое целое от 0 до 255 (28 – 1),
целое со знаком по модулю от 0 до 127 (27 – 1).
а) Беззнаковые числа представляются в двоичной системе, занимая все разряды ЯП.
Например, для десятичного числа 98 = 62h = 01100010B требуется 1Б, можно использовать слово 0062h (2Б). Слово в памяти располагается в польской инверсной записи, а в регистрах – в естественном порядке байтов.
Для чисел длиной в двойное слово – аналогично.
Например, число 12345678h в оперативной памяти по адресу w располагается следующим образом:
w |
|
w+1 |
w+2 |
w+3 |
|
|
78 |
56 |
34 |
12 |
|
Б) Целые числа со знаком представляются в дополнительном коде, т.е.
Х доп.= |
Х, Х>0 |
2к-|X|, X<0 , |
где k – разрядность ЯП.
Например, для числа -98 = 9Eh (1 Б)= FF9Eh (слово 2Б).
Для облегчения перевода в дополнительный код используется алгоритм:
- все цифры, кроме младшей заменяются инверсией, т.е. для 16-ричной системы счисления (15 – {цифра});
- последняя (младшая) цифра заменяется дополнением, т.е. (16 – {цифра});
- правые нулевые разряды не изменяются, и младшим разрядом считается самый правый ненулевой разряд.
Обратный перевод в прямой код из дополнительного выполняется по тому же алгоритму.
В памяти числа длиной в слово или двойное слово хранятся в польской инверсной записи, причем знаковый разряд попадает в последний байт.