Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Синтаксис ассемблера intel

.pdf
Скачиваний:
278
Добавлен:
03.06.2015
Размер:
263.13 Кб
Скачать

Процессор.

Что такое процессор? Процессор - это «мозг» компьютера. Процессором называется устройство, способное превращать входную информацию (входное слово) в выходную (выходное слово) согласно алгоритму, записанному в программном коде.

Конструктивно процессоры могут выполниться как в виде одной большой монокристальной интегральной микросхемы — чипа, так и в виде нескольких микросхем, блоков электронных плат и устройств.

Персональный компьютер содержит в своем составе довольно много различных процессоров.

Однако архитектуру и конструктивное исполнение персонального компьютера определяет процессор или процессоры, контролирующие и обслуживающие системную шину, и оперативную память, а также, что более важно, выполняющие объектный код программ. Такие процессоры принято называть центральными или главными процессорами (Central Point Unit — CPU). На основе архитектуры центральных процессоров строится архитектура материнских плат и проектируется архитектура и конструкция компьютера.

Язык процессора.

Родной язык процессора – машинные команды. Способ представления программы "понятный" процессору ЭВМ называется языком машинных команд. Машинная команда должна содержать в себе ответы на следующие вопросы:

какую операцию выполнить?

где находятся операнды?

куда поместить результат операции?

Операндами называют данные, с которыми производится операция. В арифметических операциях это слагаемые, сомножители, уменьшаемое и вычитаемое, делимое и делитель.

Машинная команда – это описание элементарной операции, которую должен выполнить компьютер. Команды хранятся в ячейках памяти в двоичном коде.

Каждая модель процессора, в принципе, имеет свой набор команд и соответствующий ему язык (или диалект) ассемблера.

Assembler — язык программирования.

Assembler — язык программирования низкого уровня, представляющий собой формат записи машинных команд, удобный для восприятия человеком.

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

Достоинства языка ассемблера:

Максимально оптимальное использование средств процессора, использование меньшего количества команд и обращений в память, и как следствие — большая скорость и меньший размер программы. Максимальная «подгонка» для нужной платформы.

Недостатки:

Большие объемы текста кода, большое число дополнительных мелких задач. Трудоёмкость чтения и поиска ошибок (хотя здесь многое зависит от комментариев и стиля программирования).

Синтаксис ассемблера intel.

Общепринятого стандарта для синтаксиса языков ассемблера не существует. Однако, существуют стандарты де-факто — традиционные подходы, которых придерживаются большинство разработчиков языков ассемблера. Основными такими стандартами являются Intel-синтаксис и AT&T-синтаксис. Общий формат записи инструкций (команд) одинаков для обоих стандартов.

Intel-синтаксис — один из форматов записи мнемоники инструкций процессора, который используется в документации Intel в ассемблерах для MS-DOS и Windows (MASM, TASM, встроенный ассемблер Visual Studio, и т.д.).

Особенности Intel-синтаксиса:

1. В команде приёмник находится слева от источника (например: mov eax,ebx, где mov-это команда, а eax и ebx операнды этой команды, один из них eax-приемник, ebx-источник).

2. Название регистров зарезервировано (нельзя использовать метки с именами eax, ebx и т. д.) Например, код mov eax, ebx пересылает в регистр eax значение, содержащееся в ebx, что функционально эквивалентно следующему коду:

push ebx ; положить в стек значение ebx

pop eax ; записать значение из стека в eax

Каждая инструкция записывается в отдельной строке. [метка:] мнемокод [операнды] [;комментарий]

Мнемокод (или опкод –операции код), непосредственно мнемоника инструкции процессора. К ней могут быть добавлены префиксы (повторения, изменения типа адресации и пр.). В качестве операндов могут выступать константы, названия регистров, адреса в оперативной памяти и пр..

Мнемоника - (совокупность специальных приёмов и способов, облегчающих запоминание нужной информации, в данном случае двоичный код инструкции заменяется символьным обозначением, например двоичный код инструкции сложения значений находящихся в регистрах eax и ebx - 0000000111011000 (01D8 в шестнадцатеричном виде), а мнемокод - add eax,ebx).

Полный формат каждой строки инструкций следующий: label: code ; comment

где label - название метки; code - собственно, инструкция языка ассемблера; comment - комментарий,

например: summa: add eax,ebx ; сумма значений регистров (summa –метка; add eax,ebx -

инструкция; сумма значений регистров - комментарий).

При этом один или два компонента строки могут отсутствовать, то есть строка может состоять, к примеру, только из комментария, или содержать только метку или инструкцию.

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

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

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

jmp — продолжать выполнение с нового адреса памяти (от англ. jump - прыжок) mov — переместить данные (от англ. move - передвинуть)

sub — получить разность двух значений (от англ. subtract - вычесть)

xchg — обменять значения в регистрах/ячейках памяти (от англ. exchange - обмен)

Текст программ может быть дополнен директивами ассемблера (параметры, влияющие на процесс

ассемблирования и свойства выходного файла).

Для упрощения и ускорения написания программ на языке ассемблера служат макросы.

Допустимыми символами при написании текста программ являются:

1.все латинские буквы: A—Z, a—z. При этом заглавные и строчные буквы считаются эквивалентными;

2.цифры от 0 до 9;

3.знаки ?, @, $, _, &;

4.разделители , . [ ] ( ) < > { } + / * % ! ' " ? \ = # ^.

Лексемы.

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

Лексемами являются:

-идентификаторы — последовательности допустимых символов, использующиеся для обозначения таких объектов программы, как коды операций, имена переменных и названия меток. Правило записи идентификаторов заключается в следующем: идентификатор может состоять из одного или нескольких символов. В качестве символов можно использовать буквы латинского алфавита, цифры и некоторые специальные знаки — _, ?, $, @. Идентификатор не может начинаться символом цифры. Длина идентификатора может быть до 255 символов, хотя транслятор воспринимает лишь первые 32, а остальные игнорирует.

-цепочки символов — последовательности символов, заключенные в одинарные или двойные кавычки;

-целые числа в одной из следующих систем счисления: двоичной, десятичной, шестнадцатеричной.

Отождествление чисел при записи их в программах на ассемблере производится по

определенным правилам:

Десятичные числа не требуют для своего отождествления указания каких-либо дополнительных символов, например 25 или 139.

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

Шестнадцатеричные числа состоят из цифр 0...9, строчных и прописных букв латинского алфавита a, b, c, d, e, f или A, B, C, D, E, F, Если шестнадцатеричное число начинается с буквы, то перед ним записывается ведущий ноль, а в конце числа латинское ‘h’, например: 0ef15h.

Операнды.

Практически каждое предложение (т.е. инструкция представляющая строку кода программы) содержит описание объекта, над которым или при помощи которого выполняется некоторое действие. Эти объекты называются операндами. В качестве операндов могут выступать числа, регистры, ячейки памяти, символьные идентификаторы.

Операторы ассемблера и синтаксические правила формирования выражений ассемблера.

Возможные типы операторов ассемблера:

Арифметические операторы o унарные “+” и ”;

o бинарные “+” и “”; o умножения “*”;

o целочисленного деления “/”;

oполучения остатка от деления “mod”.

Операторы сдвига

Операторы сравнения

Логические операторы

Индексный оператор

Оператор переопределения типа

Оператор именования типа структуры

Оператор получения смещения выражения

Директивы.

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

Команды Ассемблера.

aaa , aad , aam, aas , adc, add, and, bound, bsf, bsr, bswap, bt, btc, btr, bts, call, cbw, cwde, clc, cld, cli, cmc, cmp, cmps/cmpsb/cmpsw/cmpsd, cmpxchg, cwd, cdq, daa, das, dec, div, enter, hlt, idiv, imul, in, inc, ins/insb/insw/insd, int, into, iret/iretd, jcc, jcxz, jecxz, jmp, lahf, lds, les, lfs, lgs, lss, lea, leave, lgdt, lidt, lods/lodsb/lodsw/lodsd, loop loope, loopz, loopne, loopnz, mov, movs/movsb/movsw/movsd, movsx, movzx, mul, neg, nop, not, or, out, outs, pop, popa, popad, popf, popfd, push, pusha, pushad, pushf, pushfd, rcl, rcr, rep/repe/repz/repne/repnz, ret/retf, rol, ror, sahf, sal, sar, sbb, scas/scasb/scasw/scasd, setcc, sgdt, sidt, shl, shld, shr, shrd, stc, std, sti, stos/stosb/stosw/stosd, sub, test, xadd, xchg, xlat/xlatb , xor…

Типы данных.

Байт, слово (2 байта), двойное слово (4 байта), учетверенное слово (8 байт).

Директивы резервирования и инициализации данных: db, dw, dd, dq, dt.

Подготовка программы на MASM32. Упражнение 1

1.Запустите программу MASM32.

2.Напечатайте в окне текст вашей программы

3.Сохраните текст программы с именем additive_reg.asm

4.Ассемблируйте программу через меню Projekt-Console link OBJ File нажмите Enter

5.Линкуйте программу через меню Projekt-Assemble & Link нажмите Enter

6.Запустите программу через меню Projekt-Run Program нажмите Enter

7.Если выводятся сообщения об ошибках исправляйте, сохраняйте исправленный файл

через меню File Save и повторяйте с шага 4

TITLE Шаблон программ на MASM32 ;заголовок - необязательная строка

;Программа выводит консольное окно - это комментарий к программе, вводится после знака ';' comment * длинный ккомментарий, им можно закомментировать

всю или часть программы *

.386

; 32-битный режим, можно 486, 586, 686

;.model flat, stdcall

; модель памяти сплошная с вызовом функций API

option casemap :none

; не различение прописных и строчных символов

; подключение библиотек, необходимых для программы include с:\masm32\include\masm32rt.inc

; раздел, где объявляются все константы

.const

;раздел, где объявляются переменные, уже имеющие какое-то значение

.data

; раздел, где объявляются переменные, еще не имеющие значения

.data?

; раздел кода программы

.code

start:

; с этого слова (метки) начинается код программы

invoke ExitProcess,0

end start

; с этого слова заканчивается код программы

;Пример с использованием Debug Window MASM32

Упражнение 2. Арифметические команды

.386

;.model flat, stdcall option casemap :none

include <\masm32\include\masm32rt.inc> include <\masm32\include\debug.inc> includelib <\masm32\lib\debug.lib>

.data

.code

start:

;сообщение в консоли ассемблирования:

;текстовое сообщение и разделительная черта:

PrintText "Арифметические операци на языке ассемблер"

PrintLine

mov eax, 123 ;помещаем в регистр EAX десятичное чмсло 123 mov ebx, 321 ; в EBX 321

PrintDec eax,"Начальное значение" ;выводим значение регистра EAX add eax,ebx ;складываем EAX=EAX+EBX

PrintDec eax,"Сумма EAX=EAX+EBX" ;выводим значение регистра EAX PrintDec ebx, "Начальное значение" ;выводим значение регистра EBX

invoke crt_exit

end start

Упражнение 3.

1)Поместите в EAX двоичное число 101b, в EBX 111b. Посмотрите результат.

2)В EAX 123h, в EBX 987h. Посмотрите результат.

3)В EAX 123d, в EBX 321d. Посмотрите результат

4)В EAX 123o, в EBX 754o. Посмотрите результат

Упражнение 4.

Выполните операции sub eax,ebx; mul ebx; div ebx