- •Программы и программное обеспечение
- •5) Программирование на ассемблере.
- •10) Элементарные конструкции языка ассемблера:
- •11) Элементарные конструкции языка ассемблера:
- •16) Описание данных в ассемблер.
- •17) Команды пересылки данных общего назначения в ассемблере.
- •18) Команды загрузки адресных значений.
- •19) Команды ввода-вывода
- •21) Сложение двоичных чисел со знаком
- •22) Умножение двоичных чисел без знака
- •23) Деление двоичных чисел без знака
- •27) Логические команды языка ассемблер. Синтаксис. Примеры.
- •33) Кросс-система
- •34) Средства и виды отладки в ассемблер и кросс-системах
- •35) Отладка с помощью программы – интерпретатор
- •4. Модель времени
- •5. Модель системы прерываний
- •6. Модель системы ввода/вывода
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:
Выполнить быстрое возведение в квадрат числа из ячейки памяти, лежащего в диапазоне 05.
TablConv DB 0,1,4,9,16,25 ;Описание таблицы преобразования
. . . . . . . . . .
MOV AL,X ;Чтение операнда
MOV BX,OFFSET TablConv ;Загрузка адреса таблицы
XLAT TablConv ;Преобразование
MOV Y,AL ;Запись результата
Указание в команде XLAT имени таблицы-источника необязательно, но предпочтительно, так как позволяет ассемблеру при трансляции программы проверить наличие таблицы и ее корректность.
