- •Архитектура ЭВМ и язык ассемблера
- •Пример
- •Директивы определения данных
- •Типы операндов (команд)
- •Пересылки простые и неочевидные
- •Директива ASSUME-специфицирует
- •Построить листинг, запустить отладчик (debug , –t, -r, u)
- •Сложение и вычитание
- •Работа с данными и адресами: операторы и директивы
- •Адресация в Ассемблере
- •Адресация в Ассемблере
- •Адресация в Ассемблере
- •Адресация в Ассемблере
- •Адресация
- •Безусловный переход и цикл
- •TITLE Add and Subtract, Version 2 (AddSub2.asm)
- •Способы адресации Построить сегменты и создать exe файлы
- •Процесс создания программы
- •Учебная библиотека
- •Стек
- •Стек, использование.
- •TITLE Программа реверсирования строк
- •Определение процедур
- •Использование процедур
- •Директивы PROC и ENDP
- •Пример с процедурами
- •Пример с процедурами (продолжение)
Адресация в Ассемблере
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]
14
Безусловный переход и цикл
JMP метка_перехода
– безусловный переход
LOOP метка_перехода
–ECX/CX уменьшается на единицу
–если ECX/CX не ноль, то переход по метке
–иначе следующая команда
LOOPD всегда ECX
LOOPW всегда CX
15
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 |
16 |
Способы адресации Построить сегменты и создать exe файлы
Процесс создания программы
• Редактор |
Ввод предписаний |
Ваш исходный текст |
Изменения текста |
• Ассемблер |
Предписания трансляции |
|
Текстовые библиотеки |
Объектный код |
|
• Компоновщик |
Предписания компоновки |
Загрузочный код |
Статический код |
• Загрузчик |
Предписания загрузки |
link32 AddSub.obj irvine32.lib kernel32.lib |
|
Исполняемый код |
Решения ОС |
• ОС+аппаратура |
Предписания исполнения |
Результат |
Внешние события |
|
Внешние данные и код 18 |
Учебная библиотека
ClrScr |
ReadHex |
CrLf |
ReadInt |
Delay |
ReadString |
DumpMem |
SetTextColor |
DumpRegs |
WaitMsg |
GetCommandTail |
WriteBin |
GetMseconds |
WriteChar |
GotoXY |
WriteDec |
Random32 |
WriteHex |
RandomiZe |
WriteInt |
ReadChar |
WriteString |
19
Стек
•Понятие стека
–LIFO (Last-In, FIst-Out)
•Стековая адресация памяти
–SS ESP
–«рост» в сторону меньших адресов
•PUSH/POP r/m16|r/m32|imm32|imm16
•PUSHFD/POPFD – флаги 32 бита
•PUHSF/POPF - флаги 16 бит
•PUSHAD/POPAD – регистры по 32 бита
EAX,ECX,EBX,ESP,EBP,ESI,EDI
• PUHSA/POPA - регистры по 16 бит
AX, CX, BX, SP, BP, SI, DI
20
