Uploaded by wijifod971

LR 1

advertisement
ЛАБОРАТОРНАЯ РАБОТА №1
Базовые системы счисления. Объявления данных в Ассемблере
Цель работы:
1. Ознакомиться с системами счисления – двоичной, восьмеричной,
шестнадцатеричной.
2. Ознакомится с представлением данных в памяти компьютера и
директивами выделения памяти.
Теоретические основы
Наименьшая
единица
информации,
которую
можно
сохранить
в
компьютере – это бит (eng. bit - binary digit), т.е. 0 или 1. Бит – это атом
информации, он не может быть разделен. Биты группируются по 8 и образуют
байт. Информация, которой манипулирует компьютер – это строка бинарных
чисел. Из 8 битов можно сформировать 256 комбинаций. Эти комбинации
используются для того, чтобы закодировать большие и малые буквы, цифры,
специальные символы.
Для измерения информации на компьютере используются величины:
1 Килобайт = 1 Кбайт = 210 байтов = 1024 байтам;
1 Мегабайт = 1 Мбайт = 220 байтов = 1024 Кбайтам;
1 Гигабайт = 1 Гбайт = 230 байтов = 1024 Мбайтам.
Системы счисления
Система счисления (ССЧ) – это множество правил и цифр представления
чисел. Для любой позиционной системы счисления число цифр для представления
равно основанию системы счисления. Например, для двоичной системы
основанием является число 2, следовательно, для представления чисел нужны две
цифры - 0 и 1, для шестнадцатеричной системы счисления - это 0, 1, 2, …, 9, A, B,
C, D, E, F, где буквы соответствуют значениям 10, 11, 12, 13, 14 и 15
соответственно.
Чтобы различать системы счисления, в конце числа ставится буква: B – для
двоичного числа, Q – для восьмеричного числа, D – для десятеричного числа и H
– для шестнадцатеричного. Для десятеричного числа указывать D не обязательно.
Если число записано в b–ричной системе счисления в виде:
Nr(b) = Cn Cn-1 Cn-2 … C2 C1 C0,D1 D2 D3 …,
то в десятеричной системе счисления его значение можно представить в
виде суммы цифр, умноженных на основание системы счисления в степени,
равной номеру позиции цифры в числе (нумерация начинается с 0, справа
налево):
n
n1
2
2
1
0
1
3
Nr(10)  Cn  b  C  b  ... C  b  C  b  C  b  D  b  D  b  D  b  ...
n1
2
1
0
1
2
3
Например:
Пусть даны два бинарных числа 11b, 1100011b. Переведем эти числа в
десятеричную систему счисления:
11b=1*21+1*20=3;
11100011b=1*27+1*26+1*25+0*24+0*23+0*22+1*21+1*20=227.
Рассмотрим примеры перевода восьмеричного числа в десятичную систему
счисления:
11q = 1*81+1*80 =9;
210q =2*82+1*81+0*80=136.
Пример перевода шестнадцатеричных чисел в десятичные:
11h = 1*161+1*160=17;
CA0h= C*162+A*161+0*160=3232.
Для
перевода
чисел
из
десятичной
системы
в
двоичную
или
шестнадцатеричную применяется целое деление. Число делится на основание
системы счисления, пока не получится неделимый остаток. Полученное от
деления частное снова делится и процесс завершается, когда частное тоже
становится неделимым. Полученные при делении остатки записываются в
обратном порядке. На схеме (Рисунок 1) показан перевод числа 25 в двоичную
систему счисления, в результате которого получаем число 11001b, а также перевод
числа 418 в шестнадцатеричную систему счисления, в результате которого
получаем число 1A2h, учитывая, что цифра десять - это A.
Рисунок 1 Схема перевода десятичного числа в двоичную и шестнадцатеричную ССЧ
Для перевода чисел из шестнадцатеричной системы в двоичную и обратно
используется следующий факт: каждой шестнадцатеричной цифре соответствует
четырёхбитовое двоичное число и наоборот, как это представлено в таблице ().
Следовательно, при переводе из шестнадцатеричной системы в двоичную надо
для каждой шестнадцатеричной цифры записать её двоичный код, а при обратном
переводе двоичное число разбивается справа налево на группы по четыре цифры,
и для каждой группы записывается шестнадцатеричное соответствие.
Таблица 1
Соответствие шестнадцатеричных цифр и двоичного эквивалента
0
0000
4
0100
8
1000
C
1100
1
0001
5
0101
9
1001
D
1101
2
0010
6
0110
A
1010
E
1110
3
0011
7
0111
B
1011
F
1111
Например, переведем число 1FDh в двоичное представление:
1FDh = 0001-1111-1101b = 111111101b
Переведем
двоичное
число
1110100101b
в
шестнадцатеричное
представление: 0011-1010-0101b = 3A5h.
Представление целых чисел в памяти компьютера
Для представления информации на компьютере используют двоичную
систему
счисления.
Для
хранения
целых
чисел
используется
строго
фиксированное число битов: 8, 16, 32, 64. На n бинарных позиций можно записать
целое число со знаком в диапазоне от -2n-1 до 2n-1-1. Позиции нумеруются от 0 до
n-1 справа налево. Например, число 67 в восьми двоичных позициях будет
представлено как 01000011b. Числа без знака можно представить в диапазоне 0 до
2n-1.
Целое число может храниться в виде прямого или дополнительного кода.
Для представления знака числа используется бит, называемый знаковым. Он
находится в позиции n-1 и является старшим битом числа. Для положительных
чисел этот бит равен нулю, для отрицательных – единице.
Прямой код используется для хранения положительных чисел или чисел
без знака.
Дополнительный код используется для хранения отрицательных чисел.
Для получения представления числа в дополнительном коде сначала находится
прямой код модуля числа, затем его обратный код. Обратный код получается
инверсией каждого разряда в двоичном представлении числа: 0 преобразуется в 1,
а 1 – в 0. На последнем шаге к обратному коду прибавляется 1.
Например, для представления числа -65 имеем:
01000001b
прямой код числа +65
10111110b
обратный код
10111111b
дополнительный код числа -65
Дополнительный код служит для замены операции вычитания целых чисел
на операцию сложения с числом, представленным в дополнительном коде. В этом
случае процессору нет необходимости производить операцию вычитания целых
чисел.
Типы данных
BYTE. Этот тип данных занимает 1 байт (8 битов). При помощи этого типа
можно зашифровать целое число со знаком в диапазоне от -128 до +127 или без
знака в диапазоне от 0 до 255, любой ASCII–символ, который также кодируется
целым числом. Директива определения – DB (Define Byte).
WORD. Этот тип данных занимает 2 байта (16 битов). В переменную
данного типа можно поместить целое число в диапазоне от -32768 до+32767 или
от 0 до 65535, два ASCII–символа или относительный адрес памяти типа near. При
этом запись в память производится следующим образом: младшая часть числа
располагается по младшему адресу, а старшая – по старшему. Это справедливо и
для других типов данных. Например, если целое шестнадцатеричное число 1234h
расположено по адресу 1000h, то младшая часть 34h будет расположена по адресу
1000h, а 12h – по адресу 1001h. Директива определения – DW (Define word).
DWORD – 4 байта (2 слова) может вместить целое 32–битное число со
знаком или без знака, число с плавающей точкой, 32–разрядный адрес памяти или
4 ASCII–символа. При хранении адреса адрес сегмента располагается в двух
старших байтах, а смещение – в двух младших байтах памяти. Директива
определения – DD (Define Double word).
QWORD – 8 байтов. Может быть целым знаковым или беззнаковым,
числом или числом с плавающей точкой двойной точности. Директива
определения – DQ (Define Quad).
TEN-BYTES – 10 байтов. Используется для хранения данных в основной
памяти или в сопроцессоре. Может быть упакованным двоично–десятичным
числом, расширенным целым числом или расширенным числом с плавающей
точкой. Директива определения - DT (Define Ten bytes).
Общий синтаксис определения данных:
<имя> <тип> <список значений>
или
<имя> <тип> <число> dup (выражение),
где имя – идентификатор, тип – одна из рассмотренных выше директив
выделения памяти, список значений – список, который может содержать
символьные или числовые константы. Он может также содержать символ ?, если
значение не определено, или адрес – имя переменной или метку, строку ASCII–
символов, заключенных в кавычки или апострофы. Директива dup предписывает
повторение значений, определяемых выражением, заданное <число> раз.
Выражение может быть константой, константами, объединенными знаками
арифметических операций, списком значений или символом ?, если значение не
определено.
Например,
var_a
db 2 dup (0, 3 dup (1))
;эквивалентно
var_a
db 0,1,1,1,0,1,1,1
var_b
db 1, 2, 3, ?, ?
adr_a
dw var_a
adr_b3
dd var_b+3
Определим размер памяти, выделенный под каждую из следующих
переменных:
m1
db
4, 5, 1, 6
;4*1=4 байта
m2
db
“xzyqw”
;5*1=5 байтов
m3
dw
12 dup(?)
;12*2=24 байта
m4
dd
345h, 234h
;2*4=8 байтов
Общее количество байтов, выделенных данными директивами, равно 41
байту. Переменная m1 располагается по относительному адресу 00h, m2 – 04h,
m3 – 09h, а m4 – 021h.
Задание
1. Изучить теоретический материал лабораторной работы.
2. Разобрать примеры решения задач, приведённых в методических
указаниях.
3. Перевести в двоичную, шестнадцатеричную и восьмеричную системы
счисления десятеричные числа согласно варианту:
1
42;31;113
6
46;35;119
11
49;30;103
16
29;37;97
2
45;81;89
7
66;25;110
12
19;53;101
17
21;87;98
3
12;38;118
8
17;63;96
13
34;50;107
18
28;45;130
4
11;43;67
9
13;69;88
14
14;70;99
19
15;72;100
5
22;34;213
10
65;98;250
15
53;77;198
20
67;101;234
4. Перевести в двоичную систему счисления шестнадцатеричные числа:
1
A45;12;56B
6
7C;72EB;31DB
11
34A;6AB;9AD
16
7CD;2A1;B53
2 1EF3;5AB;46F
7
3EB;4D8;A61
12
5AB;79F;AB8
17
10B;87F;CD9
3
A56;5E9;CDE
8
6A3;9D0;8BE
13
9A;4DE;EF7
18
38E;9C7;B89
4
86C;7E6;ACD
9
BC;7F9;78A
14
AB;8E4;C17
19
12B;5FE;13D
5
3B8;DE1;BAE
10
56C;DE0;53F
15
2B9;6F1;81B
20
6F;AC9;EA7
5. Перевести в восьмеричную и шестнадцатеричную системы счисления
бинарные числа:
00101011;
1
2
3
4
5
00110110;
00100110;
6
00111011;
11100010;
11
10100001;
11100111;
16
01100101;
01110011
10001100
10001110
10110010
01100001;
11010010;
10100101;
01010001;
01101110;
7
01001100;
12
01101100;
17
11001100;
11110011
11000111
11100001
10000110
11100100;
11100000;
00011101;
10110011;
01011100;
8
11111000;
13
11111001;
18
00110101;
11000001
01000011
00111101
11011000
00001111;
10000101;
00011100;
10001100;
10100101;
9
11100010;
14
01001100;
19
00011111;
10010001
11001011
01101110
10000110
11110010;
00011101;
10101001;
01110011;
01101010;
10
01010110;
11111100
15
11010101;
10110010
20
111001100
10011001;
11110111
6. Представить в дополнительном коде следующие числа:
1
-40;-37;-96
6
-46;-35;-94
11 -29;-53;-101
16
-21;-83;-148
2
-52;-41;-93
7
-62;-75;-95
12
-34;-50;-94
17
-28;-45;-130
3
-12;-39;-93
8
-15;-69;-91
13
-14;-70;-91
18
-15;-72;-100
4
-13;-53;-77
9
-19;-60;-88
14 -53;-79;-198
19
-67;-109;-204
5
-24;-32;-73
10 -49;-30;-103 15 -39;-87;-167
20
-48;-59;-173
7. Даны следующие определения переменных. Определить адреса, по
которым располагается каждая из переменных, и сколько байтов выделено
данными директивами.
a db 45,16,76,-6
1
2
b db “abcd”
c dw 15 dup(0),3,3
a dd 78,34,67
7
b db “Resultat”,‘$’
c db 6 dup(0),‘$’,10,13
a db 12,24,”sss”
13
b db “ab”,-8,23h
c dd 6 dup(0),45
d dd 345h
d dw 32,56,-11
d dw -7,5 dup(0)
a db “Salut”,10,13
a db 24,76,-56
a db 34,6,3,-8,-2
b db -16,-20,13h,2 dup(0)
c dw 62,34,-15
8
b db “abc”,11101b
c dd 45,4 dup(?)
14
b db “Hello”,‘$’
c dw 6
d dd 456C9h,4567
d dw 4 dup(0),8,3
dup(0),‘$’,10,13
d dw -68,46h,7
dup(0)
3
a db “lucrarea_1”,10,13
a dd 7,45h,-9
b db 2 dup(0)
b db 10 dup(?)
c dw 38,-15,78,41,12
9
d dd 678EFh,3489,456
c db “test_1$”
a db 76,87,92,45h
b db 20
15
dup(‘$’),10,13
c db “qwerty”
d dw 4 dup(0),2,7
d dw 10 dup(0)
a db 73,74,75,77,-67
a db 35,53
4
b db 10 dup(‘ ’),10,13,“$”
c dw 5 dup(0)
a dd 2,24
10
d dd 555h
b db “AVIA”,-8,23h,11101b
c db 6 dup(0), 45, 6
b db 15
16
d dw -7,4Dh,8 dup(0)
dup(‘?’),10,13
c dd 777h
d dw -11,3Ah,4
dup(0)
a db
a db 45,16,-23
5
b db 5 dup(?),10,13,“$”
c dw 55 dup(0)
a dd 92,45h,90,-54,-67
11
d dd 34567h
b db 10 dup(‘$’),10,13
c db “avto”,10,13,’$’
“test_lr_2”,13,10
17
d dw 5 dup(?),7,-80h
b db -18,-22,18h,2
dup(0)
c dw 81,-16,44,18
d dd 568ABh
6
a db “binom_1”,16,73
a dd -7,4Ah,-19,10
b db 7 dup(0)
b db 5 dup(?)
c dw 358,-11,75,40,19
d dd 67AFh,3189,56
12
c db “test_3$_new”
d dw 4 dup(0),5,9,13
a db 19,74,”SOS”
b db “abcd”,18
17,A13h
c dd 3 dup(0),65
d dw -34,7 dup(0)
КОНТРОЛЬНЫЕ ВОПРОСЫ
1. Что такое бит?
2. Сколько бит информации включает 1 байт?
3. Что такое позиционные системы счисления?
4. Какие позиционные системы счисления вы знаете?
5. Как переводятся числа, представленные в позиционных ССЧ, в десятичную
ССЧ?
6. Как переводятся числа из десятичной ССЧ в другую позиционную ССЧ?
7. Что такое прямой код числа и его получение?
8. Что такое дополнительный код числа и его получение?
9. Какие типы данных существуют в ассемблере?
10. Как определяются данные в ассемблере?
СПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ
1. Андреева Е.В., Фалина И.Н. Системы счисления и компьютерная
арифметика. Изд. 2-е. – М.: Лаборатория Базовых Знаний, 2000. – 248 с.: ил.
2. Фомин С.В. Системы счисления. - М.: Наука, 1987. – 48 с.
3. Юров В. Assembler: практикум – СПб: Питер, 2003. - 400 с.
4. Пирогов В.Ю. Ассемблер для Windows. - 3-е изд. - СПб.: БХВ-Петербург,
2005. - 864 с.
5. Ассемблер на примерах. Базовый курс. Рудольф Марек – СПб: Наука и
Техника, 2005. – 240 с.
Download