Программная модель микропроцессора INTEL 8080, регистры, форматы и системы команд, методы адресации

Содержание

Слайд 2

Введение Язык ассемблера - это символическое представление машинного языка. Архитектура ЭВМ

Введение

Язык ассемблера - это символическое представление машинного языка.
Архитектура ЭВМ - это

абстрактное представление ЭВМ, которое отражает ее структурную, схематичную и логическую организацию. Это понятие включает в себя следующее:
Структурную схему ЭВМ
Средства и способы доступа к элементам структурной схемы ЭВМ
Организация и разрядность ЭВМ
Набор и доступность регистров
Организацию и способы адресации памяти
Способы представления и форматы данных ЭВМ
Набор машинных команд ЭВМ
Форматы машинных команд
Обработку нештатных команд
Слайд 3

Программная модель Intel (Pentium III)

Программная модель Intel (Pentium III)

Слайд 4

Регистры Регистры - это память микропроцессоров. Программную модель микропроцессора Intel составляют:

Регистры

Регистры - это память микропроцессоров. Программную модель микропроцессора Intel составляют:
Пространство адресуемой

памяти (для Pentium III- 2 36- 1 байт)
Набор регистров для хранения данных общего назначения
Набор сегментных регистров
Набор регистров состояния и управления
Набор регистров вычислений с плавающей точкой
Набор регистров целочисленного ММХ- расширения, отображенных на регистры сопроцессоров
Набор регистров ММХ- расширения с плавающей точкой
Программный стек
Слайд 5

Регистры общего назначения еах (ax/ah/al) –аккумулятор ebx (bx/bh/bl) - базовый регистр

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

еах (ax/ah/al) –аккумулятор
ebx (bx/bh/bl) - базовый регистр
есх (cx/ch/cl) -

регистр-счетчик
edx(dx/dh/dl) - регистр данных
esi (si) - индекс источника
edi(di) -индекс приемника(получателя)
esp (sp) - регистр указателя стека
ebp(bp) - регистр указателя базы кадра стека
Слайд 6

Сегментные регистры МП аппаратно поддерживает две модели использования оперативной памяти Сегментированная

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

МП аппаратно поддерживает две модели использования оперативной памяти
Сегментированная модель. В

этой модели программе выделяются непрерывные области памяти (сегменты), а сама программа может обращаться только к данным, которые находятся в этих сегментах.
Страничная модель. Ее можно рассматривать как надстройку над сегментированной моделью памяти. В случае использования этой модели памяти оперативная память рассматривается как совокупность блоков фиксированного размера (4 Кбайта).
Слайд 7

Сегментные регистры Сегментация — это механизм адресации, обеспечивающий существование нескольких независимых

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

Сегментация — это механизм адресации, обеспечивающий существование нескольких независимых адресных

пространств, как в пределах одной задачи, так и в системе в целом для защиты задач от взаимного влияния
Различают три основных модели сегментированной организации памяти.
сегментированная модель памяти реального режима
сегментированная модель памяти защищенного режима
сплошная модель памяти защищенного режима.
Слайд 8

Сегментные регистры Сегмент кода. Содержит команды программы. Для доступа к этому

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

Сегмент кода. Содержит команды программы. Для доступа к этому сегменту

служит регистр cs (code segment register).
Сегмент данных. Содержит обрабатываемые программой данные. Для доступа к этому сегменту служит регистр ds (date segment register).
Сегмент стека. Этот сегмент представляет собой область памяти, называемую стеком. Для доступа к этому сегменту служит регистр ss (stack segment register).
Дополнительный сегмент данных. Если программе недостаточно одного сегмента данных, то она имеет возможность использовать еще три дополнительных сегмента данных es, gs,fs.
Слайд 9

Регистры состояния и управления регистр флагов eflsgs/flags регистр указателя команды eip/ip

Регистры состояния и управления

регистр флагов eflsgs/flags
регистр указателя команды eip/ip
Указатель команд —

это регистр eip/ip. В этом регистре всегда находится адрес команды, которая должна быть выполнена следующей.
Все флаги можно разделить на три группы:
8 флагов состояния.
1 флаг управления (df).
5 системных флагов.
Слайд 10

Структура программы на ассемблере Предложения ассемблера бывают четырех типов: команды, или

Структура программы на ассемблере

Предложения ассемблера бывают четырех типов:
команды, или инструкции, представляющие

собой символические аналоги машинных команд
макрокоманды - оформляемые определенным образом предложения текста программы
директивы, являющиеся указанием транслятору ассемблера на выполнения некоторых действий
строки комментариев, содержащие любые символы
Слайд 11

Структура программы на ассемблере Формат команды ассемблера: [Метка:] Мнемокод [операнд] [;комментарий]

Структура программы на ассемблере

Формат команды ассемблера:
[Метка:] Мнемокод [операнд] [;комментарий]
Метка -

служит для присвоения имени команде. На эту метку можно будет ссылаться из любой части программы.
Комментарии — должны быть отделены от команд ;. Это комментарии к команде, программе и блоку команд.
Мнемокод - это имя команды МП.
Поле операндов — в поле операндов может быть0, 1 или 2 операнда в зависимости от типа команды.
Слайд 12

Классификация операндов Постоянные и непосредственные операнды MOV ax,5 Адресные операнды MOV

Классификация операндов

Постоянные и непосредственные операнды
MOV ax,5
Адресные операнды
MOV AX,DS:0000H
Перемещаемые операнды
lea

si,a; a - перемещаемый операнд
Счетчик адреса ($)
Jmp $+3
Регистровый операнд
MOV ax,cx
Базовый и индексный операнды
MOV ax,[bx+8]
Структурные операнды
Слайд 13

Режимы адресации

Режимы адресации

Слайд 14

Псевдооператор определения сегмента Формат псеводооператора следующий имя_сег SEGMENT [тип подгонки] [тип_связи]

Псевдооператор определения сегмента

Формат псеводооператора следующий
имя_сег SEGMENT [тип подгонки] [тип_связи] ['класс'] [

тип размера памяти]
имя_сег ENDS
[тип подгонки] : BYTE, WORD, DWORD,PARA, PAGE, MEMPAGE
[тип_связи] : PRIVATE, PUBLIC, COMMON, AT xxxx, STACK
['класс']
[ тип размера памяти] : USE 16 , USE 32
Упрощенные директивы определения сегмента.
.CODE [ИМЯ]
.DATA
.CONST
.DATA?
.STACK
Слайд 15

Псевдооператоры DB, DW, DD Все псевдооператоры определяют переменную или присваивает ячейке

Псевдооператоры DB, DW, DD

Все псевдооператоры определяют переменную или присваивает ячейке памяти

начальное значение.
DB - Резервирует один или несколько байт.
Формат: [имя] DB выражение[,…]
DW - Резервирует двухбайтовые слова.
Формат: [имя] DW выражение[,…]
DD - Резервирует четырехбайтовые слова.
Формат: [имя] DD выражение[,…]
DF - Резервирует шестибайтовые слова.
Формат: [имя] DF выражение[,…]
DP - Резервирует шестибайтовые слова.
Формат: [имя] DP выражение[,…]
DQ - Резервирует восьмибайтовые слова.
Формат: [имя] DQ выражение[,…]
DT - Резервирует десятибайтовые слова.
Формат: [имя] DT выражение[,…]
Слайд 16

Команда пересылки данных и работы со стеком Команда пересылки данных: MOV

Команда пересылки данных и работы со стеком

Команда пересылки данных:
MOV<операнд-приемник>,<операнд-источник>
Команды работы со

стеком:
PUSH источник
POP приемник
PUSHA и PUSHAW
POPA, POPAW
PUSHF
PUSHFW
POPF и POPFW
Слайд 17

Команды пересылки данных Команда обмена: XCHG операнд1, операнд2 Работа с адресами

Команды пересылки данных

Команда обмена:
XCHG операнд1, операнд2
Работа с адресами и указателями:
lea приемник,

источник
mov приемник, offset источник
lds приемник, источник
les приемник, источник
lgs приемник, источник
lfs приемник, источник
lss приемник, источник
Команды ввода-вывода в порт:
in аккумулятор, порт
out порт, аккумулятор
Слайд 18

Арифметические команды Арифметические команды работают с двумя типами чисел: целыми двоичными

Арифметические команды

Арифметические команды работают с двумя типами чисел:
целыми двоичными числами (знаковыми

и беззнаковыми)
целыми десятичными числами
Целые двоичные числа - это число, закодированное в двоичной системе счисления.
Формат двоичных чисел: числоb (01001100b)
Десятичные числа - специализированный вид представления числовой информации, в основу которого положен принцип (BCD - Binary-Coded Decimal).
Десятичные числа могут представляться в двух форматах и заканчиваются буквой D:
упакованном формате - каждый байт содержит две десятичные цифры.
неупакованный формат- каждый байт содержит одну десятичную цифру в четырех младших битах.
Слайд 19

Арифметические команды Команда сложения ADD приемник, источник приемник = приемник +источник

Арифметические команды

Команда сложения
ADD приемник, источник приемник = приемник +источник
Команда вычитания
SUB приемник,

источник приемник= приемник- источник
Команды умножения
MUL источник IMUL источник
Команда деления
DIV источник IDIV источник
Слайд 20

Команды манипулирования битами Логические команды and источник, приемник оr источник, приемник

Команды манипулирования битами

Логические команды
and источник, приемник
оr источник, приемник
хоr источник, приемник
test источник,

приемник
not операнд
Команды сдвига
shl оп., кол-во_сдвигов shr оп., кол-во_сдвигов
sal оп., кол-во_сдвигов sar оп., кол-во_сдвигов
rol оп., кол-во_сдвигов ror оп., кол-во_сдвигов
rcl оп., кол-во_сдвигов rcr оп., кол-во_сдвигов
Слайд 21

Команда сравнения СМР операнд1, операнд2

Команда сравнения

СМР операнд1, операнд2

Слайд 22

Функции работы с клавиатурой Прерывание int21h 01h – ввод с клавиатуры

Функции работы с клавиатурой

Прерывание int21h
01h – ввод с клавиатуры
02h – вывод

на дисплей
08h – консольный ввод без эха
09h – вывод строки на экран
0ah – буферизированный ввод строки
0bh – проверить статус ввода
0ch – ввод с очисткой
3fh – чтение файла
Прерывание int10h
00h - прочитать символ с клавиатуры
 01h - получить состояние клавиатуры
02h - получить состояние флагов клавиатуры
03h - управление режимом автоповтора
04h - включить/выключить звуковой сигнал клавиш
05h - поместить символ в буфер клавиатуры
10h - прочитать символ с расширенной клавиатуры
11h - получить состояние расширенной клавиатуры
12h - получить состояние флагов расширенной клавиатуры
Слайд 23

Пример работы с клавиатурой code segment assume cs:code, ds:data main proc

Пример работы с клавиатурой

code segment
assume cs:code, ds:data
main proc
mov ax,data ;Инициализируем
mov ds,ax ;регистр

DS
;Выведем служебное сообщение
mov ah,09h ;Функция вывода
mov dx,offset msg ;адрес сообщения
int 21h
;Поставим запрос к DOS на ввод строки
mov ah,3Fh ;функция ввода
mov bx,0 ;дескриптор клавиатуры
mov cx,80 ;ввод максимум 80 байт
mov dx,offset buf ;адрес буфера ввода
int 21h
mov actlen,ax ;фактически введено
Слайд 24

Пример работы с клавиатурой ;Превратим строчные русские буквы в прописные mov

Пример работы с клавиатурой

;Превратим строчные русские буквы в прописные
mov cx,actlen ;длина введенной

строки
mov si,0 ;указатель в буфере
filter: mov al,buf[si] ;возьмем символ
cmp al,'а' ;меньше «а»?
jb noletter ;да, не преобразовывать
cmp al,'я' ;Больше «я»?
ja noletter ;да, не преобразовывать
cmp al,'п' ;больше «п»?
ja more ;да, на дальнейшую программу
sub al,20h ;«а»..«п». преобразуем в прописную букву
jmp store ;на сохранение в буфер
more: cmp al,'р‘ ;меньше «р»(псевдографика)?
jb noletter ;>п,<р не изменять
sub al,50h ; «р»..«я». Преобразуем в прописную букву
store: mov buf[si],al ;отправим назад в buf
noletter: inc si ;сместим указатель
loop filter ;цикл по всем символам
Слайд 25

Пример работы с клавиатурой ;Выведем результат преобразования на экран mov ah,40h

Пример работы с клавиатурой

;Выведем результат преобразования на экран
mov ah,40h ;функция ввода
mov bx,1 ;дескриптор

экрана
moc cx,actlen ;длина сообщения
mov dx,offset buf ;адрес сообщения
int 21h
mov ah,01 ;остановим программу
int 21h ;в ожидании нажатия клавиши
;Завершим программу
mov ax4C00h
int 21h
main endp
code ends
data segment
msg db 'Вводите! $'
buf db 80 dup(' ')
actlen dw 0
data ends
stk segment stack
dw 128 dup (?)
stk ends
end main
Слайд 26

Команды обработки строк MOVS - переслать один байт или одно слово

Команды обработки строк

MOVS - переслать один байт или одно слово из

одной области памяти в другую;
LODS - загрузить из памяти один байт в регистр AL или одно слово в регистр AX;
STOS - записать содержимое регистра AL или AX в память;
CMPS - сравнить содержимое двух областей памяти, размером в один байт или в одно слово;
SCAS - сравнить содержимое регистра AL или AX с содержимым памяти.
Префикс REP позволяет этим командам обрабатывать строки любой длины.
Слайд 27

Регистры, участвующие в цепочечных командах

Регистры, участвующие в цепочечных командах

Слайд 28

Модификации префикса REP REP - повторять операцию, пока CX не равно

Модификации префикса REP

REP - повторять операцию, пока CX не равно

0;
REPZ или REPE - повторять операцию, пока флаг ZF показывает "равно или ноль". Прекратить операцию при флаге ZF, указывающему на не равно или не ноль или при CX равном 0;
REPNE или REPNZ - повторять операцию, пока флаг ZF показывает "не равно или не ноль". Прекратить операцию при флаге ZF, указывающему на "равно или нуль" или при CX равным 0.
Слайд 29

Пример: Использование цепочечных команд STACKSG SEGMENT PARA STACK 'Stack' DW 32

Пример: Использование цепочечных команд

STACKSG SEGMENT PARA STACK 'Stack'
DW 32 DUP(?)
STACKG

ENDS
DATASG SEGMENT PARA 'Data'
NAME1 DB 'Assemblers' ;Элементы данных
NAME2 DB 10 DUP(' ')
NAME3 DB 10 DUP(' ')
DATASG ENDS
CODESG SEGMENT PARA 'Code'
BEGIN PROC FAR ;Основная процедура
ASSUME CS:CODESG,DS:DATASG,SS:STACKSG,ES:DATASG
PUSH DS
SUB AX,AX
Слайд 30

Пример: Использование цепочечных команд PUSH AX MOV AX,DATASG MOV DS,AX MOV

Пример: Использование цепочечных команд

PUSH AX
MOV AX,DATASG
MOV DS,AX
MOV ES,AX
CALL C10MVSB ;Подпрограмма MVSB
CALL

D10MVSW ;Подпрограмма LODS
CALL E10LODS ;Подпрограмма LODS
CALL F10STOS ;Подпрограмма CMPS
CALL H10SCAS ;Подпрограмма SCAS
RET
BEGIN ENDP
Слайд 31

Пример: Использование цепочечных команд ;Использование MOVSB: C10MVSB PROC NEAR CLD LEA

Пример: Использование цепочечных команд

;Использование MOVSB:
C10MVSB PROC NEAR
CLD
LEA SI,NAME1
LEA DI,NAME2

MOV CX,10 ;Переслать 10 байтов
REP MOVSB ; из NAME1 в NAME2
RET
C10MVSB ENDP
; Использование MOVSW:
D10MVSW PROC NEAR
CLD
LEA SI,NAME2
LEA DI,NAME3
Слайд 32

Пример: Использование цепочечных команд MOV CX,05 ;Переслать 5 слов REP MOVSW

Пример: Использование цепочечных команд

MOV CX,05 ;Переслать 5 слов
REP MOVSW

; из NAME2 в NAME3
RET
D10MVSW ENDP
; Использование LODSW:
E10LODS PROC NEAR
CLD
LEA SI,NAME1 ;Загрузить первое слово
LODSW ; из NAME1 в AX
RET
E10LODS ENDP
Слайд 33

Пример: Использование цепочечных команд ; Использование STOSW: F10STOS PROC NEAR CLD

Пример: Использование цепочечных команд

; Использование STOSW:
F10STOS PROC NEAR
CLD
LEA DI,NAME3

MOV CX,05
MOV AX,2020H ;Переслать пробелы
REP STOSW ; в NAME3
RET
F10STOS endp
; Использование CMPSB:
G10CMPS PROC NEAR
CLD
MOV CX,10
LEA SI,NAME1
LEA DI,NAME2
G10CMPS ENDP
Слайд 34

Пример: Использование цепочечных команд REPE CMPSB ;Сравнить NAME1 и NAME2 JNE

Пример: Использование цепочечных команд

REPE CMPSB ;Сравнить NAME1 и NAME2
JNE G20

;Не равны?
MOV BH,01
G20: MOV CX,10
LEA SI,NAME2
LEA DI,NAME3
REPE CMPSB ;Сравнить NAME2 и NAME3
JE G30 ;Если равны, то выйти
MOV BL,02
G30: RET
G10CMPS ENDP
; Использование SCASB:
H10SCAS PROC NEAR
CLD
MOV CX,10
Слайд 35

Пример: Использование цепочечных команд LEA DI,NAME1 MOV AL,'m' ;Поиск символа 'm'

Пример: Использование цепочечных команд

LEA DI,NAME1
MOV AL,'m' ;Поиск символа 'm'
REPNE

SCASB ; в NAME1
JNE H20 ;Если не найден - выйти
MOV AH,03
H20: RET
H10SCAS ENDP
CODES ENDS
END BEGIN
Слайд 36

ASCII-ФОРМАТ Команды коррекции: AAA (ASCII Adjust for Addition - коррекция для

ASCII-ФОРМАТ

Команды коррекции:
AAA (ASCII Adjust for Addition - коррекция для сложения ASCII-кода)
AAD

(ASCII Adjust for Division - коррекция для деления ASCII-кода)
AAM (ASCII Adjust for Multiplication - коррекция для умножения ASCII-кода)
AAS (ASCII Adjust for Subtraction - коррекция для вычитания ASCII-кода)
Слайд 37

Сложение чисел в ASCII-формате CODESG SEGMENT PARA 'Code‘ ASSUME CS:CODESG,DS:CODESG,SS:CODESG ORG

Сложение чисел в ASCII-формате

CODESG SEGMENT PARA 'Code‘
ASSUME CS:CODESG,DS:CODESG,SS:CODESG
ORG 100H
BEGIN: JMP

SHORT MAIN
ASC1 DB '578‘ ;Элементы данных
ASC2 DB '694'
ASC3 DB '0000'
MAIN PROC NEAR
CLC
LEA SI,AASC1+2 ;Адреса ASCII-чисел
LEA DI,AASC2+2
LEA BX,AASC3+3
MOV CX,03 ;Выполнить 3 цикла
Слайд 38

Сложение чисел в ASCII-формате A20: MOV AH,00 ;Очистить регистр AH MOV

Сложение чисел в ASCII-формате

A20:
MOV AH,00 ;Очистить регистр AH
MOV AL,[SI]

;Загрузить ASCII-байт
ADC AL,[DI] ;Сложение (с переносом)
AAA ;Коррекция для ASCII
MOV [BX],AL ;Сохранение суммы
DEC SI
DEC DI
DEC BX
LOOP A20 ;Циклиться 3 раза
MOV [BX],AH ;Сохранить перенос
RET
MAIN ENDP
CODESG ENDS
END BEGIN
Слайд 39

Двоично-десятичный формат Виды двоично-десятичных чисел: упакованном формате - каждый байт содержит

Двоично-десятичный формат

Виды двоично-десятичных чисел:
упакованном формате - каждый байт содержит две десятичные

цифры.
неупакованный формат- каждый байт содержит одну десятичную цифру в четырех младших битах. Диапазон представления десятичного неупакованного числа в одном байте от 0 до 9.
Команды коррекции
DAA (Decimal Adjustment for Addition - десятичная коррекция для сложения)
DAS (Decimal Adjustment for Subtraction – десятичная коррекция для вычитания)
Слайд 40

Пример сложения двоично-десятичных чисел CODESG SEGMENT PARA "Code" ASSUME CS:CODESG,DS:CODESG,SS:CODESG ORG

Пример сложения двоично-десятичных чисел

CODESG SEGMENT PARA "Code"
ASSUME CS:CODESG,DS:CODESG,SS:CODESG
ORG 100H
BEGIN:

JMP SHORT MAIN
ASC1 DB '057836'
ASC2 DB '069427'
BCD1 DB '000'
BCD2 DB '000'
BCD3 DB 4 DUP(0)
MAIN PROC NEAR
LEA SI,ASC1+4 ;Инициализировать для ASC1
LEA DI,BCD1+2
CALL B10CONV ;Вызвать преобразование
Слайд 41

Пример сложения двоично-десятичных чисел LEA SI,ASC2+4 ;Инициализировать для ASC2 LEA DI,BCD2+2

Пример сложения двоично-десятичных чисел

LEA SI,ASC2+4 ;Инициализировать для ASC2
LEA DI,BCD2+2

CALL B10CONV ;Вызвать преобразование
CALL C10ADD ;Вызвать сложение
RET
MAIN ENDP
; Преобразование ASCII в BCD:
B10CONV PROC
MOV CL,04 ;Фактор сдвига
MOV DX,03 ;Число слов
В20:
MOV AX,[SI] ;Получить ASCII-пapy
XCHG AH,AL
SHL AL,CL ;Удалить тройки
SHL AX,CL ; ASCII-кода
Слайд 42

Пример сложения двоично-десятичных чисел MOV [DI],AH ;Записать BCD-цифру DEC SI DEC

Пример сложения двоично-десятичных чисел

MOV [DI],AH ;Записать BCD-цифру
DEC SI
DEC

SI
DEC DI
DEC DX
JNZ В20
RET
B10CONV ENDP
; Сложение BCD-чисел:
C10ADD PROC
XOR AН,AН ;0чистить AН
LEA SI,BCD1+2
Слайд 43

Пример сложения двоично-десятичных чисел ;Инициализация LEA DI,BCD2+2 ; BCD LEA BX,BCD3+3

Пример сложения двоично-десятичных чисел

;Инициализация
LEA DI,BCD2+2 ; BCD
LEA BX,BCD3+3 ;

адресов
MOV CX,03 ;Трехбайтные поля
CLC
С20:
MOV AL,[SI] ;Получить BCD1 (или LODSB)
ADC AL,[DI] ;Прибавить BCD2
DAA ;Десятичная коррекция
MOV [BX],AL ;3аписать в BCD3
DEC SI
Слайд 44

Пример сложения двоично-десятичных чисел DEC DI DEC BX LOOP С20 ;Цикл

Пример сложения двоично-десятичных чисел

DEC DI
DEC BX
LOOP С20 ;Цикл

3 раза
RET
C10ADD ENDP
CODESG ENDS
END BEGIN
Слайд 45

Сопроцессоры Использование сопроцессоров с различной функциональностью позволяет решать проблемы широкого круга:

Сопроцессоры

Использование сопроцессоров с различной функциональностью позволяет решать проблемы широкого круга:
обработка экономической

информации;
моделирование;
графические преобразования;
промышленное управление;
системы числового управления;
роботы;
навигация;
сбор данных и др.
Слайд 46

Сопроцессоры Два способа обмена информацией между ЦП и сопроцессором: прямое соединение

Сопроцессоры

Два способа обмена информацией между ЦП и сопроцессором:
прямое соединение входных и

выходных портов (ЦП имеет специальный интерфейс для взаимодействия с сопроцессором);
с обменом через память (обмен информацией между ЦП и сопроцессором происходит благодаря доступу сопроцессора к оперативной памяти через системную магистраль).
Слайд 47

Математический сопроцессор: основные функции

Математический сопроцессор: основные функции

Слайд 48

Программная модель сопроцессоров семейства

Программная модель сопроцессоров семейства

Слайд 49

Математический сопроцессор

Математический сопроцессор

Слайд 50

Команды пересылки данных Команды загрузки в стек (Fpu LoaD): FLD -

Команды пересылки данных

Команды загрузки в стек (Fpu LoaD):
FLD - загружает

из памяти в вершину стека ST(0) вещественное число
FILD - загружает из памяти в вершину стека ST(0) целое число
FBLD - загружает из памяти в вершину стека ST(0) двоично-десятичное число
Команды сохранения и извлечения из стека (Fpu STore and Pop):
FSTP память -> ST(0), вещественный формат
FISTP память -> ST(0), целый формат
FBSTP память -> ST(0), десятичный формат
Слайд 51

Команды пересылки данных Команды копирования данных (Fpu STore): FST память ->

Команды пересылки данных

Команды копирования данных (Fpu STore):
FST память -> ST(0),

вещественный формат
FIST память -> ST(0), целый формат
FBST память -> ST(0), десятичный формат,
Команда обмена (Fpu eXCHange):
FXCH - обмен содержимым верхушки стека ST(0) и численного регистра, указанного в качестве операнда команды
Слайд 52

Команды пересылки данных Команды загрузки констант: FLDZ 0 -> ST(0) -

Команды пересылки данных

Команды загрузки констант:
FLDZ 0 -> ST(0) - Загрузить

нуль
FLD1 1 -> ST(0) - Загрузить единицу
FLDPI ( -> ST(0) - Загрузить число ( ("пи")
FLDL2T loge10 -> ST(0) - Загрузить loge10
FLDL2E log2e -> ST(0) - Загрузить log2e
FLDLG2 log102 -> ST(0) - Загрузить log102
FLDLN2 loge2 -> ST(0) - Загрузить loge2
Слайд 53

Арифметические команды Fxxx Fxxx память Fixxx память Fxxx ST, ST(i) Fxxx

Арифметические команды

Fxxx
Fxxx память
Fixxx память
Fxxx ST, ST(i)
Fxxx ST(i),

ST
FxxP ST(i), ST
Строка "xxx" может принимать следующие значения:
ADD
SUB
SUBR
MUL
DIV
DIVR
Слайд 54

Дополнительные арифметические команды FSQRT - Извлечение квадратного корня FSCALE - Масштабирование

Дополнительные арифметические команды

FSQRT - Извлечение квадратного корня
FSCALE - Масштабирование на

степень числа 2
FPREM - Вычисление частичного остатка
FRNDINT - Округление до целого
FXTRACT - Выделение порядка числа и мантиссы
FABS - Вычисление абсолютной величины числа
FCHS - Изменение знака числа
Слайд 55

Команды сравнения чисел FCOM - Сравнение FICOM - Целочисленное сравнение FCOMP

Команды сравнения чисел

FCOM - Сравнение
FICOM - Целочисленное сравнение
FCOMP -

Сравнение и извлечение из стека
FICOMP - Целочисленное сравнение и извлечение из стека
FCOMPP - Сравнение и двойное извлечение из стека
FTST - Сравнение операнда с нулем
FXAM - Анализ операнда
Слайд 56

Значения битов кодов условия после выполнения команд сравнения Значения битов кодов

Значения битов кодов условия после выполнения команд сравнения

Значения битов кодов условия

после выполнения команды "FCOM x":
C3 = 0, C0 = 0 - ST(0) > x
C3 = 0, C0 = 1 - ST(0) < x
C3 = 1, C0 = 0 - ST(0) = x
C3 = 1, C0 = 1 - ST(0) и x не сравнимы
Значения битов кодов условия после выполнения команды " FTST":
C3=0, C0=0 - ST(0) > 0
C3=0, C0=1 - ST(0) < 0
C3=1, C0=0 - ST(0) = 0
C3=1, C0=1 - ST(0) и 0 не сравнимы
Слайд 57

Значения битов кодов условия после выполнения команд сравнения Значения битов кодов

Значения битов кодов условия после выполнения команд сравнения

Значения битов кодов условия

после команды " FXAM ":
Бит C1 =0 - положительный, =1 - отрицательный.
Бит C0 =0 - конечное число, =1 - бесконечное.
Для конечных чисел:
C3=0, C2=0 - Ненормализованное число
C3=0, C2=1 - Нормализованное число
C3=1, C2=0 - Нулевое число
C3=1, C2=1 - Число денормализовано
Для бесконечных чисел:
C3=0, C2=0 - Нечисло
C3=0, C2=1 - Бесконечное число
C3=1, C2=0 - Пустое число
C3=1, C2=1 - Пустое число
Слайд 58

Трансцендентные команды FPTAN Вычисление частичного тангенса FPATAN Вычисление частичного арктангенса FYL2X

Трансцендентные команды

FPTAN Вычисление частичного тангенса
FPATAN Вычисление частичного арктангенса
FYL2X Вычисление

y*log2(x)
FYL2XP1 Вычисление y*log2(x+1)
F2XM1 Вычисление 2x-1
FCOS Вычисление cos(x)
FSIN Вычисление sin(x)
FSINCOS Вычисление sin(x) и cos(x) одновременно
Слайд 59

Управляющие команды FNSTCW (FSTCW) FLDCW FNSTSW (FSTSW) FNSTSW AX (FSTSW AX)

Управляющие команды

FNSTCW (FSTCW)
FLDCW
FNSTSW (FSTSW)
FNSTSW AX (FSTSW AX)
FNCLEX (FCLEX)
FNINIT (FINIT)
FNSTENV

(FSTENV)
FLDENV
FNSAVE (FSAVE)
FRSTOR
FINCSTP
FDECSTP
FFREE
FNOP
FSETPM
Слайд 60

Особые значения результатов работы сопроцессора Неточный результат Переполнение Антипереполнение Деление на

Особые значения результатов работы сопроцессора

Неточный результат
Переполнение
Антипереполнение
Деление на нуль
Недействительная операция
Денормализованный операнд
Обработка особых

случаев
Первый механизм основан на генерации так называемого прерывания особого случая (INT 10h).
При втором способе обработки ошибок все особые случаи маскируются
Слайд 61

Пример ввода вещественного числа в математический сопроцессор (числа не более 1000,

Пример ввода вещественного числа в математический сопроцессор (числа не более 1000,

количество знаков после запятой не больше 4)

.286
.model small
.data
buf_st db 10,0
buf db 10 dup (0)
c dw 0 ;целая часть числа
d dw 0 ;дробная часть числа
p dw 1 ;порядок числа
res dd ?
.stack 128
.code
.startup

Слайд 62

Продолжение примера mov ah, 0ah lea dx, buf_st int 21h lea

Продолжение примера

mov ah, 0ah
lea dx, buf_st
int 21h

lea si,[buf]
l_celoe:
cmp byte ptr [si], 13
je l_end
cmp byte ptr [si], '.'
je l_drob
mov bl, [si]
sub bl, 30h
Слайд 63

Продолжение примера mov bh, 0 mov cx, 10 mov ax, c

Продолжение примера

mov bh, 0
mov cx, 10
mov

ax, c
mul cx
add ax, bx
mov c, ax
inc si
jmp l_celoe
Слайд 64

Продолжение примера l_drob: inc si cmp byte ptr [si], 13 je

Продолжение примера

l_drob:
inc si
cmp byte ptr [si], 13

je l_end
mov bl, [si]
sub bl, 30h
mov bh, 0
mov cx, 10
Слайд 65

Продолжение примера mov ax, d mul cx add ax, bx mov

Продолжение примера

mov ax, d
mul cx
add ax,

bx
mov d, ax
mov ax, p
mul cx
mov p, ax
jmp l_drob
Слайд 66

Продолжение примера l_end: finit fild d fidiv p fiadd c fst

Продолжение примера

l_end:
finit
fild d
fidiv p
fiadd c
fst

res
fwait
mov ax, 4c00h
int 21h
end
Слайд 67

ТЕКСТОВЫЙ (АЛФАВИТНО-ЦИФРОВОЙ) РЕЖИМ

ТЕКСТОВЫЙ (АЛФАВИТНО-ЦИФРОВОЙ) РЕЖИМ

Слайд 68

Байт-атрибут Фон Текст Атрибут: BL R G B I R G

Байт-атрибут

Фон Текст
Атрибут: BL R G B I R G B

Номера битов: 7 6 5 4 3 2 1 0
Текст по фону Бит: 7 6 5 4 3 2 1 0
BL R G B I R G B Шест.
Черный по черному 0 0 0 0 0 0 0 0 00
Синий по черному 0 0 0 0 0 0 0 1 01
Красный по синему 0 0 0 1 0 1 0 0 14
Голубой по зеленому 0 0 1 0 0 0 1 1 23
Светло-сиреневый по белому 0 1 1 1 1 1 0 1 7D
Серый по зеленому, мигание 1 0 1 0 1 0 0 0 A8
Слайд 69

Пример Вывод на экран пяти мигающих звездочек светло-зеленым цветом на сиреневом

Пример

Вывод на экран пяти мигающих звездочек светло-зеленым цветом на сиреневом фоне

:
MOV AH,09 ;Функция вывода на экран
MOV AL,'*' ;Выводимый символ
MOV BH,00 ;Страница 0
MOV BL,0DAH ;Атрибут цвета
MOV CX,05 ;Число повторений
INT 10H ;Вызвать BIOS
Слайд 70

ГРАФИЧЕСКИЙ РЕЖИМ Цветной графический адаптер (CGA) имеет три степени разрешения: Низкое

ГРАФИЧЕСКИЙ РЕЖИМ

Цветной графический адаптер (CGA) имеет три степени разрешения:
Низкое разрешение (не

поддерживается в ROM) обеспечивает вывод 100 строк по 160 точек (т.е. четыре бита на точку). Каждая точка может иметь один из 16 стандартных цветов.
Среднее разрешение для стандартной цветной графики обеспечивает 200 строк по 320 точек. Каждый байт в этом случае представляет четыре точки (т.е. два бита на точку).
Высокое разрешение обеспечивает 200 строк по 640 точек. Каждый байт здесь представляет 8 точек (т.е. один бит на точку). Нулевое значение бита дает черный цвет точки, единичное - белый.
Слайд 71

РЕЖИМ СРЕДНЕГО РАЗРЕШЕНИЯ Байт: |C1 C0|C1 C0|C1 C0|C1 C0| Пиксели: 0

РЕЖИМ СРЕДНЕГО РАЗРЕШЕНИЯ

Байт: |C1 C0|C1 C0|C1 C0|C1 C0|
Пиксели: 0

1 2 3
C1 C0 Палитра 0 Палитра 1
0 0 фон фон
0 1 зеленый голубой
1 0 красный сиреневый
1 1 коричневый белый
Слайд 72

Прерывание BIOS INT 10H для графики AH=00: Установка режима MOV AH,00

Прерывание BIOS INT 10H для графики

AH=00: Установка режима
MOV AH,00 ;Функция

установки режима
MOV AL,04 ;Разрешение 320х200
INT 10H
AH=0BH: Установка цветовой палитры
MOV AH,0BH ;Функция установки цвета
MOV BH,01 ;Выбор палитры
MOV BL,00 ; 0 (зеленый, красный, корич.)
INT 10H ;Вызвать BIOS
AH=0CH: Вывод точки на экран
AH=0DH: Чтение точки с экрана.
Слайд 73

Пример: установка графического режима и отображение цвета CODESG SEGMENT PARA 'Code'

Пример: установка графического режима и отображение цвета

CODESG SEGMENT PARA 'Code'
ASSUME

CS:CODESG,DS:CODESG,SS:CODESG
ORG 100H
MAIN PROC NEAR
MOV AH,00 ;Установка режима графики
MOV AL,0DH ; для EGA (CGA=04)
MOV AH,0BH ;Установить палитру
MOV BH,00 ;Фон
MOV BL,02 ;Зеленый
INT 10H
Слайд 74

Пример: установка графического режима и отображение цвета MOV BX,00 ;Начальные цвет,

Пример: установка графического режима и отображение цвета

MOV BX,00 ;Начальные цвет,

MOV CX,00 ; столбец
MOV DX,00 ; и строка
A50:
MOV AH,0CH ;Функция вывода точки
MOV AL,BL ;Установить цвет
INT 10H ;BX, CX, и DX сохраняются
INC CX ;Увеличить столбец
CMP CX,320 ;Столбец 320?
JNE A50 ; нет - цикл,
Слайд 75

Пример: установка графического режима и отображение цвета MOV CX,00 ; да

Пример: установка графического режима и отображение цвета

MOV CX,00 ; да

- сбросить столбец
INC BL ;Изменить цвет
INC DX ;Увеличить строку
CMP DX,40 ;Строка 40?
JNE A50 ; нет - цикл,
RET ; да - завершить
MAIN ENDP
CODESG ENDS
END MAIN
Слайд 76

Дисковая память: Расширенные функции DOS Работа с файлами. Коды ошибок 01

Дисковая память: Расширенные функции DOS

Работа с файлами.
Коды ошибок
01 Ошибка номера функции
02

Файл не найден
03 Путь доступа не найден
04 Открыто слишком много файлов
05 Нет доступа (Операция отвергнута)
06 Ошибка файлового номера
07 Блок управления памятью разрушен
08 Недостаточно памяти
09 Ошибка адреса блока памяти
10 Ошибка оборудования
11 Ошибка формата
12 Ошибка кода доступа
13 Ошибка данных
15 Ошибка дисковода
16 Попытка удалить оглавление
17 Другое устройство ?
18 Нет больше файлов
Слайд 77

Работа с файлами AH=3Сh: Создание файла MOV AH,3CH ;Запрос на создание

Работа с файлами

AH=3Сh: Создание файла
MOV AH,3CH ;Запрос на создание
MOV CX,00 ;

обычного файла
LEA DX,PATHNM1 ;ASCIIZ строка
INT 21H ;Вызов DOS
JC error ;Переход по ошибке
MOV H1,AX ;Сохранение файлового номера в DW
AH=40h: Запись файла
HANDLE1 DW ?
OUTREC DB 256 DUP (' ')
MOV AH,40H ;Запрос записи
MOV BX,HANDLE1 ;Файловый номер
MOV CX,256 ;Длина записи
LEA DX,OUTREC ;Адрес области вывода
INT 21H ;Вызов DOS
JC error2 ;Проверка на ошибку
CMP AX,256 ;Все байты записаны?
JNE error3
Слайд 78

Работа с файлами AH=3Eh: Закрытие файла MOV AH,3EH ;Запрос на закрытие

Работа с файлами

AH=3Eh: Закрытие файла
MOV AH,3EH ;Запрос на закрытие файла
MOV BX,HANDLE1

;Файловый номер
INT 21H ;Вызов DOS
AH=3Dh: Открытие файла
Коды доступа:
0 Открыть файл только для ввода
1 Открыть файл только для вывода
2 Открыть файл для ввода и вывода
Слайд 79

Работа с файлами Пример MOV AH,3DH ;Запрос на открытие MOV AL,00

Работа с файлами

Пример
MOV AH,3DH ;Запрос на открытие
MOV AL,00 ;Только чтение

LEA DX,PATHNM1 ;Строка в формате ASCIIZ
INT 21H ;Вызов DOS
JC error4 ;Выход по ошибке
MOV HANDLE2,AX ;Сохранение номера в DW
AH=3Fh: Чтение файла
Слайд 80

Пример чтения из файла STACKSG SEGMENT PARA STACK 'Stack' DW 80

Пример чтения из файла

STACKSG SEGMENT PARA STACK 'Stack'
DW 80 DUP(?)
STACKSG

ENDS
DATASG SEGMENT PARA 'Data'
ENDCDE DB 00
HANDLE DW ?
IOAREA DB 32 DUP(' ')
PATHNAM DB 'D:\NAMEFILE.SRT',0
OPENMSG DB '*** Open error ***', 0DH, 0AH
READMSG DB '*** Read error ***', 0DH, 0AH
ROW DB 00
DATASG ENDS
Слайд 81

Пример чтения из файла BEGIN PROC FAR ASSUME CS:CODESG,DS:DATASG,SS:STACKSG,ES:DATASG PUSH DS

Пример чтения из файла

BEGIN PROC FAR
ASSUME CS:CODESG,DS:DATASG,SS:STACKSG,ES:DATASG
PUSH DS
SUB

AX,AX
PUSH AX
MOV AX,DATASG
MOV DS,AX
MOV ES,AX
MOV AX,0600H
CALL Q10SCR ;Очистить экран
CALL Q20CURS ;Установить курсор
CALL E100PEN ;Открыть файл,
Слайд 82

Пример чтения из файла CMP ENDCDE,00 ;Ошибка открытия? JNZ A90 ;

Пример чтения из файла

CMP ENDCDE,00 ;Ошибка открытия?
JNZ A90 ;

да - завершить программу
A20LOOP:
CALL F10READ ;Чтение записи с диска
CMP ENDCDE,00 ;Ошибка чтения?
JNZ A90 ; да - выйти,
CALL G10DISP ; нет - выдать имя,
JMP A20LOOP ; и продолжить
A90: RET
BEGIN ENDP
Слайд 83

Пример чтения из файла ; Открытие файла: E100PEN PROC NEAR MOV

Пример чтения из файла

; Открытие файла:
E100PEN PROC NEAR
MOV AH,3DH ;Функция

открытия
MOV CX,00 ;Нормальные атрибуты
LEA DX,PATHNAM
INT 21H
JC E20 ;Ошибка открытия?
MOV HANDLE,AX ; нет - сохранить
RET ; файловый номер
E20:
MOV ENDCDE,01 ; да - выдать
LEA DX,OPENMSG ; сообщение об ошибке
CALL X10ERR
RET
E100PEN ENDP
Слайд 84

Пример чтения из файла ; Чтение дисковой записи: F10READ PROC NEAR

Пример чтения из файла

; Чтение дисковой записи:
F10READ PROC NEAR
MOV AX,3FH

;Функция чтения
MOV BX,HANDLE
MOV CX,32 ;30 для имени, 2 для CR/LF
LEA DX,IOAREA
INT 21H
JC F20 ;Ошибка при чтении?
CMP AX,00 ;Конец файла?
JE F30
CMP IOAREA,1AH ;Маркер конца файла (EOF)?
JE F30 ; да - выйти
RET
Слайд 85

Пример чтения из файла F20: LEA DX,READMSG ; нет - выдать

Пример чтения из файла

F20:
LEA DX,READMSG ; нет - выдать
CALL

X10ERR ; сообщение об ошибке
F30:
MOV ENDCDE,01 ;Код завершения
F90: RET
F10READ ENDP
; Вывод имени на экран:
G10DISP PROC NEAR
MOV AH,40H ;Функция вывода на экран
MOV BX,01 ;Установить номер
MOV CX,32 ; и длину
LEA DX,IOAREA
INT 21H
Слайд 86

Пример чтения из файла CMP ROW,20 ;Последняя строка экрана? JEA G90

Пример чтения из файла

CMP ROW,20 ;Последняя строка экрана?
JEA G90

; да - обойти
INC ROW
RET
G90:
MOV AX,0601H
CALL Q10SCR ;Прокрутка (скроллинг)
CALL Q20CURS ;Установить курсор
RET
G10DISP ENDP
Слайд 87

Пример чтения из файла ; Прокрутка (скроллинг) экрана: ; ---------------------------- Q10SCR

Пример чтения из файла

; Прокрутка (скроллинг) экрана:
; ----------------------------
Q10SCR PROC NEAR ;в

AX - адрес элемента
MOV BH,1EH ;Установить цвет
MOV CX,0000
MOV DX,184FH ;Функция прокрутки
INT 10H
RET
Q10SCR ENDP
Слайд 88

Пример чтения из файла ; Установка курсора: Q20CURS PROC NEAR MOV

Пример чтения из файла

; Установка курсора:
Q20CURS PROC NEAR
MOV AH,02 ;Функция

установки курсора
MOV BH,00 ; курсор
MOV DH,ROW ; строка
MOV DL,00 ; столбец
INT 10H
RET
Q20CURS ENDP