Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Otvety2.docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
244.94 Кб
Скачать

16) Описание данных в ассемблер.

Практически любая программа содержит в себе перечень данных, с которыми она работает. Это могут быть символьные строки, предназначенные для вывода на экран; числа, определяющие ход выполнения программы или участвующие в вычислениях; адреса подпрограмм, обработчиков прерываний или просто тех или иных полей программы; специальные коды, например, коды цвета выводимых на экран символов и т.д. Кроме данных, определяемых в тексте программы, в программу часто входят зарезервированные поля, предназначенные для заполнения по ходу выполнения программы, например, результатами вычислений или путем чтения из файла. Все эти данные и зарезервированные поля должны быть определены в составе сегмента данных программы. Для определения данных используются, главным образом, три директивы ассемблера: db (define byte, определить байт) для записи байтов, dw (define word, определить слово) для записи слов и dd (define double, определить двойное слово) для записи двойных слов:

db 255 dw 6.5535 dd 100000000

Для того чтобы к данным можно было обращаться, они должны иметь имена. Имена данных могут включать латинские буквы, цифры и некоторые специальные знаки, например, знаки подчеркивания (_), доллара ($) и коммерческого at (@). Длину имени некоторые ассемблеры ограничивают (например, ассемблер MASM - 31 символом), другие - нет, но в любом случае слишком длинные имена затрудняют чтение программы. С другой стороны, имена данных следует выбирать таким образом, чтобы они отражали назначение конкретного данного, например, counter для счетчика или filename для имени файла:

Counter dw 10000 filename db "a:\myfile.001'

Значения числовых данных можно записывать в различных системах счисления; чаще других используются десятичная и 16-ричная запись:

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

Во втором случае в байте с именем setbit? будет записан двоичный эквивалент шестнадцатиричного числа 80h, который составляет 10000000 (т.е. байт с установленным битом 7, откуда и получила имя эта ячейка).

17) Команды пересылки данных общего назначения в ассемблере.

Команды пересылки данных осуществляют обмен данными или адресами между регистрами МП и ячейками памяти или портами ввода/вывода. Их можно разделить на следующие подгруппы:

1) команды пересылки общего назначения;

2) команды загрузки адресных значений;

3) команды обращения к стеку;

4) команды пересылки флагов;

5) команды ввода/вывода.

1) Команды пересылки общего назначения:

К этой подгруппе относятся команды MOV, XCHG и XLAT.

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

MOV приемник, источник и осуществляет пересылку байта или слова данных из источника в приемник. В качестве приемника и источника данных могут использоваться регистры МП или ячейки памяти. Кроме того, источник может быть и непосредственным значением.

В команде MOV допустимо большинство из возможных сочетаний операндов.

Пример 3.43:

MOV AX, Table; Пересылка из памяти в регистр

MOV Table, AX; и наоборот

MOV ES:[BX],DX ; Пересылка из регистра в память

MOV DS,AX; Пересылка между 16-битными

MOV BL,A ; или 8-битными регистрами

MOV CL,30; Пересылка константы в регистр

MOV [BX+SI],25h; или в память

2) Команда обмена XCHG имеет формат: Xchg приемник, источник

и осуществляет обмен байтами или словами данных между источником и приемником. В качестве источника и приемника данных могут использоваться регистры МП, либо регистр и ячейка памяти.

Пример 3.47:

XCHG AX,BX ; Обмен между 16-битными

XCHG AL,DH ; или 8-битными регистрами

XCHG Alpha,DX ; Обмен между ячейкой

XCHG AL,Beta ; памяти и регистром

Ни один из операндов команды XCHG не может быть сегментным регистром

3) Команда табличного преобразования XLAT записывается в формате:

XLAT или XLAT таблица-источник

и выполняет преобразование кода из AL в соответствии с выражением (AL)=((BX)+(AL)).

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

Команда XLAT удобна для выполнения преобразований при отсутствии алгоритмической связи между преобразуемыми кодами.

Пример 3.48:

Выполнить быстрое возведение в квадрат числа из ячейки памяти, лежащего в диапазоне 05.

TablConv DB 0,1,4,9,16,25 ;Описание таблицы преобразования

. . . . . . . . . .

MOV AL,X ;Чтение операнда

MOV BX,OFFSET TablConv ;Загрузка адреса таблицы

XLAT TablConv ;Преобразование

MOV Y,AL ;Запись результата

Указание в команде XLAT имени таблицы-источника необязательно, но предпочтительно, так как позволяет ассемблеру при трансляции программы проверить наличие таблицы и ее корректность.

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