- •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) Исключительные ситуации:
- •Непосредственным обращением к соотв. Байтам
Чтобы не запис. в
программе часто повт. фрагмент, рекоменд.
хранить ее в именованном МАКРОСЕ и
потом исп. его имя всякий раз, когда
этот код потр. Макроопределение – это
группа команд, которая должна вставляться
в текст вместо макрокоманды. Макрокоманда
– задает имя макроопределения, которое
определяет, какую группу команд, в какое
место программы необх. поместить и
какие аргументы должны исп-ся вместо
параметров. Макрорасширение –группа
команд, реал. макроопределение, в котором
парам. заменены на адреса конкр.
переменных. Макроопр. имеет сл. вид:
<имя макроса> MACRO
<формальные параметры через
запятую>---<тело макроса>---ENDM.
Макрокоманда запис сл. обр. <имя
макро>/<параметр>,…/. При написании
макроопределений необходимо, чтобы
метки в программе были уникальными.
Для этой цели в языке имеется директива
– local.
LOCAL
d1,d2,…;
формальные параметры. Директива LOCAL
позволяет объявить метку локальной и
сгенерировать для нее уникальное имя
вида: ??0000, ??0001 и т.д.
;20) Умножение
32-битовых чисел
(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
ten dw 10
num1 dd 548000
num2 dd 52000
rezult dq 0
.stack 100h
Директива SEGMENT
используется для описания сегментов.
Формат директивы: <имя>SEGMENT[параметры]…<имя>
ENDS.
Данная директива может содержать три
типа параметров: выравнивание;
объединение; класс. 1. Выравнивание –
определяет границу памяти для стартового
адреса сегмента: byte
– на границе байта word
– на гр. слово dword
– на гр. двойное слово para
– на гр. параграфа page
– 256 байт. По умолчанию используется
знач. PARA.
2. Объединение – показывает как должны
объединятся сегменты с одинаковыми
именами в разных модулях. Возможны сл.
типы объединений: COMMON
– для сегментов с одним и тем же именем
и классом и имеющим параметр объединения
common
устанавл. один общий адрес загрузки(размер
сегмента – максимальный из совм.
сегментов.) Это позволяет: - уменьшить
объем памяти исп. программой; - к одним
и тем же данным можно обращаться с исп.
разных имен; - к одним и тем же данным
получ. разл. способ доступа(byte,
word,
dword
и т.п.), PUBLIC
– сегменты с одним и тем же именем,
классов и топом объединения public
загружаются в смежные блоки памяти
(объед.) и размер всего сегмента равен
сумме размеров объединенных сегментов.
Требуется когда несколько разр. создают
общий сегмент данных к которому необходим
доступ из различных программных
модулей., MEMORY
– тип объединение подобный PUBLIC,
STACK
– все сегменты с одинаковым именем,
классом и типом объединения stack
компонуются в один общий сегмент,
аналогично сегментам с типом
public(различие
в том что сегмент с типом компоновки
stack
и классом ‘stack’
считается сегментом стека. , AT-выражение
– выражение определяет сегментный
адрес памяти, т.е. задает номер параграфа
с которого в памяти будет распологаться
данный сегмент., PRIVATE
– данный сегмент не будет объединяться
с другими. Этот тип компановки модулей
устанавливается по умолчанию.
;19) Транспонирование
битовой матрицы
(1)
printMATRIX macro MATRIX:REQ
LOCAL
prints
LOCAL print
mov cx, 8
mov si, 0
prints:
xor ax, ax
mov bl, MATRIX[si]
push cx
mov cx, 8
print:
xor
dx, dx
rol bl, 1
rcl dl, 1
add dl, 30h
mov ah, 02h
int 21h
loop print
pop cx
inc si
mov dx, offset refresh
mov ah, 09h
int 21h
loop prints
mov dx, offset refresh
mov ah, 09h
int 21h endm
.MODEL
small .STACK
100h .DATA masSRC
db 00110001b
db 00110010b
db 00110011b
db 00110100b
db 00110101b
db 00110110b
db 00110111b
db 00111000b masDST
db 8 dup(0)
;20) Умножение
32-битовых чисел
(2)
.code .386 main:
mov ax, @data
mov ds, ax
mov eax, num1
mul num2
mov
dword ptr rezult, eax ; Результат
mov dword ptr rezult[4], edx
printDQ rezult
mov ah, 4ch
int
21h
end main
;28) Вывести все
ASCII символы
.model small .stack
100h .data .code main:
mov ax, @data
mov ds, ax
xor ax, ax
mov cx, 256
print:
mov ah, 02h
int 29h
inc al
loop print
mov ah, 4ch
int 21h
end main
end
;19) Транспонирование
битовой матрицы
(2)
refresh
db 0Dh, 0Ah, '$' .CODE main:
mov ax, @data
mov ds,
ax
printMATRIX masSRC
mov
cx, 8 lea
di, masDST cycle1: push
cx mov
cx, 8 lea
si, masSRC cycle2: rol
masSRC[si], 1 rcl
al, 1 inc
si loop
cycle2 pop
cx mov
[di], al inc
di loop
cycle1
printMATRIX masDST
mov ah, 4ch
int 21h
end main
;21) Поиск MIN и MAX
значения в неупорядоченном списке printnum
macro num:REQ
LOCAL process
LOCAL print
mov ax, num
mov cx, 0
process:
inc cx
xor dx, dx
mov bx, 10
div bx
push dx
cmp
ax, 0
jne process
print: pop dx
add
dx, 30h
mov ah, 02h
int 21h
loop print
mov dl, ' '
mov ah, 02h
int 21h endm .MODEL
small .STACK
100h .DATA
spisok dw 1000, 100, 4, 3000,
4566
len equ $ - spisok
MAX dw 0
MIN dw 0 .CODE main:
mov ax, @data
mov ds, ax
xor bx, bx
mov bx, spisok
mov MAX, bx
mov MIN, bx
mov cx, 5
dec cx
mov si, 2
seek: mov bx, spisok+si
cmp bx, MAX
jl tryMIN
mov MAX, bx
jmp continue
tryMIN:
cmp bx, MIN
jg
continue
mov MIN, bx
continue:
add si, 2
loop seek
printnum MAX
printnum MIN
mov ah, 4ch
int 21h end
main
;24) Преобразовать
строку в число - вернуть в регистр
.model
small .stack
100h .data
string db "12345",
'$'
len dw 5
ten dw 10
rezult dw 0 .code
main:
mov ax, @data
mov ds, ax
mov si,
0
mov cx, len
trans:
xor bx, bx
mov bl, string+si
sub bl, 30h
mov ax, rezult
mul ten
mov rezult, ax
add rezult, bx
inc si
loop trans
mov ah, 4ch
int 21h
end main18) Повторяющиеся блоки и макросы. Локальные метки.
22) Стандартные директивы определения сегментов.