- •Архитектура ЭВМ и язык ассемблера
- •Пример
- •Директивы определения данных
- •Типы операндов (команд)
- •Пересылки простые и неочевидные
- •Директива ASSUME-специфицирует
- •Построить листинг, запустить отладчик (debug , –t, -r, u)
- •Директива ORG
- •Директива EVEN
- •Сложение и вычитание
- •Работа с данными и адресами: операторы и директивы
- •Адресация в Ассемблере
- •Адресация в Ассемблере
- •Адресация в Ассемблере
- •Адресация в Ассемблере
- •Адресация
- •Безусловный переход и цикл
- •TITLE Add and Subtract, Version 2 (AddSub2.asm)
- •Способы адресации Построить сегменты и создать exe файлы
- •Процесс создания программы
- •Учебная библиотека
- •Стек
- •Стек, использование.
- •TITLE Программа реверсирования строк
- •Определение процедур
- •Использование процедур
- •Директивы PROC и ENDP
- •Пример с процедурами
- •Пример с процедурами (продолжение)
- •Директивы MACRO,ENDM
- ••Синтаксис макроопределения
Работа с данными и адресами: операторы и директивы
•OFFSET – вычислить смещение от начала сегмента в адресном выражении
•ALIGN – установить начало очередных данных на границу указанного размера
•PTR – установить размер указываемых данных
•TYPE, LENGTHOF, SIZEOF – вычислить размер данных
•LABEL – задать имя и тип адреса, без выделения памяти,
11
Адресация в Ассемблере
1. Регистровая адресация - операнды располагаются в любых регистрах общего назначения или сегментных регистрах
mov bx, ax
mov es, ax
2. Непосредственная адресация mov ax, 2
add ax, 2
3. Прямая адресация - если известен адрес операнда располагающегося в памяти
mov ax,es:0001 mov ax, es:word_var
В последнем случае ассемблер сам заменит слово word_var на соответствующий адрес
Адресация в Ассемблере
4. Косвенная адресация - адрес операнда в памяти можно не указывать непосредственно, а хранить в любом регистре
mov ax, [bx]
5. Адресация по базе со сдвигом - комбинация двух предыдущих методов адресации
mov ax, [bx+2] mov ax, [bp]+2
Адресация в Ассемблере
6. Косвенная адресация с масштабированием
mov ax,[esi*2]+2 - этот метод адресации полностью идентичен предыдущему, за исключением того, что с его помощью можно прочитать элемент массива слов, двойных слов или учетверенных слов, просто поместив номер элемента в регистр множитель, может быть равен 1, 2, 4 или 8 - соответствует
размеру элемента массива — байту, слову, двойному слову, учетверенному слову соответственно
Адресация в Ассемблере
7.Адресация по базе с индексированием - в этом методе адресации смещение операнда в памяти вычисляется как сумма чисел, содержащихся в двух регистрах, и смещения, если оно указано Все следующие команды — это разные формы записи одного и того же действия:
mov ax,[bx+si+2] mov ax,[bx][si]+2 mov ax,[bx+2][si] mov ax,[bx][si+2] mov ax,2[bx][si]
8.Адресация по базе с индексированием и масштабированием - это самая полная возможная схема адресации, в которую входят все случаи, рассмотренные ранее, как частные
mov eax, ds:[eax+ebx*2+2]
Адресация
• Прямая (адрес задан непосредственно)
MOV al,var1
MOV al,[var1]
MOV al,[arrayB+1] MOV al,[arrayD+4]
• Косвенная
MOV al,[esi]
INC BYTE PTR [esi]
16
Безусловный переход и цикл
JMP метка_перехода
– безусловный переход
LOOP метка_перехода
–ECX/CX уменьшается на единицу
–если ECX/CX не ноль, то переход по метке
–иначе следующая команда
LOOPD всегда ECX
LOOPW всегда CX
17
TITLE Add and Subtract, Version 2 (AddSub2.asm)
;Сложение и вычитание 32-битных целых переменных
;результат – в переменной.
INCLUDE Irvine32.inc
.data |
|
|
|
|
val1 |
dword |
10000h |
Ещё пример |
|
val2 |
dword |
40000h |
||
|
||||
val3 |
dword |
20000h |
|
|
finalVal dword |
? |
|
||
.code main PROC
mov eax,val1 |
; |
Загрузить 10000h |
||
add eax,val2 |
; |
добавить |
40000h |
|
sub |
eax,val3 |
; |
вычесть 20000h |
|
mov |
finalVal,eax |
; |
записать |
результат (30000h) |
call DumpRegs |
; |
отобразить регистры |
||
exit |
|
main ENDP |
|
END main |
18 |
Способы адресации Построить сегменты и создать exe файлы
Процесс создания программы
• Редактор |
Ввод предписаний |
Ваш исходный текст |
Изменения текста |
• Ассемблер |
Предписания трансляции |
|
Текстовые библиотеки |
Объектный код |
|
• Компоновщик |
Предписания компоновки |
Загрузочный код |
Статический код |
• Загрузчик |
Предписания загрузки |
link32 AddSub.obj irvine32.lib kernel32.lib |
|
Исполняемый код |
Решения ОС |
• ОС+аппаратура |
Предписания исполнения |
Результат |
Внешние события |
|
Внешние данные и код 20 |
