- •1)Архитектура пк.
- •1) Регистры общего назначения
- •2) Сегментные регистры
- •Ip(для кода); bx,si,di(для сегмента данных);bp,sp(для стека).Значения предыдущих кроме ip можно изменять, имея ввиду что память имеет кольцевую организацию.
- •4. Структура программы на asm
- •7) Организация прерываний.
- •1)Внешние;
- •2)Внутренние.
- •1) На вход intr - поступ. Запрос прерывание;
- •2) Послед. Действия определ. Допустимой ситуацией:
- •3) Микропроц. Выраб. 2 сигнала подтверждения intx.
- •4) По шине адресов/данных в микропроц. Передается байт с номером n прерываний.
- •5) Текущее содерж. Регистра признаков и регистра cs и ip загруж. В стек.
- •6) Признаки I,t сбрасываются в 0.
- •7)В cs:ip загруж. Содержимое вектора n.
- •8) Выполн. Программа обработки прерывания.
- •9) В конце обработки прерыв. Команда iret восстан. Знач. Регистра ip,es и fl.
- •10)Прерванная программа продолж. Свое выполнение.
- •2) Структура памяти и методы адресации.
- •Прямая адресация, при которой смещение данного размером 16 бит явл. Частью команды: mov ax,my_label
- •Регистровая адресация – операнд нах-ся в одном из регистров общего назначения или в одном из сегментных регистров, имя регистра определяется в самой команде ---- mov ax,bx
- •Неявная адресация – адреса объектов задаются неявно кодом операций.
- •Внутрисегментный косвенный переход - содержимое регистра ip заменяется 16 битовым значением заданного регистра или адресации данных кроме непосредственных. --- jmp [bx]
- •Межсегментный прямой переход – сод-мое регистра в ip и cs зам-ся 2 словами расп-ся непосредственно в команде ---- jmp far ptr far label
- •Межсегментный косвенный переход – при этом сод-мое регистров ip,cs зам-ся 2 словами последовательно расп. В памяти (ip по младшему алресу). --- jmp dword ptr[bx]
- •8. Объявление и инициализация данных
- •3) Организация стека.
- •1)Несмотря на то что знач. Sp можно изменять, этого делать не следует,
- •2) Необходимо обращ. Внимание для выделения памяти для стека.
- •Int 21h ; функция dos "завершить программу";
- •12) Логические и сдвиговые операции.
- •13) Организация циклов, условных и безусловных переходов
- •16) Префиксы повторения.
- •17) Подпрограммы. Передача параметров. Ближние и дальние процедуры.
- •18) Повторяющиеся блоки и макросы. Локальные метки.
- •22) Стандартные директивы определения сегментов.
- •30) Ввод информации с клавиатуры.
- •34) Использование встроенного Asm.
- •35) Вызов Asm процедур из с.
- •1) Процедуры на asm и c объединяются совместно, используя файл-проект. В этом случае перечисляются c функции и имена объектных модулей, написанных на asm после трансляции их с помощью tasm.
- •2) Компиляция из командной строки:
- •36) Резидентные программы.
- •1) Аппаратные:
- •2) Программные:
- •3) Исключительные ситуации:
- •Непосредственным обращением к соотв. Байтам
10 – структура
EXE-программы
.model small --- модель
памяти, используемая для ЕХЕ;
.stack 100h; сегмент
стека размером в 256 байт;
.code;кодовый сегмент;
start: mov ax,data--
mov ds,ax ; помещается
в DS адрес сегмента данных;
mov ax,4C00h--
.data - сегмент
данных;
end start - конец модуля
Логичиские операции:
AND - Команда выполняет побитовое
«логическое И» над приемником (регистр
или переменная) и источником (число,
регистр или переменная; источник и
приемник не могут быть переменными
одновременно) и помещает результат в
приемник. OR - Выполняет побитовое
«логическое ИЛИ» над приемником (регистр
или переменная) и источником (число,
регистр или переменная; источник и
приемник не могут быть переменными
одновременно) и помещает результат в
приемник. XOR - Выполняет побитовое
«логическое исключающее ИЛИ» над
приемником (регистр или переменная) и
источником (число, регистр или переменная;
источник и приемник не могут быть
переменными одновременно) и помещает
результат в приемник.NOT - Каждый бит
приемника (регистр или переменная),
равный нулю, устанавливается в 1, и
каждый бит, равный 1, сбрасывается в 0.
Сдвиговые операции SAR - Арифметический
сдвиг вправо. SAL - Арифметический сдвиг
влево. SHR - Логический сдвиг вправо. SHL
- Логический сдвиг влево. ROR - Циклический
сдвиг вправо. ROL - Циклический сдвиг
влево. RCR - Циклический сдвиг вправо
через флаг переноса. RCL - Циклический
сдвиг влево через флаг переноса.
;15) Переписать
массив данных из сегмента данных в
кодовый сегмент
.186 .model small .data x db "hello
world" y db "y" endd db ? .stack 100h .code main: mov ax,
@data mov ds,
ax mov si,
0 mov ax,
cs mov es,
ax mov di,
offset copy_here mov cx,
offset endd repz movsb mov cx,
offset endd mov si,
0 print: mov dl,
cs:[copy_here+si] mov ah,
02h int 21h inc si loop print mov ah,
4Ch int 21h
copy_here db ?
end main
;11) Сложение/вычитание
длинных чисел (1)
printDQ macro num:REQ LOCAL
process LOCAL
print LOCAL
diving pusha mov
cx, 0
process:
xor dx,dx
mov si, 8
diving:
sub si, 2
mov ax, word ptr num[si]
mov bx, 10
div bx
mov word ptr num[si], ax
cmp si, 0
jne diving
push dx
inc cx cmp
dword ptr num, 0 jne
process cmp
dword ptr num[4], 0 jne
process
print:
pop dx
add dx, 30h
mov ah, 02h
int 21h loop
print mov
dl, ' ' mov
ah, 02h int
21h popa endm
.model
small .data
Безусл. переходы
в асм. осущ. с помощью команды jmp mylabel;
mylabel - метка куда перейдет. jmp - исп-ет 16
битное смещение элементов если задать.
mov bx,wl;---jmp bx- преходпо содержимому
регистра bx. jmp [wl] - аналогично. jmp можно
использовать для перехода в другой
сегмент но нужно делать перегрузку
cs:ip. Сущ сл. переходы:1)типа
short
(короткий переход) — если адрес
перехода находится в пределах от -127 до
+128 байт от команды JMP; 2) типа near
(ближний переход) — если адрес
перехода находится в том же сегменте
памяти, что и команда JMP; 3)типа far
(дальний переход) — если адрес
перехода находится в другом сегменте.
Дальний переход может выполняться и в
тот же самый сегмент, если в сегментной
части операнда указано число, совпадающее
с текущим значением CS; 4)переход с
переключением задачи — передача
управления другой задаче в многозадачной
среде.
Условные переходы
осущ. переход по заданному адресу в
случае выполнения условия, задаваемого
состоянием флагов процессора. Код
команды Реальное
условие Условие
для CMP JA
JNBE CF
= 0 и ZF = 0 если
выше
если не ниже или равно JAE
JNB
JNC CF
= 0 если
выше или равно
если не ниже
если
нет переноса JB
JNAE
JC CF
= 1 если
ниже
если не выше или равно
если
перенос JBE
JNA CF
= 1 и ZF = 1 если
ниже или равно
если не выше JE
JZ ZF
= 1 если
равно
если ноль JG
JNLE ZF
= 0 и SF = OF если
больше
если не меньше или равно JGE
JNL SF
= OF если
больше или равно
если не меньше JL
JNGE SF
<> OF если
меньше
если не больше или равно JLE
JNG ZF
= 1 и SF <> OF если
меньше или равно
если не больше JNE
JNZ ZF
= 0 если
не равно
если не ноль JNO OF
= 0 если
нет переполнения JO OF
= 1 если
есть переполнение JNP
JPO PF
= 0 если
нет четности
если нечетное JP
JPE PF
= 1 если
есть четность
если четное JNS SF
= 0 если
нет знака JS SF
= 1 если
есть знак
Префикс REP – при указании
сл. за ним команда выполн. столько раз,
сколько указано в регистре CX|ECX,
уменьш. его знач. на 1. Отл. от Loop
– действие распрю только на одну
команду. REPZ(REPE)
– аналогичен REP только
прекращает цикл при ZF=0.
REPNZ(REPNE) – аналогично REP
– прекращает цикл при ZF=1.
;11) Сложение/вычитание
длинных чисел (2)
ten dw 10
num1 dq 548000
num2 dq 52000
rezult dq 0 .stack
100h .code .386 main:
mov ax, @data
mov ds, ax
mov ecx, dword ptr num2
mov edx,
dword ptr num2[4] ; Пара
dx:cx
;
Сложение
mov eax, dword ptr num1
mov ebx,
dword ptr num1[4] ; Пара
bx:ax
add eax, ecx
adc ebx, edx
mov
dword ptr rezult, eax ; Результат
mov dword ptr rezult[4],
ebx
printDQ rezult
;
Вычитание
mov eax, dword ptr num1
mov ebx,
dword ptr num1[4] ; Пара
bx:ax
sub eax,ecx
sbb ebx,edx
mov
dword ptr rezult, eax ; Результат
mov dword ptr rezult[4], ebx
printDQ rezult
mov ah, 4ch
int 21h
end main
;14)Поиск символа
в строке
.186
cseg segment
assume cs:cseg org 100h
main: MAX equ 100 msgYES db "YES",
'$' msgNO db "NO",
'$' char db ? string db MAX+1
dup(?)
mov si,
0 getstr: mov ah,
01h int 21h cmp al,
0Dh je exit_getstr mov string[si],
al inc si jmp getstr exit_getstr: mov string[si],
'$' mov ah,
01h int 21h mov char,
al
mov cx,
si mov si,
0 seek: mov al,
string[si] cmp al,
char je YES inc si loop seek
mov dx,
offset msgNO mov ah,
09h int 21h ret
YES: mov dx,
offset msgYES mov ah,
09h int 21h ret cseg ends end
main
Подпрограммы на
asm
выз-ется командой call
при этом выполн. сл. действия:
-1-в стеке сохр.
адрес сл. после call
команды (для мал. моделей только регистр
IP,
большие – CS:IP).
-2-В регистр CS:IP
для больших моделей или IP
загр. адрес точки входа в подпр.
-3- посл. командой
подпрогр. должна быть команда ret
она загр. из стека адрес сл. после call
команды.
my_proc
PROC – имя
процедуры---
my_proc
ENDP.
Для передачи
параметров исп. 2 способа:
- через регистр;
- через стек;
Также можно
передавать копию аргумента или адрес
аргумента.
Команда CALL
имеет 4 модификации:
- вызов прямой
ближний(в пределах текущего программного
сегмента – near
ptr):call
near
ptr
proc1;
- вызов косвенный
ближний(word
ptr):
mov
bx,offset
proc1---call
[bx];
- прямой дальний
вызов(вызов процедуры, расположенной
в другом сегменте кода – far
ptr):
call
far
ptr
proc1;
- вызов косвенный
дальний(dword
ptr):
adr
dd
proc1---call
DS:adr(или
call
dword
ptr
adr).
Int 21h ; функция dos "завершить программу";
12) Логические и сдвиговые операции.
13) Организация циклов, условных и безусловных переходов
16) Префиксы повторения.
17) Подпрограммы. Передача параметров. Ближние и дальние процедуры.