Все регистры процессора 16-разрядные, это означает, что с их помощью можно адресовать всего лишь 65536 байт памяти, т.е. 64 Кбайта. Для увеличения адресного пространства, процессор, при вычислении адресов памяти, умножает содержимое сегментного регистра на 16 (10Н), что соответствует сдвигу регистра влево на 4 шестнадцатеричных разряда и расширения адреса до 20 битов, которыми можно адресовать уже до 1 Мбайта памяти, т.е. 1 048 576 байт. Затем, к этому базовому адресу прибавляет смещение из команды, если вычисляется адрес операнда или содержимое регистра IP, если вычисляется адрес команды. Следовательно, процесс вычисления адреса ячейки памяти, выглядит следующим образом:
19 0 15 0
Регистр сегмента (CS, DS, SS, ES) × 10Н | + | IP или смещение из команды | = |
19 0
= | исполнительный (физический) адрес памяти. |
Например: Вычислить физический адрес ячейки памяти TAB+[SI] в команде MOV AX, TAB+[SI]; Переслать в регистр AX содержимое ячейки
памяти находящейся в сегменте данных
по адресу TAB + SI.
Допустим, что DS=04AFН, SI=0020Н, а относительный адрес (смещение) ячейки ТАВ=00FAН, тогда физический или (исполнительный) адрес ячейки вычисляется следующим образом:
физический адрес AF = (DS×10Н)+SI+[TAB] = 04AF0+0020+00FA = 04C0A.
Физический адрес любой команды в программе вычисляется по следующей формуле: AF = (CS × 10H) + IP.
Допустим, что рассматриваемая команда имеет смещение равное 24Н, то есть содержимое IP = 24H, а содержимое CS = 4F2AH. Тогда физический адрес этой команды в памяти будет следующим:
физический адрес AF = (CS × 10H) +IP = (4F2A0H) + 0024H = 4F2C4H.
Физический адрес данных в стековом сегменте, вычисляется по тому же алгоритму: (SS × 10H) + SP = AF.
Представление данных в ЭВМ
Физически, команды, исходные данные, результаты и другая информация, перерабатываемая ЭВМ, обычно представляется в виде электрических сигналов (напряжений постоянного тока). Наличие электрического сигнала, с уровнем напряжения или тока не равным нулю, означает информационную единицу, отсутствие сигнала – информационный ноль. Это обусловило применить для отображения дискретной информации двоичную систему счисления. Систему, использующую для представления любого числа комбинацию из двух цифр – 1 и 0, то есть комбинацию из двоичных разрядов. Так как двоичная система счисления относится к позиционным система, то вес цифры в двоичном числе зависит от её положения в числе. Основание двоичной системы равно 2, поэтому и веса соседних цифр в числе будут разниться в два раза. Вес первой цифры в числе равен 1, второй -2, третьей -4, четвертой -8 и т.д.
Один двоичный разряд -0 либо 1, обычно называют битом, это минимальная единица информации. Набор из восьми бит – байтом. 10110101 – один байт. Два байта – слово. Четыре байта – двойное слово. Восемь байт – учетверённое слово.
Более компактную форму записи двоичных чисел обеспечивает шестнадцатиричная система счисления, в которой каждая цифра кодируется четырьмя двоичными битами. Для написания чисел, в шестнадцатиричной системе используют 10 цифр десятичной системы и шесть букв латинского алфавита-от A до F. Каждая щестнадцатиричная цифра имеет свой вес, кратный 16, значит вес любой цифры в числе в 16 раз больше соседней справа цифры. Таким образом, крайняя правая цира имеет вес 160, следущая 161 и т.д. В таблице 1.1 приведены цифры шестнадцатиричной системы счисления и их эквиваленты.
В двоичной тетраде, кодирующей одну шестнадцатиричную цифру, каждый бит имеет определенный вес. Например, в двоичной тетраде 1111, веса битов соответственно равны – 8421. Исходя из принятой системы кодирования, десятичное число 234 будет соответствовать шестнадцатиричному числу ЕАН и двоичному 1110 1010В. (Заметим, что буква Н в числе ЕА, означает шестнадцатиричное число, а буква В в двоичном числе-признак двоичной системы).
Отрицательные числа в компьютере представляются в дополнительном коде. В дополнительном коде запись положительных чисел совпадает с их обычной записью, а отрицательные числа представлены инверсным (обратным) кодом плюс 1.
Таблица 1.1- Представление цифр в различных системах счисления
Двоичное число | Десятичный эквивалент | 16–ричный эквивалент |
0000 | 0 | 0 |
0001 | 1 | 1 |
0010 | 2 | 2 |
0011 | 3 | 3 |
0100 | 4 | 4 |
0101 | 5 | 5 |
0110 | 6 | 6 |
0111 | 7 | 7 |
1000 | 8 | 8 |
1001 | 9 | 9 |
1010 | 10 | A |
1011 | 11 | B |
1100 | 12 | C |
1101 | 13 | D |
1110 | 14 | E |
1111 | 15 | F |
0011 0101 | 53 | 35 |
1101 0110 1001 | 3433 | 0D69 |
Например: десятичное число 4 его двоичный код 0000 0100
десятичное число -4 его инверсный код 1111 1011
+
плюс единица 0000 0001
дополнительный код 1111 1100
Представление данных в дополнительном коде, дает возможность заменить операции вычитания на более простые операции сложения, что значительно упрощает структуру процессора. Пример вычитания двух десятичных чисел:
(-56) – десятичное 11001000 – его эквивалент в дополнительном коде
+ +
(+105) – десятичное 01101001 – его эквивалент в дополнительном коде
(+ 49) сумма 00110001 – сумма в двоичном коде.
При задании отрицательных чисел в программе необходимо:
если число десятичное, то перед ним достаточно поставить знак минус (-32).
если число двоичное или шестнадцатиричное, то его надо вводить в дополнительном коде.
Например: 11100000В и 0Е0Н – формы записи десятичного числа (-32) в дополнительном коде.
Введение в язык ассемблера
Дата: 2018-11-18, просмотров: 533.