- •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) Исключительные ситуации:
- •Непосредственным обращением к соотв. Байтам
Реальный режим
работы процессора.
Регистры процессора:
AX
| AH
| AL
| , BX,
CX,
DX
SI,
DI,
BP,
SP
CS, DS, SS,
ES, IP и
Flags
Пусть в память
загружен исполняемы модуль некоторой
программы. Команды должны в установленном
порядке считываться и исполнятся, при
этом они манипулируют данными в памяти
или регистрах. В памяти выделяется три
сегмента: для кода, данных и стека. Для
8086 каждый сегмент <=64 Кб. 8086 адресовал
1 Мб, Для того что бы адресовать 1 Мб с
16 бит регистром выполняется: вся память
делится на сегменты по 64 Кб, причём
каждый сегмент начинается на границе
16 байт от начала памяти, каждый стартовый
байт – параграф. Начальный адрес каждого
сегмента хранится в начале сегментного
регистра, без последнего ноля. Физический
адрес некоторого элемента памяти
определяется суммой заданной в начале
сегментного регистра и смещением.
Смещение может хранится в одном из
регистров:
AX
- применяется при работе с портами,
умножении и делении, ВХ - содержать
адрес в опер. памяти(смещение),СХ – в
операциях повторения,DX
– адреса портов ввода-вывода, исплюю
в дел. и умн. с АХ. Все они позвл. обращ.
независимо к старшей и младш. полов.
SI
– смещение в сегментах данных. при
строк окманд(строки источника в DS)DI
- смещение в сегментах данных. при строк
окманд(строки приёмника в ES)BP
– адреса в памяти смещение стека SP
– тоже что BP
указ на текущую вершину стека. измен
командами (push,
pop,pushf,popf,cell,ret)Их
испол для хрон данных если они не испол
на прим.
IP-смещение
в сегменте кода. СS-стартовый
адрес кода.DS-стартовый
сегмент данных. ES-стартовый
сегмент данных дополнительных данных.SS-
адрес сегмента стека, в BP,SP
Flags-
биты установ в 01 при определённых
условиях. С – перенос. Р – чётность 1
если чётно. А – выполняет операцию в
ВCD кодах Z-
признак нуля.S-
повторяет занмение стартового бита
результата. Т- признак трассировки.I-
разрешение прирывание на вход,D-
признак направления для стека 1-уменьшает
индекс адр, 0- наоборот.
Рассмотрим одну
из возможных структур:
.MODEL
small .STACK
100h .DATA .CODE start: END
start
; деректива
.MODEL позв.
выбрать
нужную
модель
памяти
tiny;small;medium;compact;large;huge;flat;
.STACK - позволяет
определитьстек размером 100h;
.DATA - сегмент данных;
.CODE - нач. области
памяти где сод. код программы;
start - опред точку
вх. в программу;
END start - точка выхода
из программы.
Посредством
прерывания работы микропроцессора
можно приостанавл. работу текущей
программы
и осущ. запуск
другой программы.
Прерывания:
Каждому прерыв.
ставятся в соотв. 4-х байтный вектор с
номером 0<n<255.
Все векторы можно
размещать по порядку в младш. килобайте
памяти.
Любой из них задает
точку входа или старт адрес программы
для обслуж. треб ситуации.
В виде сегмент.
прогр.: смещ. прогр. (Вектор прерывания
- адрес!!!)
Внешн прер.
вызываются на входе INTR(запрос маскируемого
прерывания и на NMI(немаскер. прерывание).
Если признак I в
регистре флаг = 0, сигнал на входе INTR не
распазнается и прерывание не происх.
При I=1 и налич
сигнала ШТЕК возник маскируемое
прерывание.
Действие кот. будет
при этом выполн.:
а) ожид. завершение
текущей команды;
б)-||- сл. команды;
в) запрос обраб во
время вып. текущей команды.---
В нек случаях
сигнал INTR распазн только при
б).--Имеются 2 случ.
когда
в): 1..При строковых
командах с повторением.2.. При вып.
команды wait.
В стек загруж. IP
соответ. смещениюкоманды перед которой
возникло прерыв.
В памяти можно
различать байты, слова, двойные слова
и т.д. Слово – 2 рядом расположенных
байта. Младший байт хранится по младшему
адресу. Адресом слова является его
младший байт.
Адреса объектов
тоже можно различать в памяти виде 4 –
байтных элементов – сегмент смещения.
Причем слово с меньшим адресом –
смещение, а с большим – сегмент.
Методы адресации:
- адресация данных; - адресация переходов;
Методы адресации
данных:
Непосредственная,
при которой операнд длинной байт или
слово является частью команды. Операнд
помещается в посл. байты команды причем
младший байт располагается по меньшему
адресу --- mov
ax,1234h
Косвенная
регистровая адресация, при которой
смещение данного размером 16 бит нах-ся
в одном из регистров bx, si, di, bp: mov
ax,[bx];
mov
ax,cs:[bx]
– используется префикс замены. Префикс
замены не может исп-ся с IP
и SP
Относительная
косвенная регистровая адресация.
Смещение данного размером 16 бит вычисл.
как сумма смещения в команде размером
8 или 16 бит и знач. в одном из регистров.
--- mov
ax,[bx+10]
– смещение данного в сегменте ds
опр-ся суммой знач, кот. хр-ся в регистре
bx
и числа 10. mov
ax,[bx]+10;
mov
ax,10[bx]
Базовая индексная
адресация - смещение данного размером
16 бит опр-ся суммой знач. базового
рег-ра (bx,bp),
индексного рег-ра (si,di)
и смещением в команде. --- mov
ax,
ax,my_array[bx][si]
Методы адресации
переходов:
Внутрисегментный
прямой переход, где смещение очередной
ком-ды в сегменте кода. Опр-ся суммированием
в регистре ip
значения со знач. смещения в 8 или 16 бит
заданным в команде --- jmp
my_label
;5) Перевод числа
из десятичной системы
; счисления в
шестнадцатеричную
.186 cseg segment assume cs:cseg org 100h main: num equ 12 osn equ 14
xor cx,
cx mov ax,
num cmp ax,
osn jge process push ax mov cx,
1 jmp print process: xor dx,
dx mov bx,
osn div bx inc cx push dx cmp ax,
0 jne process
print: pop dx add dx,
30h cmp dx,
3Ah jl norma add dx,
07h norma: mov ah,
02h int 21h loop print
ret
cseg ends
end main
Базовые типы
данных:
db - 1 байт;
dw -слово 2 байта;
dd - 4 байта;
df,dp - 6 байт;
dq - 8 байт;
dt - 10
байт.
db a 'A' -
символ;
db "Pete" - строка.
Данные могут
записываться в разл. с/с d;h;o;b.
Примеры: byte db ? -
резерв один байт; byte db 10 dup(?)-10;s1 db "drgt"
- строка;s4 dw 12 - коды знаков 12.
Стек - нек. область
оперативной памяти которая исп. механизм
безадресной записи и выборки данных.
Эти механизмы
работают : последний запис. - первый
выбранный.
Адрес сегмента
памяти в кот. нах. стек определ. в регистре
ss. ЄAaВершина стека в sp.
Для 16 бит. процессора
данные в стек помещ. в виде слов. ss:sp - в
любой момент определ. вершина.
push - занести в
стек. (sp уменьш на 2).
Для извлечения
слова из стека исп. команда типа pop,
при этом снач.
произв. чтение слова, а потом sp увелич
на 2.
Особенности:
т.к. стек исп.
довольно часто и не только самой
программой(но и при вызове различных
подпрограмм).
ОП могут исп. стек
при вызове сервисных процедур.
Для адрес. данных
стека можно исп. bp
(можно рассматр.
как базовый регистр в сегменте стека
и находить данные
в стеке через
смещение заданные относит. этого
регистра).
;6) В матрице найти
сумму элементов столбцов
.186 cseg
segment assume
cs:cseg org
100h main:
sum dw 0
mov bx, offset matrix
mov di, 0
count_col:
mov si, di
mov cx, row
mov sum, 0
go_row:
xor ax, ax
mov al, [bx+si]
add sum, ax
add si, col
loop go_row
cmp sum, 10
jl norma
mov ax, sum
mov dl, 10
div dl
mov byte ptr sum+1, al
mov byte ptr sum, ah
norma:
add byte ptr sum+1, 30h
add byte ptr sum, 30h
mov dl, byte ptr sum+1
mov ah, 02h
int 21h
mov dl, byte ptr sum
mov ah, 02h
int 21h
mov dl, ' '
mov ah, 02h
int 21h
inc di
cmp di, col
jl count_col
ret
col equ 3
row equ 3
matrix db 1, 2, 3
db 4, 5, 6
db 7, 8, 9 cseg
ends
end main
;9) В кодовом сегменте
находится матрица. Найти сумму элементов
строк
.186
cseg segment assume
cs:cseg org
100h main:
sum dw 0
mov bx, offset matrix
mov si, 0
mov di, 0
count_row:
mov cx, col
mov sum, 0
go_col:
xor ax, ax
mov al, [bx+si]
add sum, ax
inc si
loop go_col
cmp sum, 10
jl norma
mov ax, sum
mov dl, 10
div dl
mov byte ptr sum+1, al
mov byte ptr sum, ah
norma:
add byte ptr sum+1, 30h
add byte ptr sum, 30h
mov dl, byte ptr sum+1
mov ah, 02h
int 21h
mov dl, byte ptr sum
mov ah, 02h
int 21h
mov dl, ' '
mov ah, 02h
int 21h
inc di
cmp di, row
jl count_row
ret
col equ 3
row equ 3
matrix db 1, 2, 3
db 4, 5, 6
db 7, 8, 9 cseg
ends
end main1)Архитектура пк.
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) Необходимо обращ. Внимание для выделения памяти для стека.