1. Базовые системы счисления. Объявления данных в Ассемблере

1. Базовые системы счисления. Объявления данных в Ассемблере

Цель работы: ознакомление студентов с системами счисления – двоичной, восьмеричной, шестнадцатеричной; представлением данных в памяти компьютера, директивами выделения памяти.

Теоретическая часть

Наименьшая единица информации, которую можно сохранить в компьютере – это бит (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, справа налево):

Nr(10) = Cn*bn +C n-1*bn-1+…+C2*b2+C1*b1+C0*b0+D1*b-1+D2*b–2+D3*b–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

Для перевода чисел из десятичной системы в двоичную или шестнадцатеричную применяется целое деление. Число делится на основание системы счисления пока не получится неделимый остаток. Полученное от деления частное снова делится и процесс завершается, когда частное тоже становится неделимым. Полученные при делении остатки записываются в обратном порядке. На схеме показан перевод числа 25 в двоичную систему счисления, в результате которого получаем число 11001b, а также перевод числа 418 в шестнадцатеричную систему счисления, в результате которого получаем число 1A2h, учитывая, что цифра десять  - это A.

Conver_Binary      Conver_Hex

Для перевода чисел из шестнадцатеричной системы в двоичную и обратно используется следующий факт: каждой шестнадцатеричной цифре соответствует четырехбитовое двоичное число и наоборот, как это представлено в таблице. Следовательно, при переводе из шестнадцатеричной системы в двоичную надо для каждой шестнадцатеричной цифры записать её двоичный код, а при обратном переводе двоичное число разбивается справа налево на группы по четыре цифры и для них записывается шестнадцатеричное соответствие.

Таблица соответствия шестнадцатеричных цифр и двоичных чисел.

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 = 3A5.

Представление целых чисел в памяти компьютера

Для представления информации на компьютере используют двоичную систему счисления. Для хранения целых чисел используется строго фиксированное число битов: 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. Перевести в двоичную, шестнадцатеричную и восьмеричную системы счисления десятеричные числа:

1)42;31;113 5)46;35;119 9) 49;30;103 13)29;37;97
2)45;81;89 6)66;25;110 10)19;53;101 14)21;87;98
3)12;38;118 7)17;63;96 11)34;50;107 15)28;45;130
4)11;43;67 8)13;69;88 12)14;70;99 16)15;72;100

2. Перевести в двоичную систему счисления шестнадцатеричные числа:

1)A45;12;56B 5)7C;72EB;31DB 9)34A;6AB;9AD 13)2B9;6F1;81B
2)1EF3;5AB;46F 6)3EB;4D8;A61 10)5AB;79F;AB8 14)7CD;2A1;B53
3)A56;5E9;CDE 7)6A3;9D0;8BE 11)9A;4DE;EF7 15)10B;87F;CD9
4)3B8;DE1;BAE 8)BC;7F9;78A 12)AB;8E4;C17 16)38E;9C7;B89

3. Перевести в восьмеричную и шестнадцатеричную системы счисления бинарные числа:

1)   00101011;     00100110;
01110011
5)   11110010;      01101010;
11111100;
9)   10000101;     11100010;    
11001011
13)  00011101;     11111001;    
00111101
2)   01100001;     01101110;    
11110011
6)   00110110;     00111011;    
10001100
10)  00011101;     01010110;    
10110010
14)  00011100;     01001100;    
01101110
3)   11100100;     01011100;     11000001 7)   11010010;     01001100;     11000111 11)  11100010;     10100001;     10001110 15)  10101001;     11010101;     111001100
4)   00001111;     10100101;     10010001 8)   11100000     11111000;     01000011 12)  10100101;     01101100;     11100001 16)  11100111;     01100101;     10110010;

4. Представить в дополнительном коде следующие числа:

1)-42;-31;-96 5)-46;-35;-94 9) -49;-30;-103 13)-29;-37;-97
2)-52;-41;-93 6)-66;-25;-85 10)-19;-53;-101 14)-21;-87;-98
3)-12;-38;-93 7)-17;-63;-99 11)-34;-50;-94 15)-28;-45;-95
4)-11;-43;-67 8)-13;-69;-88 12)-14;-70;-99 16)-15;-72;-89

5. Даны следующие определения переменных:

1) a   db   45,16,76,-6 
b   db   “abcd” 
c   dw   15 dup(0),3,3 
d   dd   345h
2) a   dd   2,24 
b  db   “aaa”,-8,23h,11101b 
c  db   6 dup(0), 45, 6 
d dw   -7,4Dh,8 dup(0)
3) a   db   “Salut”,10,13 
b   db   -16,-20,13h,2 dup(0)  
c   dw   62,34,-15 
d   dd   456C9h,4567
4) a   dd   92,45h,90,-54,-67   
b   db   10 dup(‘$’),10,13 
c   db   “amdto”,10,13,’$’ 
d   dw   5 dup(?),7,-80h
5) a   db   “lucrarea_1”,10,13 
b   db   2 dup(0) 
c   dw   38,-15,78,41,12 
d   dd   678EFh,3489,456
6) a   db   12,24,”sss” 
b   db   “ab”,-8,23h 
c   dd   6 dup(0),45 
d   dw   -7,5 dup(0)
7) a   db   35,53 
b   db   10 dup(‘ ’),10,13,“$” 
c   dw   5 dup(0) 
d   dd   555h
8) a   db   34,6,3,-8,-2 
b  db   “Hello”,‘$’ 
c   dw   6 dup(0),‘$’,10,13 
d   dw   -68,46h,7 dup(0)
9) a   db   45,16 
b   db   5 dup(?),10,13,“$” 
c   dw   55 dup(0) 
d   dd   34567h
10) a   db   76,87,92,45h 
b   db   20 dup(‘$’),10,13 
c   db   “qwert” 
d   dw   10 dup(0)
11) a   dd   78,34,67 
b   db   “Rezultat”,‘$’ 
c   db   16 dup(0),‘$’,10,13
12) a   db   73,74,75,77,78,-67 
b   db   15 dup(‘?’),10,13 
c   dd   777h
13) a   db   24,76,-56 
b   db   “abc”,11101b 
c   dd   45,4 dup(?) 
d   dw   4 dup(0),8,3
14) a   db   “testul_nr_2”,13,10 
b   db   -18,-22,18h,2 dup(0) 
c   dw   81,-16,44,18 
d   dd   568ABh
15) a   dd   87,45h,-9  
b   db   10 dup(?) 
c   db   “test_1$” 
d   dw   4 dup(0),2,7
16)  a   db   “Matematica”,10,13 
b   db   10,20h,2 dup(0) 
c   dw   60,30,-10,-20,-50 
d   dd   56789Bh

a)    определить, сколько байтов выделено данными директивами;
b)    определить адреса, по которым располагается каждая из переменных.

 

рассказать друзьям и получить подарок

Оставить комментарий

Ваш email не будет опубликован. Обязательные поля отмечены *

Вы можете использовать это HTMLтеги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Translate Переводчик

Подписка на новости

SmartResponder.ru
Ваш e-mail: *
Ваше имя: *

Хостинг для Wordpress сайтов