Введение в программирование на языке ассемблера. Формат инструкции на языке ассемблера Директива Команда Макрокоманда МеткаОперандыКомментарий.

Презентация:



Advertisements
Похожие презентации
Директивы сегментации. Упрощенные директивы сегментации. Лекция доцента кафедры ИВТ ГрГУ кандидата технических наук Ливак Е.Н.
Advertisements

Программирование на Ассемблер к.т.н., доц. Красов А.В. Лекция 2 ФакультетМТС Курс3 Семестр6 Форма контролязачет Лекции14 часов Лабораторные работы12 часов.
Определение констант для размещения их компилятором в составе инструкций языка Определение числовых констант: имя = значение PI= V_size = 5 M_size.
Intel архитектура IA16 Основа большинства современных компьютеров.
Архитектура ЭВМ Практика 3. Линейные программы на языке ассемблера.
1 Подсистема прерываний Схема подсистемы прерываний.
Язык ASSEMBLER Команды пересылки данных Лекция доцента кафедры ИВТ ГрГУ кандидата технических наук Ливак Е.Н.
Программирование на Ассемблер к.т.н., доц. Красов А.В. Лекция 7 ФакультетМТС Курс3 Семестр6 Форма контролязачет Лекции14 часов Лабораторные работы12 часов.
EXE-вирусы для MS DOS Неверов А.В.. Форматы EXE-файлов Формат файлаОперационная система MZMS DOS NE (New Exe)Windows 3.x PE (Portable Executible) Windows.
Уровни организации ЭВМ. Машинный уровень Лекция 5.
Система прерываний в защищенном режиме процессора Intel.
Архитектура ЭВМ Практика 2. Основы ассемблера..
Организация циклов в Ассемблере. Цикл – это многократно повторяющаяся последовательность операторов.
Программирование на Ассемблер к.т.н., доц. Красов А.В. Лекция 3 ФакультетМТС Курс3 Семестр6 Форма контролязачет Лекции14 часов Лабораторные работы12 часов.
Программирование на Ассемблер к.т.н., доц. Красов А.В. Лекция 6 ФакультетМТС Курс3 Семестр6 Форма контролязачет Лекции14 часов Лабораторные работы12 часов.
Многомодульные программы Процедуры: организация вызова и возврата. Много файловые программы. Передача аргументов и возврат результатов. Обработка прерываний.
Адресация Адресация Уточним понятие "адресация". Адресация (по Э. Таненбауму) – процесс определения местоположения операндов команды МП (их адреса). Адрес.
Циклы в языке Ассемблер.. Цикл со счетчиком Цикл со счетчиком можно организовать с помощью конструкций IF и GOTO. В нашем примере тело цикла должно повторяться.
Инструкции C++ Условная инструкция Формат: if (условие) оператор; else оператор; Пример: if (i!=0) { if (j) j++; if(k) k++; else if(p) k--; } else i--;
Микропроцессорные системы Программы и инструменты Это описание предполагает, что транслятор wavrasm правильно установлен на компьютер, на котором происходит.
Транксрипт:

Введение в программирование на языке ассемблера

Формат инструкции на языке ассемблера Директива Команда Макрокоманда Метка ОперандыКомментарий

Директивы – команды управления работой транслятора Управление листингом PAGE К_стр К_симс 9 < К_стр=66 < < К_симс=80 < 133 Переход к новой странице PAGE Заголовок TITLE текст Подзаголовок SUBTTL текст

Три модели организации адресного пространства

Директива описания сегмента ИмяSEGMENT[ 1 ] [ 2 ] [ 3 ] [ 4 ] ИмяENDS Здесь[ 1 ] - тип выравнивания [ 2 ] - тип объединения [ 3 ] - класс [ 4 ] - размер адреса (для i386 и выше) Имя – константа, содержащая номер параграфа начала сегмента

Тип выравнивания BYTEx 1 WORDx 2 DWORDx 4 PARAx 16 PAGEx 256 MEMPAGEx 1024 Тип объединения PRIVATE PUBLIC (MEMORY) COMMON STACK AT **** Размер адреса USE16 USE32 Класс имя_класса данные команды ****0 ****i cs: **** ip:0000 cs: **** ip:000i

Обозначения SR – сегментный регистр r8, r16, r32 – регистр общего назначения m8, m16,m32 – адрес области памяти i8,i16,i32 – непосредственное значение (константа)

Директива указания содержимого сегментных регистров ASSUME SR:имя [,sr:имя]… Имя – имя сегмента или NOTHING Директива «Конец модуля» END [точка входа в программу]

Директива описания процедуры ИмяPROC[FAR] Тело_процедуры ИмяENDP Far – для входа в процедуру используется полный адрес (адресная пара CS:IP) Иначе – только смещение (IP)

Директивы описания данных DB DW DDИнициализатор ИмяDF, DQ DT

Пример Data segment Adb? Bdbabcd,4 dup(*) Cdw-1,0,1 DdwC EddD Fdb0fh,15,17q,1111b Gdd-1.5 Hdqhgfedcba Dataends ;abcd**** ;Offset C ;Seg D:Offset D ;4 dup(15) ;abcdefgh

Инструкция MOV I8,16,32 R8,16,32 M8,16,32 Sr MOVI8,16,32 M8,16,32R8,16,32 Sr R16 Sr M16

N.B. Mov ax,0ffh 00ff ax: Mov m16,ax ff00 k k+1 k+2 ahal

Инструкция генерации программного прерывания int Вызов функции BIOS Int10h Номер функции задается в регистре ah 02h – установить курсор dh – строка, dl – колонка 03h – получить позицию курсора на bh странице dh – строка, dl - колонка Вызов функции DOS Int21h 01h – ввод симсола в al 02h – вывод симсола из dl 09h – вывод строки, до $ адрес в dx 4ch – завершение программы с кодом ошибки al

Пример title Первый файл subttl Основная программа и сегмент данных Stksegsegmentstack db256 dup(?) Stksegends Dtsegsegmentpublic xdb"abcdef" Dtsegends

Cdseg segment assumecs:cdseg,ds:dtseg,ss:stkseg,es:nothing mainprocfar movax,dtseg; инициализация сегментного movds,ax; регистра данных movah,9; функция DOS вывод строки movdx,offset x; адрес строки int21h movah,2; функция DOS вывод симсола movdl,2ah; код симсола * int21h movah,4ch; функция завершения задачи moval,0; код ошибки int21h mainendp Cdseg ends endmain

title Второй файл subttl Еще один сегмент данных Dtsegsegmentbyte public ydb'$' Dtsegends end Результат:abcdef*

title Второй файл subttl Еще один сегмент данных Dtsegsegmentpublic ydb'$' Dtsegends end Результат:abcdef *

Turbo Assembler Version /02/04 14:26:27 Page 1 tst.asm Первый файл Основная программа и сегмент данных stkseg segment stack *(??) db 256 dup(?) stkseg ends dtseg segment public x db "abcdef" dtseg ends cdseg segment 10 assume cs:cdseg,ds:dtseg,ss:stkseg,es:nothing main proc far B8 0000s mov ax,dtseg E D8 mov ds,ax B4 09 mov ah, BA 0000r mov dx,offset x 17000A CD 21 int 21h 18000C B4 02 mov ah, E B2 2A mov dl,2ah CD 21 int 21h B4 4C mov ah,4ch B0 00 mov al,0 ; код ошибки CD 21 int 21h main endp cdseg ends end main

Turbo Assembler Version /02/04 14:26:27 Page 2 Symbol Table Первый файл Symbol Name Type Value ??DATE Text "22/02/04" ??FILENAME Text "tst " ??TIME Text "14:26:27" ??VERSION Number Text Text Text Text 2 MAIN Far CDSEG:0000 X Byte DTSEG:0000 Groups & Segments Bit Size Align Combine Class CDSEG Para none DTSEG Para Public STKSEG Para Stack

Turbo Assembler Version /02/04 14:26:27 Page 1 tst1. asm Второй файл Еще один сегмент данных dtseg segment bytepublic y db '$' dtseg ends 4 5 end Turbo Assembler Version /02/04 14:26:27 Page 2 Symbol Table Второй файл Symbol Name Type Value ??DATE Text "22/02/04" ??FILENAME Text "tst1 " ??TIME Text "14:26:27" ??VERSION Number Text Text Text Text 2 Y Byte DTSEG:0000 Groups & Segments Bit Size Align Combine Class DTSEG Byte Public

Start Stop Length Name Class 00000H 000FFH 00100H STKSEG 00100H 00106H 00007H DTSEG 00110H 00127H 00018H CDSEG Program entry point at 0011:0000 Распределение памяти (.mem)

Использование оператора mov #include int mema; void main() { _asm mov mema,5;/*то же, что и mema=5; */ cout << mema= << mema << endl; } Результат: mema=5

Использование стека Используется для: Хранения адреса возврата из вызванной программы Передачи параметров между программами Временного хранения данных Единица данных – слово Регистры, связанные со стеком: ss, sp, bp … k k+2 k+4 k+6 k+n-4 k+n-2 k+n SS[k] SP[n] PUSH1 PUSH2 POPbx POPax NOP

Использование стека Используется для: Хранения адреса возврата из вызванной программы Передачи параметров между программами Временного хранения данных Единица данных – слово Регистры, связанные со стеком: ss, sp, bp … k k+2 k+4 k+6 k+n-4 k+n-2 k+n 1 SS[k]SP[n-2] PUSH1 PUSH2 POPbx POPax NOP

Использование стека Используется для: Хранения адреса возврата из вызванной программы Передачи параметров между программами Временного хранения данных Единица данных – слово Регистры, связанные со стеком: ss, sp, bp … k k+2 k+4 k+6 k+n-4 k+n-2 k+n 21 SS[k] SP[n-4] PUSH1 PUSH2 POPbx POPax NOP

Использование стека Используется для: Хранения адреса возврата из вызванной программы Передачи параметров между программами Временного хранения данных Единица данных – слово Регистры, связанные со стеком: ss, sp, bp … k k+2 k+4 k+6 k+n-4 k+n-2 k+n 1 SS[k]SP[n-2] PUSH1 PUSH2 POPbx; =2 POPax NOP

Использование стека Используется для: Хранения адреса возврата из вызванной программы Передачи параметров между программами Временного хранения данных Единица данных – слово Регистры, связанные со стеком: ss, sp, bp … k k+2 k+4 k+6 k+n-4 k+n-2 k+n SS[k] SP[n] PUSH1 PUSH2 POPbx; =2 POPax; =1 NOP

Команды работы со стеком SS[k] SP[n] PUSHA

Команды работы со стеком disibpspbxdxcxax SS[k] SP[n-16] PUSHA POPA

Команды работы со стеком SS[k] SP[n] PUSHA POPA PUSHF

Команды работы со стеком Flags SS[k] SP[n-2] PUSHA POPA PUSHF POPF

Команды работы со стеком SS[k] SP[n] PUSHA POPA PUSHF POPF PUSHAD POPAD