Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
прогр.docx
Скачиваний:
23
Добавлен:
21.12.2018
Размер:
2.58 Mб
Скачать

1) Первой известной кодировкой символов была кодировка ascii, и она используется до сих пор. В ascii-кодировке каждый символ занимает 8 бит, или один байт.

2) Международная организация по стандартизации ISO (International Standards Organization) создала новый стандарт кодировки символов, названный Latin-1, который содержал европейские символы, не вошедшие в набор ASCII.

3) Microsoft расширила Latin-1 и назвала этот стандарт ANSI. ANSI 8-битная кодировка, которая может представлять только 256 уникальных символов.

4) Microsoft в сотрудничестве с Apple Computer, Inc., и IBM создала некоммерческий консорциум Unicode, целью которого стало определение нового стандарта на кодировку символов для международных наборов символов. Работа, проделанная в Unicode, была объединена с работой, которая велась в ISO, и их результатом работы стал стандарт Unicode для кодировки символов. Unicode является 16-разрядным стандартом, что обеспечивает 65 536 уникальных символов - более чем достаточно для представления всех языков мира.

5) Родной кодировкой для Windows XP является Unicode, но она поддерживает и ANSI. ОС представляет имена объектов, пути и имена файлов в виде 16-битных символов Unicode. Она также использует Unicode для хранения данных в реестре.

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

.data

Char1 db 'W'

Char2 db 'Й'

db "r"

Всё выше написанное тоже самое, что и:

.data

Char1 db 57h

Char2 db 0C9h

db 72h

Объявлять строки можно и следующим образом:

String db "ASM"

Тоже самое:

String db 'A'

Db "S"

Db "M"

Тоже самое:

String db 41h

Db 53h

Db 4Dh

Тоже самое:

String db 41h, 53h, 4Dh

Заполнение данными.

Если нужно описать много одинаковых переменных, например 30 переменных, то это можно сделать так:

db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 30 раз

Но можно это сделать с помощью директивы DUP.

db 30 DUP (0) ; тот же результат

17. Операнди мови асемблер. Оператор equ. Лічильник адреси, використання. Пріоритет операторів. Регістри ХММ-розширення з плаваючою комою, призначення

Операнды – это объекты (некоторые значения, регистры или ячейки памяти), на которые действуют инструкции или директивы, либо это объекты, которые определяют или уточняют действие инструкций или директив.

Классификация операндов:

1. Постоянные или непосредственные операнды – число, строка, имя или выражение, имеющие некоторое фиксированное значение. Имя не должно быть перемещаемым, то есть зависеть от адреса загрузки программы в память. Оно может быть определено операторами equ или =.

num equ 5

imd = num-2

mov al,num ; эквивалентно mov al,5: 5 здесь непосредственный операнд

add [si],imd ; imd=3 – непосредственный операнд

mov al,5 ; 5 – непосредственный операнд

2.Адресные операнды – задают физическое расположение операнда в памяти с помощью указания двух составляющих адреса: сегмента и смещения. К примеру:

mov ax,0000h

mov ds,ax

mov ax,ds:0000h ; записать слово в ах из области памяти по физическому адресу 0000:0000

2. Счётчик адреса. Обозначается знаком $. Когда транслятор ассемблера встречает в программе этот символ, то он подставляет вместо него текущее значение счётчика адреса.

0000 jmp $+3 ; безусловный переход на команду mov

0002 cld ; длина команды cld составляет 1 байт

0001 mov al,1

Команда jmp занимает 2 байта.

3. Регистровый операнд – это имя регистра. В программе можно использовать имена всех регистров общего назначения и большинства системных регистров. Пример:

mov al,4 ; константу 4 заносим в регистр al

mov dl, 8

add al,dl ; команда с регистровыми операндами

4. Базовый и индексный операнды. Тип операндов используется для реализации косвенной базовой, косвенной индексной адресации или их комбинаций и расширений.