Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаба 2 / КНИГА_АСМ.docx
Скачиваний:
2
Добавлен:
09.02.2024
Размер:
160.52 Кб
Скачать
    1. 2.3. Системы счисления

Любое число может быть задано в различных системах счисления. Например, число 130 в различных системах счисления выглядит так:

130

десятичная

10000010

двоичная

82

шестнадцатеричная

202

восьмеричная

Наиболее часто при написании ассемблерных программ используются числа, заданные в 10-й и 16-й системах счисления. Реже, но все-таки достаточно интенсивно, используется двоичная система счисления. Именно ими мы и ограничимся, хотя надо честно признать, что здесь сознательно упущена довольно широко используемая «двоично-десятичная» система счисления.

Для того чтобы транслятор мог понять, о какой системе счисления идет речь при задании в программе какого-либо числа, справа от этого числа пишется соответствующая буква:

130

десятичная

10000010b

двоичная

82h

шестнадцатеричная

Проще говоря, если буквы нет, транслятор понимает число, как 10-е и сам переводит его в двоичный эквивалент, с которым уже и работает процессор. Если есть буква h (hexadecimal), транслятор понимает это число как 16-е и сам переводит его в двоичный эквивалент и. т. д. Буква b означает двоичную систему (binary).

Кстати, транслятор считает значительно быстрее и правильнее, чем «человек с калькулятором», поэтому если Вам надо в Вашей программе, допустим, занести в регистр ax значение 34*21/ 8, смело пишите:

mov ax, 34*21/8 транслятор сам все подсчитает лучше Вас.

Но не стоит быть слишком смелым (вот мы уже и отвлекаемся от основной темы раздела). Если Вы не уверены в том, как транслятор поймет Вашу конструкцию, лучше ее не пишите. Любую конструкцию обычно можно задать разными способами. При этом лучше выбрать способ, в котором Вы будете уверены, хотя, возможно, Вам при этом придется написать и больше команд. Например, программист ввел в программе три переменные x, y и z

x db 7 ; директивой db программист «попросил» транслятор выделить в памяти байт ; для переменной, которую программист назвал х, и занести в этот байт число 7

y db 17

z db 3

; затем где-то в программе программист написал команду

mov al, x+2

Если программист при этом рассчитывает, что в регистр al попадет 7+2=9, то он заблуждается. В al попадет 3 (адрес Х плюс 2 байта = адрес Z, по этому адресу из памяти и будет выбрана информация). Чтобы в al действительно попало 7+2=9, надо было писать:

mov al, x ; занести в al значение переменной х

add al, 2 ; прибавить к содержимому al двойку

Вернемся к нашей основной теме. У новичков часто возникает вопрос: «А какую систему счисления лучше использовать в моей программе?» Отвечаем, та или иная система счисления используется в зависимости от ситуации. Например, в регистр al надо занести число 112, здесь удобно написать:

mov al, 112

Теперь в al надо занести 12, а в регистр ah9. Можно написать:

mov al, 12 ; в al 00001100b= 0ch

mov ah, 9 ; в ah 00001001b= 9h

Но ведь можно написать и короче, учитывая, что ah и al составляют вместе регистр ax:

mov ax, 90ch ; в ax 0000100100001100b = 090ch.

Курсивом выделена та часть числа, которая попадает в ah. То есть здесь удобно использовать 16-ю систему счисления. (Если бы мы использовали 10-ю и написали бы mov ax, 912 это было бы неправильно, поскольку транслятор, переведя 912 в двоичный код, получил бы 0000001110010000 то есть ah попало бы 3, а в al – 144, что никак не соответствует заданию).

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

Отметим следующий важный момент. В шестнадцатеричной системе счисления в качестве цифр используются буквы: a (10), b (11) ….. f (15). Если мы напишем в программе число с7а3h, транслятор не поймет, что речь идет о числе, он будет считать, что это идентификатор какой-то переменной. Поэтому, если число начинается с буквы, перед этой буквой надо писать цифру 0!. В этом случае транслятор поймет, что речь идет о числе, а не о переменной. Итак, правильная запись нашего числа - 0c7a3h. Начинающие программисты часто забывают об этом правиле, в результате транслятор начинает выдавать сообщения об ошибках.

Соседние файлы в папке Лаба 2