Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Met_Lab2_121113

.pdf
Скачиваний:
16
Добавлен:
11.05.2015
Размер:
1.72 Mб
Скачать

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

«ТОМСКИЙ ГОСУДАРСТВЕННЫЙ ПЕДАГОГИЧЕСКИЙ УНИВЕРСИТЕТ» (ТГПУ)

С.А. Казарин, А.П. Клишин

Практикум по архитектуре компьютера

Учебное пособие

Томск 2009

УДК

Печатается по решению методического

ББК

совета Томского государственного

К 143

педагогического университета

Казарин С.А., Клишин А.П.

Практикум по архитектуре компьютера. Учебное пособие. – Томск: Издательство Томского государственного педагогическог университета. 2008. – 100 с.

Учебное пособие представляет собой практическую часть курса “Архитектура ЭВМ”. Большое внимание уделено арифметическим и логическим основам ЭВМ, принципам построения различных устройств и их взаимодействию. Изложены основные основы языка Assembler.

©Томский государственный педагогический университет, 2009

©С.А. Казарин, А.П. Клишин, 2009

2

Введение

3

1. Арифметические основы ЭВМ

1.1 Системы счисления

Как известно, системой счисления называется совокупность правил записи чисел c помощью заданного набора специальных знаков – цифр.. Системы счисления подразделяются на позиционные и непозиционные. Как позиционные, так и непозиционные системы счисления используют определенный набор символов- цифр, последовательное сочетание которых образует число. Непозиционные системы счисления появились раньше позиционных. Они характеризуются тем, что в них символы, обозначающие то или иное число, не меняют своего значения в зависимости от местоположения в записи этого числа. Классическим примером такой системы счисления является «римская». В ней для записи чисел используются буквы латинского алфавита. При этом I означает единицу, V- пять, X- десять, L- пятьдесят, C- сто, D- пятьсот, M- тысячу. Для получения количественного эквивалента числа в римской системе счисления необходимо просто просуммировать количественные эквиваленты входящих в него цифр. Исключение из этого правила составляет случай, когда младшая цифра идет перед старшей,- в этом случае нужно не складывать, а вычитать число вхождений этой младшей цифры. К примеру, количественный эквивалент числа 577 в римской системе счисления – это DLXXVII=500+50+10+10+5+1+1=577. Другой пример: CDXXIX=500-100+10+10-1+10=429.

В позиционной системе счисления количество символов в наборе равно основанию системы счисления. Место каждой цифры в числе называется позицией. Номер позиции символа (за вычетом единицы) в числе называется разрядом. Разряд 0 называется младшим разрядом. Каждой цифре соответствует определенный количественный эквивалент. Введем обозначениезапись А( р) будем обозначать количественный эквивалент числа А, состоящего

из n цифр ак (где k=0,…,n-1) в системе счисления с основанием p. Это число можно представить в виде последовательности цифр: А( р) = аn1an2 ...a1a0 . При этом, конечно, всегда

выполняется неравенство аk<p.

Общее количественное значение числа (количественный эквивалент) не зависит от способа его представления и остается одинаковым во всех системах счисления, различаются только формы представления одного и того же количественного содержания числа.

В общем случае количественный эквивалент некоторого положительного числа А в позиционной системе счисления можно представить выражением:

A

= a

n1

pn1 + a

n2

pn2 +...+ a p1

+ a

0

p0

,

(1)

( p)

 

 

1

 

 

 

 

где: р - основание системы счисления (некоторое целое положительное число); а - цифра данной системы счисления; n - номер старшего разряда числа.

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

Двоичная система счисления

Набор цифр для двоичной системы счисления: {0, 1}, основание степени p = 2.

Количественный эквивалент некоторого целого n-значного двоичного числа

вычисляется согласно формуле (1):

 

 

 

 

A

= a

n1

*2n1 + a

n2

*2n2 +...+ a *21

+ a

0

*20.

(2)

(2)

 

 

1

 

 

 

Как мы уже отмечали, наличие этой системы счисления обусловлено тем, что компьютер построен на логических схемах, имеющих в своем элементарном виде только два состояния – включено и выключено. Например, рассмотрим двоичное число 10100111.

4

Вычислим количественный эквивалент этого двоичного числа. Согласно формуле (2), это будет величина, равная следующей сумме:

1*27 + 0*26 +1*25 + 0*24 + 0*23 +1*22 +1*21 +1*20.

Сложение и вычитание двоичных чисел (рис. 1) выполняется так же, как и для других позиционных систем счисления, например десятичной. Точно так же выполняются заем и перенос единицы из (в) старший разряд.

Например

Рис. 1. Сложение и вычитание двоичных чисел.

Таблица 1

 

Степени двойки

 

 

 

m

 

2m

1

 

2

 

 

 

2

 

4

 

 

 

3

 

8

 

 

 

4

 

16

 

 

 

5

 

32

 

 

 

6

 

64

 

 

 

7

 

128

 

 

 

8

 

256

 

 

 

9

 

512

 

 

 

10

 

1024

 

 

 

11

 

2048

 

 

 

12

 

4096

 

 

 

Шестнадцатеричная система счисления

Данная система счисления имеет следующий набор цифр: {0, 1, 2, …, 9, А, B, C, D, E, F}, основание системы р = 16.

Количественный эквивалент некоторого целого n-значного шестнадцатеричного числа вычисляется согласно формуле (1):

A( p) = an1 16n1 + an2 16n2 + ... + a1 161 + a0 160.

К примеру, количественный эквивалент шестнадцатеричного числа f45ed23c равен: 15 167 + 4 166 + 5 165 +14 164 +13 163 + 2 162 + 3 161 +12 160.

 

 

Таблица 2.

 

Шестнадцатеричные цифры

Десятичное

Двоичная триада

Шестнадцатеричное число

0

0000

0

1

0001

1

2

0010

2

3

0011

3

5

4

0100

4

5

0101

5

6

0110

6

7

0111

7

8

1000

8

9

1001

9

10

1010

А, а

11

1011

B, b

12

1100

C, c

13

1101

D, d

14

1110

E, e

15

1111

F, f

16

10000

10

Запомнить поначалу эти соотношения сложно, поэтому полезно иметь под руками некоторую справочную информацию. Таблица 2 содержит представления десятичных чисел из диапазона 0-16 в двоичной и шестнадцатеричной системах счисления. Таблицу 2 удобно использовать для взаимного преобразования чисел в рассматриваемых нами трех системах счисления. Шестнадцатеричная система счисления при производстве вычислений несколько сложнее, чем двоичная, в частности, в том, что касается правил переносов в старшие разряды (заемов из старших разрядов). Главное здесь – помнить следующее равенство:

(1+ F = 10)16 .

Эти переходы очень важны при выполнении сложения и вычитания шестнадцатеричных чисел. Пример приведен на рис. 2:

Рис. 2. Сложение и вычитание шестнадцатеричных чисел.

Десятичная система счисления

Это наиболее известная система счисления, так как она постоянно используется нами в повседневной жизни. Данная система счисления имеет следующий набор цифр:

{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, основание степени р = 10.

Количественный эквивалент некоторого целого n-значного десятичного числа вычисляется согласно формуле (1)

A(10) = an1 10n1 + an2 10n2 + ...+ a1 101 + a0 100.

К примеру, значение числа A(10) = 1783 равно: 1 103 + 7 102 + 8 101 + 3 100.

1.2 Перевод чисел из одной системы счисления в другую

Рассмотрение данных систем счисления само по себе еще только полдела. Для того чтобы в полной мере использовать их по своей практической работе при программировании на ассемблере, необходимо научиться выполнять взаимное преобразование чисел между тремя системами счисления. Этим мы и займемся в дальнейшем. Кроме того, дополнительно будут рассмотрены некоторые особенности микропроцессов Intel при работе с числами со знаком.

Перевод в десятичную систему счисления

6

Этот тип перевода наиболее прост. Обычно его производят с помощью так называемого алгоритма замещения, суть которого заключается в следующем: сначала в десятичную систему счисления переводится основание степени р, а затем – цифры исходного числа. Результаты подставляются в формулу (1). Полученная сумма и будет искомым результатом. Неявно при обсуждении двоичной и шестнадцатеричной систем счисления мы производили как раз такое преобразование.

Перевод в двоичную систему счисления

Перевод из десятичной системы счисления

1.Разделить десятичное число А на 2. Запомнить значение частного - q и остаток - a.

2.Если в результате шага 1 частное q ≠ 0, то принять его за новое делимое и отметить остаток а, на который будет очередной значащей цифрой числа, вернуться к шагу 1, на котором в качестве делимого (десятичного числа) участвует полученное на шаге 2 частное.

3.Если в результате шага 1 частное q=0, алгоритм прекращается. Выписать остатки в порядке, обратном их получению. Получится двоичный эквивалент исходного числа.

Кпримеру, требуется перевести число 28410 в двоичную систему счисления (Рис. 3):

Рис. 3. Перевод в двоичную систему счисления

Порядок обхода остатков для получения результата показан стрелкой, и результат преобразования равен 1000111002 .

Перевод из шестнадцатеричной системы счисления

Этот переход мы уже обсуждали выше. Суть его заключается в последовательной замене шестнадцатеричных цифр соответствующими двоичными тетрадами согласно табл. 6.2. К примеру, E4D516 1110 0100110101012 .

Перевод из десятичной системы счисления

Общая идея такого перевода аналогична рассмотренной выше в алгоритме перевода в двоичную систему счисления из десятичной.

1.Разделить десятичное число А на 16. Запомнить значение частного - q и остаток - а.

2.Если в результат шага 1 частное q ≠ 0, то принять его за новое делимое, записать остаток и вернутся к шагу 1.

3.Если частное q = 0, прекратить работу алгоритма. Выписать остатки в порядке, обратном их получению. Получится шестнадцатеричный эквивалент исходного десятичного числа.

4.В случае, если остаток от деления попадает в диапазон от 10 до 15, в результат записывается шестнадцатеричный цифра (A, B, C, D, E или F), а не полученное в остатке десятичное число.

Перевод из двоичной системы счисления

Идея алгоритма аналогична идее перевода из двоичной системы счисления в шестнадцатеричную. Суть в том, что двоичное число разбивается на тетрады, начиная с

7

младшего разряда. Далее каждая тетрада приводится к соответствующему шестнадцатеричному числу согласно табл. 2.

К примеру, требуется перевести число 111001011010111101011000110110001111010101011012 в шестнадцатеричную систему счисления.

Разобьем его на тетрады:

0111 0010 1101 0111 1010 1100 0110 1100 0111 1010 1010 1101.

По тетрадам приводим последовательности нулей и единиц к шестнадцатеричному представлению:

7 2 d 7 a c 6 c 7 a a d.

В итоге мы получили результат преобразования: 11100101101011110101100011011000111101010101101272d7ac6c7aad16 .

Перевод дробных чисел

Учащийся должен уметь выполнять перевод в различные системы счисления не только целых чисел, но дробных. Особенно это важно при программировании алгоритмов, использующих операции с плавающей точкой. Без владения в полной мере знаниями о том, как представляются дробные числа в памяти компьютера и в регистрах сопроцессора, вам вряд ли удастся овладеть программированием на ассемблере в полной мере. Давайте разберемся с наиболее часто используемыми на практике способами перевода дробных чисел. Для этого формулу (1) преобразуем к следующему виду:

A( p) = an1 * pn1 + an2 * pn2 + ...+ a1 * p1 + a0 * p0a1 * p1 + a2 * p2 + ...+ am * pm

Рассмотрим операции перевода чисел на примерах.

Пример 1. Перевести в десятичное представление дробь в двоичной системе счисления 110100,010010112.

Для перевода используем формулу (3)

110100,010010112 = 1 25 +1 24 + 0 23 +1 22 + 0 21 + 0 20 + 0 21 + +1 22 + 0 23 + 0 24 +1 25 + 0 26 +1 27 +1 28.

Вычислить целую часть десятичной дроби 1 25 +1 24 + 0 23 +1 22 + 0 21 + 0 20 для вас труда не составит. Для вычисления остальной части выражения удобно использовать табл. 3.

Таблица 6. Значения отрицательных степеней по основанию числа 2

m

2-m

1

0,5

2

0,25

3

0,125

4

0,0625

5

0,03125

6

0,015625

7

0,0078125

Далее вы сами можете продолжить табл.3 значениями отрицательных степеней по основанию числа 2.

Упражнение. Посчитайте результат перевода значения 110100,010010112 в десятичное представление.

Пример 2. Перевести в десятичное представление дробь в шестнадцатеричной системе счисления 1df2,a1e416.

8

Вновь используем формулу (3) и получим:

1dt2,ale416 = 1 163 +13 162 +15 21 + 2 160 +10 161 +1 162 +14 163 + 4 164. Для удобства вычисления дробной части приведем значения отрицательных степеней

числа 16 табл. 4.

Таблица 4.

 

Значения отрицательных степеней по основанию числа 16

 

 

 

m

 

16-m

1

 

0,0625

2

 

0,00390625

3

 

0,000244140625

4

 

0,0000152587890625

5

 

0,00000095367431640625

6

 

0,000000059604644775390625

7

 

0,0000000037252902984619140625

Перевод из двоичной системы счисления в шестнадцатеричную систему и обратно выполняется, как обычно, на основе тетрад и трудности вызывать не должен.

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

Общий алгоритм перевода десятичной дроби в другую систему счисления можно представить следующей последовательности шагов:

1.Выделить целую часть десятичной дроби и выполнить ее перевод в выбранную систему счисления по алгоритмам, рассмотренным выше.

2.Выделить дробную часть и умножить ее на основание выбранной новой системы счисления.

3.В полученной после умножения дробной части десятичной дроби выделить целую часть и принять ее в качестве значения первого после запятой разряда числа в новой системе счисления.

4.Если дробная часть значения, полученного после умножения, равна нулю, то прекратить процесс перевода. Процесс перевода можно прекратить также в случае, если достигнута необходимая точность вычисления. В противном случае перейти к шагу 3.

Пример 3. Перевести в двоичную систему счисления десятичную дробь 108,40610. Переведем целую часть десятичной дроби 248,568 в двоичную систему счисления (рис. 5).

Рис. 5. Перевод целой части числа 248,568 в двоичную систему счисления

Переведем дробную часть десятичного числа 248,568 по алгоритму, приведенному выше (рис. 6).

9

Рис. 6. Перевод дробной части числа 248,568 в двоичную систему счисления

Результат перевода следующий: 248,568 = 100011100,1001.

При переводе дробного числа из десятичной системы счисления в шестнадцатеричную целесообразно предварительно перевести число в двоичную систему. Затем двоичное представление разбить на тетрады отдельно до запятой и после запятой. Разбиение на тетрады двоичных разрядов целой части производят от запятой в сторону старших разрядов. Неполную старшую тетраду дополняют слева ведущими нулями. Разряды дробной части, напротив, разбивают на тетрады от запятой вправо к младшим разрядам. Если последняя тетрада неполная, то ее дополняют справа нулями.

Перевод в десятичную можно осуществить аналогично переводу из двоичной СС, только умножать нужно уже не на степени 2, а на степени 16.

Числа со знаком

До сих пор предполагалось, что числа положительные. А как представляются в компьютере числа со знаком? Кодирование осуществляется за счет введения дополнительного бита знака, обычно расположенного перед битом старшего разряда.

Положительные целые со знаком – кодируются значением 0, в бите знака. Отрицательные целые со знаком - 1. Отличительным признаком числа со знаком

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

Дополнительный код некоторого отрицательного числа представляет собой результат инвертирования (замены 1 на 0 и наоборот) каждого бита двоичного числа, равного по модулю исходного отрицательного числа плюс единица. К примеру, рассмотрим десятичное число – 18510. Модуль данного числа в двоичном представлении равен (10111001)2. Сначала нужно дополнить это значение слева нулями до нужной размерности – байта, слова и т. д. В нашем случае дополнить нужно до слова, так как диапазон представления знаковых чисел в байте составляет -128…127. Следующее действие – получить двоичное дополнение. Для этого все разряды двоичного числа нужно инвертировать:

(0000000010111001)2 (1111111101000110)2. Теперь прибавляем единицу:

(111111101000110)2+(0000000000000001)2 = (1111111101000111)2.

Результат преобразования равен (1111111101000111)2. Именно так и представляется число – 18510 в компьютере.

При работе с числами со знаком от вас наверняка потребуется умение выполнять обратное действие – имея двоичное дополнение числа, определить значение его модуля. Для этого необходимо выполнить два действия:

10

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]