Язык Ассемблера (1)

Содержание

Слайд 2

Язык Ассемблер

Является символическим аналогом машинного языка: программа отражает все особенности архитектуры процессора:

Язык Ассемблер Является символическим аналогом машинного языка: программа отражает все особенности архитектуры
организацию памяти, способы адресации операндов, правила использования регистров и т.д.
Программа на Ассемблере представляет собой совокупность блоков памяти, называемых сегментами памяти.
Программа состоит из предложений Ассемблера.

Слайд 3

Предложения Ассемблера

Команды (или инструкции) – символические аналоги машинных команд.
Макрокоманды – оформляемые определенным

Предложения Ассемблера Команды (или инструкции) – символические аналоги машинных команд. Макрокоманды –
образом предложения текста программы, замещаемые во время трансляции другими предложениями.
Директивы – указания транслятору на выполнение некоторых действий.
Строки комментариев – текст, игнорирующийся транслятором.

Слайд 4

Формат предложения

Формат предложения

Слайд 5

Формат директив

Формат директив

Слайд 6

Подготовка и запуск программ на Ассемблере

Разработка программа на «чистом» ассемблере
Использование ассемблерных вставок

Подготовка и запуск программ на Ассемблере Разработка программа на «чистом» ассемблере Использование ассемблерных вставок на ЯВУ
на ЯВУ

Слайд 7

Процесс разработки программ на Ассемблере

1. Ввод исходного текста программы

2. Создание объектного модуля

3.

Процесс разработки программ на Ассемблере 1. Ввод исходного текста программы 2. Создание
Создание загрузочного модуля

4. Отладка программы

Текстовый редактор

program.asm

Трансляция программы

program.obj

program.lst

Компоновка программы

program.exe

Отладка программы

Слайд 8

.686P
.MODEL FLAT, STDCALL
.STACK 4096
.DATA
MB_OK EQU 0
MSG_TITLE DB "Native ASM",0
MSG_TEXT

.686P .MODEL FLAT, STDCALL .STACK 4096 .DATA MB_OK EQU 0 MSG_TITLE DB
DB "Программа на чистом Ассемблере!",0
HW DD ?
EXTERN MessageBoxA@16:NEAR
.CODE
START:
PUSH MB_OK
PUSH OFFSET MSG_TITLE
PUSH OFFSET MSG_TEXT
PUSH HW
CALL MessageBoxA@16
RET
END START

Слайд 9

Visual Studio Developer Command Prompt

Visual Studio Developer Command Prompt

Слайд 10

ml.exe - Microsoft (R) Macro Assembler Version

ml /c prog1.asm

ml.exe - Microsoft (R) Macro Assembler Version ml /c prog1.asm

Слайд 11

Линковка программы

link /SUBSYSTEM:WINDOWS prog1.obj user32.lib

Линковка программы link /SUBSYSTEM:WINDOWS prog1.obj user32.lib

Слайд 12

Использование ассемблерных вставок (C++)

Inline Assembler | Microsoft Learn

asm-block:     __asm assembly-instruction ;opt     __asm { assembly-instruction-list } ;opt
assembly-instruction-list:     assembly-instruction ;opt     assembly-instruction ; assembly-instruction-list ;opt

Использование ассемблерных вставок (C++) Inline Assembler | Microsoft Learn asm-block: __asm assembly-instruction

Слайд 13

Пример ассемблерной вставки и операторов ввода/вывода

#include
using namespace std;
int main()
{
int n

Пример ассемблерной вставки и операторов ввода/вывода #include using namespace std; int main()
= 0;
short r = 0;
cout << "Input number:";
cin >> n;
_asm
{
xor ax, ax
mov ecx, n
mov bx, 0
mov ax, 1
startLoop:
mov r, ax
xchg ax, bx
add ax, bx
loop startLoop
mov r, ax
}
cout << "Result:" << r << endl;
system("pause");
return 0;
}

Слайд 14

Синтаксис языка Ассемблер

Предложения Ассемблера формируются из лексем.
Лексема - синтаксически неразделимая последовательность

Синтаксис языка Ассемблер Предложения Ассемблера формируются из лексем. Лексема - синтаксически неразделимая
допустимых символов языка, имеющие смысл для транслятора.
Лексемами являются:
Идентификаторы – последовательности допустимых символов, использующиеся для обозначения таких объектов программы, как коды операций, имена переменных и названия меток.
Цепочки символов – последовательности символов, заключенные в одинарные или двойные кавычки.
Целые числа в двоичной, десятичной или шестнадцатеричной системах счисления:

Слайд 15

Формат команд и макрокоманд

Имя метки – идентификатор, значением которого является адрес первого

Формат команд и макрокоманд Имя метки – идентификатор, значением которого является адрес
байта того предложения исходного текста программы, которое он обозначает.
Имя – идентификатор, отличающий данную директиву от других директив.
Код операции или директива – это мнемоническое обозначения соответствующей машинной команды, макрокоманды или директивы транслятора.
Операнды – части команды, макрокоманды или директивы ассемблера, обозначающие объекты, над которыми производятся действия.

Слайд 16

Синтаксис языка Ассемблер

Допустимыми символами при написании текста программ являются:
все латинские буквы;
цифры;
знаки: ?,

Синтаксис языка Ассемблер Допустимыми символами при написании текста программ являются: все латинские
@, $, _, &;
разделители: , . [ ] ( ) < > { } + / * % ! ‘ “ ? \ = # ^

Слайд 17

Запись числовых констант

10000011b – двоичная система счисления
129, 123d – десятичная система счисления
74q

Запись числовых констант 10000011b – двоичная система счисления 129, 123d – десятичная
– восьмеричная система счисления
2Ah – шестнадцатеричная система счисления (константа должна начинаться с цифры)

Слайд 18

Простые “типы данных”

Обозначения:
? – показывает, что значение не определено;
Значение инициализации – значение

Простые “типы данных” Обозначения: ? – показывает, что значение не определено; Значение
элемента данных, которое будет занесено после загрузки программы;
Выражение – итеративная конструкция;
Имя – некоторое символическое имя метки или ячейки данных.
Типы данных:
db – 1 байт
dw – 2 байта
dd – 4 байта
dq – 8 байт
df – 6 байт
dp – 6 байт
dt – 10 байт

Слайд 19

Команды пересылки данных общего назначения
mov <операнд назначения>,<операнд-источник>
xchg <операнд1>,<операнд2>

Команды пересылки данных общего назначения mov , xchg ,

Слайд 20

mov – основная команда пересылки данных

Схема команды: 
mov приемник, источник 
Назначение:
пересылка данных между

mov – основная команда пересылки данных Схема команды: mov приемник, источник Назначение:
регистрами или регистрами и памятью.
Алгоритм работы:
копирование второго операнда в первый операнд.
Состояние флагов после выполнения команды:
выполнение команды не влияет на флаги

Слайд 21

Инструкции сложения ADD и вычитания SUB

Команда ADD требует двух операндов, как и

Инструкции сложения ADD и вычитания SUB Команда ADD требует двух операндов, как
команда MOV:

Команда ADD складывает оба операнда и записывает результат в о1, предыдущее значение которого теряется.
Точно так же работает команда вычитания — SUB:

ADD о1, о2

Результат, o1-o2, будет сохранен в o1, исходное значение o1 будет потеряно.

SUB оl, o2

mov ax, 8 ; заносим в АХ число 8
mov сх, 6 ;заносим в СХ число 6
mov dx, сх ;копируем СХ в DX, DX = 6
add dx, ax ;DX = DX + АХ

Команда ADD сохранит результат DX + АХ в регистре DX, а исходные значения АХ и СХ останутся нетронутыми.

Слайд 22

Команды инкрементирования INC
и декрементирования DEC

Эти команды предназначены для инкрементирования и декрементирования.
Команда INC

Команды инкрементирования INC и декрементирования DEC Эти команды предназначены для инкрементирования и
добавляет, a DEC вычитает единицу из единственного операнда.
Допустимые типы операнда — такие же, как у команд ADD и SUB, а формат команд таков:
INC o1 ;o1 = o1 + 1
DEC o1 ;o1 = o1 - 1

Ни одна из этих инструкций не изменяет флаг CF.

add al,1 ;AL = AL + 1
inc al ;AL = AL + 1
Inc number ;number = number+1

Слайд 23

Команда MUL

Команда MUL может быть записана в трех различных форматах — в

Команда MUL Команда MUL может быть записана в трех различных форматах —
зависимости от операнда:

В 8-разрядной форме операнд может быть любым 8-битным регистром или адресом памяти. Второй операнд всегда хранится в AL. Результат (произведение) будет записан в регистр АХ.

MUL r/m8
MUL r/ml6
MUL r/m32

(r/m8) * AL -> АХ

В 16-разрядной форме операнд может быть любым 16-битным регистром или адресом памяти. Второй операнд всегда хранится в АХ. Результат сохраняется в паре DX:AX.

(r/ml6) * АХ -> DX:AX

В 32-разрядной форме второй операнд находится в регистре ЕАХ, а результат записывается в пару EDX:EAX.

(r/m32) * ЕАХ -> EDX:ЕАХ

Слайд 24

Команда MUL

Пример 1: умножить значения, сохраненные в регистрах ВН и CL, результат

Команда MUL Пример 1: умножить значения, сохраненные в регистрах ВН и CL,
сохранить в регистр АХ:
mov al, bh ;AL = ВН — сначала заносим в AL второй операнд
mul cl ;АХ = AL * CL — умножаем его на CL
Результат будет сохранен в регистре АХ.

Пример 2: вычислить 4862, результат сохранить в DX:AX:
mov ax, 486 ; АХ = 486
mul ах ; АХ * АХ -> DX:AX

Пример 3: вычислить диаметр по радиусу, сохраненному в 8-битной переменной radius, результат записать в 16-битную переменную diameter:
mov al, 2 ; AL = 2
mul radius ; AX = radius * 2
mov diameter,ax ; diameter <- AX