Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры по ассемблеру.doc
Скачиваний:
65
Добавлен:
15.09.2014
Размер:
220.67 Кб
Скачать

1)Архитектура пк.

Реальный режим работы процессора.

Регистры процессора:

1) Регистры общего назначения

AX | AH | AL | , BX, CX, DX

SI, DI, BP, SP

2) Сегментные регистры

CS, DS, SS, ES, IP и Flags

Пусть в память загружен исполняемы модуль некоторой программы. Команды должны в установленном порядке считываться и исполнятся, при этом они манипулируют данными в памяти или регистрах. В памяти выделяется три сегмента: для кода, данных и стека. Для 8086 каждый сегмент <=64 Кб. 8086 адресовал 1 Мб, Для того что бы адресовать 1 Мб с 16 бит регистром выполняется: вся память делится на сегменты по 64 Кб, причём каждый сегмент начинается на границе 16 байт от начала памяти, каждый стартовый байт – параграф. Начальный адрес каждого сегмента хранится в начале сегментного регистра, без последнего ноля. Физический адрес некоторого элемента памяти определяется суммой заданной в начале сегментного регистра и смещением. Смещение может хранится в одном из регистров:

Ip(для кода); bx,si,di(для сегмента данных);bp,sp(для стека).Значения предыдущих кроме ip можно изменять, имея ввиду что память имеет кольцевую организацию.

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- наоборот.

4. Структура программы на asm

Рассмотрим одну из возможных структур:

.MODEL small

.STACK 100h

.DATA

.CODE

start:

END start

; деректива .MODEL позв. выбрать нужную модель памяти tiny;small;medium;compact;large;huge;flat;

.STACK - позволяет определитьстек размером 100h;

.DATA - сегмент данных;

.CODE - нач. области памяти где сод. код программы;

start - опред точку вх. в программу;

END start - точка выхода из программы.

7) Организация прерываний.

Посредством прерывания работы микропроцессора можно приостанавл. работу текущей программы

и осущ. запуск другой программы.

Прерывания:

1)Внешние;

2)Внутренние.

Каждому прерыв. ставятся в соотв. 4-х байтный вектор с номером 0<n<255.

Все векторы можно размещать по порядку в младш. килобайте памяти.

Любой из них задает точку входа или старт адрес программы для обслуж. треб ситуации.

В виде сегмент. прогр.: смещ. прогр. (Вектор прерывания - адрес!!!)

Внешн прер. вызываются на входе INTR(запрос маскируемого прерывания и на NMI(немаскер. прерывание).

Если признак I в регистре флаг = 0, сигнал на входе INTR не распазнается и прерывание не происх.

При I=1 и налич сигнала ШТЕК возник маскируемое прерывание.

Действие кот. будет при этом выполн.:

1) На вход intr - поступ. Запрос прерывание;

2) Послед. Действия определ. Допустимой ситуацией:

а) ожид. завершение текущей команды;

б)-||- сл. команды;

в) запрос обраб во время вып. текущей команды.---

В нек случаях сигнал INTR распазн только при

б).--Имеются 2 случ. когда

в): 1..При строковых командах с повторением.2.. При вып. команды wait.

3) Микропроц. Выраб. 2 сигнала подтверждения intx.

4) По шине адресов/данных в микропроц. Передается байт с номером n прерываний.

5) Текущее содерж. Регистра признаков и регистра cs и ip загруж. В стек.

В стек загруж. IP соответ. смещениюкоманды перед которой возникло прерыв.

6) Признаки I,t сбрасываются в 0.

7)В cs:ip загруж. Содержимое вектора n.

8) Выполн. Программа обработки прерывания.

9) В конце обработки прерыв. Команда iret восстан. Знач. Регистра ip,es и fl.

10)Прерванная программа продолж. Свое выполнение.

2) Структура памяти и методы адресации.

В памяти можно различать байты, слова, двойные слова и т.д. Слово – 2 рядом расположенных байта. Младший байт хранится по младшему адресу. Адресом слова является его младший байт.

Адреса объектов тоже можно различать в памяти виде 4 – байтных элементов – сегмент смещения. Причем слово с меньшим адресом – смещение, а с большим – сегмент.

Методы адресации: - адресация данных; - адресация переходов;

Методы адресации данных:

  1. Непосредственная, при которой операнд длинной байт или слово является частью команды. Операнд помещается в посл. байты команды причем младший байт располагается по меньшему адресу --- mov ax,1234h

  2. Прямая адресация, при которой смещение данного размером 16 бит явл. Частью команды: mov ax,my_label

  3. Регистровая адресация – операнд нах-ся в одном из регистров общего назначения или в одном из сегментных регистров, имя регистра определяется в самой команде ---- mov ax,bx

  4. Косвенная регистровая адресация, при которой смещение данного размером 16 бит нах-ся в одном из регистров bx, si, di, bp: mov ax,[bx]; mov ax,cs:[bx] – используется префикс замены. Префикс замены не может исп-ся с IP и SP

  5. Относительная косвенная регистровая адресация. Смещение данного размером 16 бит вычисл. как сумма смещения в команде размером 8 или 16 бит и знач. в одном из регистров. --- mov ax,[bx+10] – смещение данного в сегменте ds опр-ся суммой знач, кот. хр-ся в регистре bx и числа 10. mov ax,[bx]+10; mov ax,10[bx]

  6. Базовая индексная адресация - смещение данного размером 16 бит опр-ся суммой знач. базового рег-ра (bx,bp), индексного рег-ра (si,di) и смещением в команде. --- mov ax, ax,my_array[bx][si]

  7. Неявная адресация – адреса объектов задаются неявно кодом операций.

Методы адресации переходов:

  1. Внутрисегментный прямой переход, где смещение очередной ком-ды в сегменте кода. Опр-ся суммированием в регистре ip значения со знач. смещения в 8 или 16 бит заданным в команде --- jmp my_label

  2. Внутрисегментный косвенный переход - содержимое регистра ip заменяется 16 битовым значением заданного регистра или адресации данных кроме непосредственных. --- jmp [bx]

  3. Межсегментный прямой переход – сод-мое регистра в ip и cs зам-ся 2 словами расп-ся непосредственно в команде ---- jmp far ptr far label

  4. Межсегментный косвенный переход – при этом сод-мое регистров ip,cs зам-ся 2 словами последовательно расп. В памяти (ip по младшему алресу). --- jmp dword ptr[bx]

;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

8. Объявление и инициализация данных

Базовые типы данных:

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.

3) Организация стека.

Стек - нек. область оперативной памяти которая исп. механизм безадресной записи и выборки данных.

Эти механизмы работают : последний запис. - первый выбранный.

Адрес сегмента памяти в кот. нах. стек определ. в регистре ss. ЄAaВершина стека в sp.

Для 16 бит. процессора данные в стек помещ. в виде слов. ss:sp - в любой момент определ. вершина.

push - занести в стек. (sp уменьш на 2).

Для извлечения слова из стека исп. команда типа pop,

при этом снач. произв. чтение слова, а потом sp увелич на 2.

Особенности:

1)Несмотря на то что знач. 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 main

Соседние файлы в предмете Конструирование программ и языки программирования