Автор работы: Пользователь скрыл имя, 11 Января 2011 в 19:34, лекция
Язык ассемблера - это один из самых старых из всех существующих языков программирования. Когда-то это был один из основных языков программирования, без знания которого нельзя было заставить компьютер сделать что-либо полезное. Появились более удобные средства общения с компьютером. Но в отличии от других языков ассемблер не умирал, более того он это не смог сделать в принципе.
Используя эти регистры, можно получить информацию о результатах выполнения команд программы и влиять на состояние самого МП. Регистр флагов - регистр разрядностью 32-16 бит..
31 | ... | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 12 | 11 | 10 | 09 | 08 | 07 | 06 | 05 | 04 | 03 | 02 | 01 | 00 |
0 | ... | ГО | VIP | VIF | АС | VM | RF | 0 | NT | IOPL | OF | SF | SF | SF | SF | ZF | 0 | AF | 0 | PF | 1 | CF |
Рассмотрим некоторые наиболее часто используемые в программах любого языка
программирования флаги.
Все флаги можно разделить на три группы:
№ | мнем оника флага | флаг | номер бита |
|
1. | cf | флаг переноса | 0 | 1-арифметическая операция произвела перенос из старшего бита результата. Старшим является 7-й, 15-й или 31-й бит в зависимости от размерности операнда. 0 - переноса нет |
2. | pf | флаг паритета | 2 | 1-8 младших разрядов результата содержат четное число единиц 0-8 младших разрядов результата содержат нечетное число единиц. |
3. | af | вспомогательный флаг переноса | 4 | Используется для команд, работающих с BCD-числами. Фиксирует факт заема из младшей тетрады результата. 1- в результате операции сложения был произведен перенос из разряда 3 в старший разряд или при вычитании был заем в разряд 3 младшей тетрады из значения в старшей тетраде. 2- 0 - переносов и заемов не было. |
4. | zf | флаг нуля | 6 | 1-результат нулевой 0- результат не нулевой |
5. | sf | флаг знака | 7 | Отражает состояние старшего бита результата (биты 7, 15 или 31 для 8-, 16- или 32-разрядных операндов, соответственно) 1-старший бит результата равен 1 0 - старший бит результата равен 0 |
6. | of | флаг
переполнения |
11 | флаг of используется
для фиксирования факта потери
значащего бита при арифметических операциях 1- в результате операции происходит перенос (заем) в (из) старшего, знакового бита результата (биты 7, 15 или 31 для 8-, 16- или 32-разрядных операндов, соответственно) 0-в результате операции не происходит переноса (заема) в (из) старшего, знакового бита результата. |
Указатель команд — это регистр eip/ip. В этом регистре всегда находится адрес команды, которая должна быть выполнена следующей. Более точно, в этом регистре находится адрес той команды, отсчитанный от начала сегмента команд, на начало которого указывает регистр CS. Поэтому абсолютный адрес этой команды определяется парой cs и ip. Менять содержимое данного регистра можно только командами перехода.
Структура программы на ассемблере.
Программист или любой другой пользователь может использовать любые высокоуровневые средства, вплоть до построения виртуальных миров, и возможно даже не подозревать, что на самом деле компьютер выполняет команды языка, на котором написана программа, а их трансформация представление в форме скучной и унылой последовательности совсем другого языка - машинного. Поэтому не случайно все языки имеют средства связи с языком ассемблера, т.к. решить аппаратные проблемы невозможно без знания языка. Поэтому решать проблемы связанные с аппаратурой невозможно без знания ассемблера.
о команды, или инструкции, представляющие собой символические аналоги машинных команд. В процессе трансляции инструкции ассемблера преобразуются в соответствующие команды МП о макрокоманды - оформляемые определенным образом предложения текста
программы, замещаемые во время трансляции другими предложениями. о директивы, являющиеся указанием транслятору ассемблера на выполнения некоторых действий. У директив нет аналогов в машинном представлении о строки комментариев, содержащие любые символы, в том числе и буквы русского алфавита.
Комментарии игнорируются транслятором. Рассмотрим формат команды ассемблера: [Метка:] Мнемокод [операнд] [;комментарий]
Обязательным здесь является только мнемокод. В зависимости от команды может не быть операндов, может быть один или два операнда.
Метка - служит для присвоения имени команде. На эту метку можно будет ссылаться из любой части программы. Она может содержать до 31 символа и заканчиваться двоеточием и содержать символы алфавита от a до Z. и от a до z, цифры от 0 до 9 и символы ?, ., @,, _, $. Метка не должна начинаться с цифры. Если используется «.», то она должна быть первым символом метки. Имя метки не должно совпадать с названием команд. В метку не должны вставляться пробелы.
Комментарии — должны быть отделены от команд ;. Это комментарии к команде, программе и блоку команд.
Мнемокод - это имя команды МП.
Поле операндов — в поле операндов может быть0, 1 или 2 операнда в зависимости от типа команды. Операнд - часть команды, макрокоманды или директивы ассемблера, обозначающие объекты, над которыми производятся действия. Операнды ассемблера описываются выражениями с числовыми и текстовыми константами, метками и идентификаторами переменных с использованием знаков операций и некоторых зарезервированных слов.
Если в команде 2 операнда, то первый операнд называется приемником, а второй источником.
Например:
MOV AX, CX ; содержимое регистра cx перемещается в ax
Для работы с данными их помещают в сегмент данных.
Описание сегмента данных осуществляется с помощью директивы DATA - начало сегмента данных данные .CODE
Классификация операндов.
1- Постоянные и непосредственные операнды- число, строка, имя или выражение, имеющие некоторое фиксированное значение.
MOV ax,5
2- Адресные операнды- задают физическое расположение операнда в памяти с помощью указания двух составляющих адреса: сегмента и смещения .
MOV AX,0000H
MOV DS,AX
MOV AX,DS:0000H ; адресный операнд
3- Перемещаемые операнды — любые символьные имена, представляющие некотрые адреса памяти.
.data
adb10
.code
lea si,a; a - перемещаемый операнд
4- Счетчик адреса — специфический вид операнда. Он обозначается $. Когда транслятор ассемблера встречает $ в исходной программе этот символ то подставляет вместо него текущее значение счетчика адреса. Значение счетчика адреса, или как его иногда называют счетчика размещения, представляет собой смещение текущей машинной команды относительно начала сегмента кода.
Jmp $+3 ; переход на mov
cld
mov al,1
Записи — используется для доступа к битовому полю некоторой записи.
Объявив данные нужно уметь обращаться к ним. Существует множество способов доступа к ним. Сами операнды могут находится в регистрах, в самих командах, в памяти или портах в/в Рассмотрим 7 основных режимов адресации
МП по
формату записи операнда определяет
тип адресации
|
|
|
Регистровый | регистр (кроме ip) | Не используется |
Непосредственный | данные | Не используется |
Прямой | сдвиг метка | DS DS |
Косвенный регистровый | [BX] [BP] [DI] [SI] | DS SS DS DS |
По базе | [BX]+сдвиг [BP]+ сдвиг | DS CS |
Прямой индексированием | [DI]+сдвиг [SI]+сдвиг | DS DS |
По базе с индексированием | [D[][SI]+сдвиг [BX][SI]+сдвиг [BP][SI]+сдвиг [BP][DI]+сдвиг | DS DS
SS SS |