Similar presentations:
Программная модель микропроцессора INTEL 8080, регистры, форматы и системы команд, методы адресации
1. Тема: Введение. Цели и задачи дисциплины. Программная модель микропроцессора INTEL 8080, регистры, форматы и системы команд, методы адресации
2. Введение
Язык ассемблера - это символическое представлениемашинного языка.
Архитектура ЭВМ - это абстрактное представление ЭВМ,
которое отражает ее структурную, схематичную и
логическую организацию. Это понятие включает в себя
следующее:
Структурную схему ЭВМ
Средства и способы доступа к элементам структурной
схемы ЭВМ
Организация и разрядность ЭВМ
Набор и доступность регистров
Организацию и способы адресации памяти
Способы представления и форматы данных ЭВМ
Набор машинных команд ЭВМ
Форматы машинных команд
Обработку нештатных команд
3. Программная модель Intel (Pentium III)
4. Регистры
Регистрыэто
память
микропроцессоров.
Программную
модель
микропроцессора
Intel
составляют:
Пространство адресуемой памяти (для Pentium III- 2 36- 1
байт)
Набор регистров для хранения данных общего
назначения
Набор сегментных регистров
Набор регистров состояния и управления
Набор регистров вычислений с плавающей точкой
Набор
регистров
целочисленного
ММХрасширения,
отображенных
на
регистры
сопроцессоров
Набор регистров ММХ- расширения с плавающей точкой
Программный стек
5. Регистры общего назначения
еах (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
Указатель команд — это регистр eip/ip. В этом
регистре всегда находится адрес команды,
которая должна быть выполнена следующей.
Все флаги можно разделить на три группы:
8 флагов состояния.
1 флаг управления (df).
5 системных флагов.
10. Структура программы на ассемблере
Предложения ассемблера бывают четырех типов:• команды, или инструкции, представляющие
собой
символические
аналоги машинных
команд
• макрокоманды - оформляемые определенным
образом предложения текста программы
• директивы,
являющиеся
указанием
транслятору
ассемблера
на
выполнения
некоторых действий
• строки
комментариев, содержащие любые
символы
11. Структура программы на ассемблере
Формат команды ассемблера:[Метка:] Мнемокод [операнд] [;комментарий]
Метка - служит для присвоения имени команде. На
эту метку можно будет ссылаться из любой части
программы.
Комментарии — должны быть отделены от
команд ;. Это комментарии к команде, программе и
блоку команд.
Мнемокод - это имя команды МП.
Поле операндов — в поле операндов может быть0,
1 или 2 операнда в зависимости от типа команды.
12. Классификация операндов
Постоянные и непосредственные операндыMOV ax,5
Адресные операнды
MOV AX,DS:0000H
Перемещаемые операнды
lea si,a; a - перемещаемый операнд
Счетчик адреса ($)
Jmp $+3
Регистровый операнд
MOV ax,cx
Базовый и индексный операнды
MOV ax,[bx+8]
Структурные операнды
13. Режимы адресации
Режимыадресации
Регистровый
Непосредственный
Прямой
Формат операнда
Регистр сегмента
регистр (кроме ip)
данные
сдвиг метка
Не используется
Не используется
DS DS
Косвенный
регистровый
[BX] [BP] [DI] [SI]
DS SS DS DS
По базе
[BX]+сдвиг [BP]+ сдвиг
DS CS
Прямой
индексированием
По базе с
индексированием
[DI]+сдвиг [SI]+сдвиг
DS DS
[DI][SI]+сдвиг
[BX][SI]+сдвиг
[BP][SI]+сдвиг
[BP][DI]+сдвиг
DS DS
SS SS
14. Псевдооператор определения сегмента
Формат псеводооператора следующийимя_сег 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 - Резервирует один или несколько байт.
Формат: [имя] DB выражение[,…]
DW - Резервирует двухбайтовые слова.
Формат: [имя] DW выражение[,…]
DD - Резервирует четырехбайтовые слова.
Формат: [имя] DD выражение[,…]
DF - Резервирует шестибайтовые слова.
Формат: [имя] DF выражение[,…]
DP - Резервирует шестибайтовые слова.
Формат: [имя] DP выражение[,…]
DQ - Резервирует восьмибайтовые слова.
Формат: [имя] DQ выражение[,…]
DT - Резервирует десятибайтовые слова.
Формат: [имя] DT выражение[,…]
16. Команда пересылки данных и работы со стеком
Команда пересылки данных:MOV<операнд-приемник>,<операндисточник>
Команды работы со стеком:
PUSH источник
POP приемник
PUSHA и PUSHAW
POPA, POPAW
PUSHF
PUSHFW
POPF и POPFW
17. Команды пересылки данных
Команда обмена:XCHG операнд1, операнд2
Работа с адресами и указателями:
lea приемник, источник
mov приемник, offset источник
lds приемник, источник
les приемник, источник
lgs приемник, источник
lfs приемник, источник
lss приемник, источник
Команды ввода-вывода в порт:
in аккумулятор, порт
out порт, аккумулятор
18. Арифметические команды
Арифметические команды работают с двумя типами чисел:целыми двоичными числами (знаковыми и беззнаковыми)
целыми десятичными числами
Целые двоичные числа - это число, закодированное в
двоичной системе счисления.
Формат двоичных чисел: числоb (01001100b)
Десятичные
числа
специализированный
вид
представления числовой информации, в основу которого
положен принцип (BCD - Binary-Coded Decimal).
Десятичные числа могут представляться в двух форматах и
заканчиваются буквой D:
упакованном формате - каждый байт содержит две
десятичные цифры.
неупакованный формат- каждый байт содержит одну
десятичную цифру в четырех младших битах.
19. Арифметические команды
Команда сложенияADD приемник, источник
приемник +источник
Команда вычитания
SUB приемник, источник
приемник- источник
Команды умножения
MUL источник
Команда деления
DIV источник
приемник =
приемник=
IMUL источник
IDIV источник
20. Команды манипулирования битами
Логические командыand источник, приемник
оr источник, приемник
хоr источник, приемник
test источник, приемник
not операнд
Команды сдвига
shl оп., кол-во_сдвигов
sal оп., кол-во_сдвигов
rol оп., кол-во_сдвигов
rcl оп., кол-во_сдвигов
shr оп., кол-во_сдвигов
sar оп., кол-во_сдвигов
ror оп., кол-во_сдвигов
rcr оп., кол-во_сдвигов
21. Команда сравнения
СМР операнд1, операнд2Типы
операндов
Любые
Со знаком
Без знака
Мнемокод
команды
условного
перехода
je
jne
jl/jnge
jle/jng
jg/jnle
jge/jnl
jb/jnae
jbe/jna
ja/jnbe
jae/jnb
Критерий условного
перехода
операнд_1= операнд_2
операнд_1<> операнд_2
операнд_1< операнд_2
операнд_1<= операнд_2
операнд_1> операнд_2
операнд_1>= операнд_2
операнд_1< операнд_2
операнд_1<= операнд_2
операнд_1> операнд_2
операнд_1>= операнд_2
Значения флагов
для
осуществления
перехода
zf=1
zf=0
sf<>of
sf<>of or zf=1
sf=of and zf=0
sf=of
cf=1
cf=1 or zf=1
cf=0 and zf=0
cf=0
22. Функции работы с клавиатурой
Прерывание int21h01h – ввод с клавиатуры
02h – вывод на дисплей
08h – консольный ввод без эха
09h – вывод строки на экран
0ah – буферизированный ввод строки
0bh – проверить статус ввода
0ch – ввод с очисткой
3fh – чтение файла
Прерывание int10h
00h - прочитать символ с клавиатуры
01h - получить состояние клавиатуры
02h - получить состояние флагов клавиатуры
03h - управление режимом автоповтора
04h - включить/выключить звуковой сигнал клавиш
05h - поместить символ в буфер клавиатуры
10h - прочитать символ с расширенной клавиатуры
11h - получить состояние расширенной клавиатуры
12h - получить состояние флагов расширенной клавиатуры
23. Пример работы с клавиатурой
code segmentassume 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 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 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 -переслать один байт или одно слово из
одной области памяти в другую;
LODS - загрузить из памяти один байт в регистр AL
или одно слово в регистр AX;
STOS - записать содержимое регистра AL или AX в
память;
CMPS - сравнить содержимое двух областей памяти,
размером в один байт или в одно слово;
SCAS - сравнить содержимое регистра AL или AX с
содержимым памяти.
Префикс REP позволяет этим командам обрабатывать
строки любой длины.
27. Регистры, участвующие в цепочечных командах
КомандаОперанды
MOVS
LODS
DI,SI
MOVSB
AL,SI или LODSB
AX,SI
DI,AL или STOSB
DI,AX
SI,DI
CMPSB
DI,AL или SCASB
DI,AX
STOS
CMPS
SCAS
Байт
Слово
MOVSW
LODSW
STOSW
CMPSW
SCASW
28. Модификации префикса REP
REP -повторять операцию, пока CX не равно 0;
REPZ или REPE - повторять операцию, пока флаг
ZF показывает "равно или ноль". Прекратить
операцию при флаге ZF, указывающему на не равно
или не ноль или при CX равном 0;
REPNE или REPNZ - повторять операцию, пока
флаг ZF показывает "не равно или не ноль".
Прекратить операцию при флаге ZF,
указывающему на "равно или нуль" или при CX
равным 0.
29. Пример: Использование цепочечных команд
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. Пример: Использование цепочечных команд
PUSHMOV
MOV
MOV
CALL
CALL
CALL
CALL
CALL
RET
BEGIN
AX
AX,DATASG
DS,AX
ES,AX
C10MVSB
D10MVSW
E10LODS
F10STOS
H10SCAS
ENDP
;Подпрограмма
;Подпрограмма
;Подпрограмма
;Подпрограмма
;Подпрограмма
MVSB
LODS
LODS
CMPS
SCAS
31. Пример: Использование цепочечных команд
;Использование 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. Пример: Использование цепочечных команд
MOVCX,05
REP MOVSW
;Переслать 5 слов
; из 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
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 CMPSBJNE
MOV
G20:
;Сравнить NAME1 и NAME2
G20
;Не равны?
BH,01
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. Пример: Использование цепочечных команд
LEADI,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-кода)
AAD (ASCII Adjust for Division - коррекция для
деления ASCII-кода)
AAM (ASCII Adjust for Multiplication - коррекция
для умножения ASCII-кода)
AAS (ASCII Adjust for Subtraction - коррекция для
вычитания ASCII-кода)
37. Сложение чисел в ASCII-формате
CODESGASSUME
ORG
BEGIN:
ASC1 DB
ASC2 DB
ASC3 DB
MAIN
CLC
LEA
LEA
LEA
MOV
SEGMENT PARA 'Code‘
CS:CODESG,DS:CODESG,SS:CODESG
100H
JMP
SHORT MAIN
'578‘ ;Элементы данных
'694'
'0000'
PROC
NEAR
SI,AASC1+2
DI,AASC2+2
BX,AASC3+3
CX,03
;Адреса ASCII-чисел
;Выполнить 3 цикла
38. Сложение чисел в ASCII-формате
A20:MOV
MOV
ADC
AH,00
AL,[SI]
AL,[DI]
;Очистить регистр AH
;Загрузить ASCII-байт
;Сложение (с
переносом)
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. Пример сложения двоично-десятичных чисел
CODESGSEGMENT
ASSUME
ORG
BEGIN: JMP
ASC1
DB
ASC2
DB
BCD1
DB
BCD2
DB
BCD3
DB
MAIN
PROC
LEA SI,ASC1+4
LEA DI,BCD1+2
CALL
B10CONV
PARA "Code"
CS:CODESG,DS:CODESG,SS:CODESG
100H
SHORT MAIN
'057836'
'069427'
'000'
'000'
4 DUP(0)
NEAR
;Инициализировать для ASC1
;Вызвать преобразование
41. Пример сложения двоично-десятичных чисел
LEALEA
CALL
SI,ASC2+4
;Инициализировать для ASC2
DI,BCD2+2
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
SI
DEC
DI
DEC
DX
JNZ
В20
RET
B10CONV ENDP
;
Сложение BCD-чисел:
C10ADD PROC
XOR
AН,AН
;0чистить AН
LEA
SI,BCD1+2
43. Пример сложения двоично-десятичных чисел
;ИнициализацияLEA
LEA
MOV
поля
С20:
MOV
LODSB)
ADC
DAA
MOV
DI,BCD2+2
BX,BCD3+3
CX,03
; BCD
; адресов
;Трехбайтные
CLC
AL,[SI]
AL,[DI]
[BX],AL
DEC
SI
;Получить BCD1 (или
;Прибавить BCD2
;Десятичная коррекция
;3аписать в BCD3
44. Пример сложения двоично-десятичных чисел
DECDI
DEC
LOOP
;Цикл 3 раза
RET
C10ADD ENDP
BX
С20
CODESG ENDS
END
BEGIN
45. Сопроцессоры
Использование сопроцессоров с различнойфункциональностью позволяет решать проблемы
широкого круга:
обработка экономической информации;
моделирование;
графические преобразования;
промышленное управление;
системы числового управления;
роботы;
навигация;
сбор данных и др.
46. Сопроцессоры
Два способа обмена информацией между ЦПи сопроцессором:
прямое соединение входных и выходных
портов (ЦП имеет специальный интерфейс
для взаимодействия с сопроцессором);
с обменом через память (обмен
информацией между ЦП и сопроцессором
происходит благодаря доступу сопроцессора
к оперативной памяти через системную
магистраль).
47. Математический сопроцессор: основные функции
48. Программная модель сопроцессоров семейства
49. Математический сопроцессор
Режимы округления сопроцессоров Intel x87Пример 1
Пример 2
RC Режим
1,000E 1 < 2,23E 0 < 1,000E 1 < 2,05E
2
00 Округление к
ближайшему (или
четному)
01 Округление вниз (к ∞)
10 Округление вверх (к
+∞)
11 Округление к нулю
(усечение)
10
<
1,001E21-1,001E21 < 2,05E100 < -1,000E21
2
100
1,001E21
-1,001E21 <
-2,23E100 <
-1,000E21
2,23E100 ≈ 1,001E21 2,05E100 ≈ 1,000E21
-2,23E100 ≈ -1,001E21 -2,05E100 ≈ -1,000E21
2,23E100 ≈ 1,000E21 2,05E100 ≈ 1,000E21
-2,23E100 ≈ -1,001E21 -2,05E100 ≈ -1,001E21
2,23E100 ≈ 1,001E21- 2,05E100 ≈ 1,001E212,23E100 ≈ -1,000E21 2,05E100 ≈ -1,000E21
2,23E100 ≈ 1,000E21- 2,05E100 ≈ 1,000E212,23E100 ≈ -1,000E21 2,05E100 ≈ -1,000E21
50. Команды пересылки данных
Команды загрузки в стек (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 память -> ST(0), вещественный формат
FIST память -> ST(0), целый формат
FBST память -> ST(0), десятичный формат,
Команда обмена (Fpu eXCHange):
FXCH - обмен содержимым верхушки стека ST(0)
и численного регистра, указанного в качестве
операнда команды
52. Команды пересылки данных
Команды загрузки констант: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. Арифметические команды
FxxxFxxx память
Fixxx память
Fxxx ST, ST(i)
Fxxx ST(i), ST
FxxP ST(i), ST
Строка "xxx" может принимать следующие значения:
ADD
SUB
SUBR
MUL
DIV
DIVR
54. Дополнительные арифметические команды
FSQRT - Извлечение квадратного корняFSCALE - Масштабирование на степень
числа 2
FPREM - Вычисление частичного остатка
FRNDINT - Округление до целого
FXTRACT - Выделение порядка числа и
мантиссы
FABS - Вычисление абсолютной величины
числа
FCHS - Изменение знака числа
55. Команды сравнения чисел
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 Вычисление 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)FNSAVE (FSAVE)
FLDCW
FRSTOR
FNSTSW (FSTSW)
FINCSTP
FNSTSW AX (FSTSW AX) FDECSTP
FNCLEX (FCLEX)
FFREE
FNINIT (FINIT)
FNOP
FNSTENV (FSTENV)
FSETPM
FLDENV
60. Особые значения результатов работы сопроцессора
Неточный результатПереполнение
Антипереполнение
Деление на нуль
Недействительная операция
Денормализованный операнд
Обработка особых случаев
1) Первый механизм основан на генерации так
называемого прерывания особого случая (INT 10h).
2) При втором способе обработки ошибок все особые
случаи маскируются
61. Пример ввода вещественного числа в математический сопроцессор (числа не более 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, 0ahlea 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, 0mov 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_end
mov bl, [si]
sub bl, 30h
mov bh, 0
mov cx, 10
65. Продолжение примера
mov ax, dmul 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 res
fwait
mov ax, 4c00h
int 21h
end
67. ТЕКСТОВЫЙ (АЛФАВИТНО-ЦИФРОВОЙ) РЕЖИМ
ТЕКСТОВЫЙ (АЛФАВИТНОЦИФРОВОЙ) РЕЖИМЧерный
Синий
Зеленый
Голубой
Красный
Сиреневый
IRGB
0 0 00
0 0 01
0 0 10
0 0 11
0 1 00
0 1 01
Коричневый
Белый
0 110
0 110
IRGB
Серый
10 0 0
Ярко-синий
10 0 1
Ярко-зеленый 1 0 1 0
Ярко-голубой 1 0 1 1
Ярко-красный 1 1 0 0
Ярко11 0 1
сиреневый
Желтый
11 1 0
Ярко-белый
11 1 1
68. Байт-атрибут
ФонТекст
Атрибут:
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
Синий по черному
0 0 0 0 0 0 0 1
Красный по синему
0 0 0 1 0 1 0 0
Голубой по зеленому
0 0 1 0 0 0 1 1
Светло-сиреневый по белому 0 1 1 1 1 1 0 1
Серый по зеленому, мигание 1 0 1 0 1 0 0 0
Шест.
00
01
14
23
7D
A8
69. Пример
Вывод на экран пяти мигающих звездочек светлозеленым цветом на сиреневом фоне :MOV AH,09
;Функция вывода на экран
MOV AL,'*'
;Выводимый символ
MOV BH,00
;Страница 0
MOV BL,0DAH
;Атрибут цвета
MOV CX,05
;Число повторений
INT 10H
;Вызвать BIOS
70. ГРАФИЧЕСКИЙ РЕЖИМ
Цветной графический адаптер (CGA) имеет три степениразрешения:
Низкое разрешение (не поддерживается в ROM)
обеспечивает вывод 100 строк по 160 точек (т.е.
четыре бита на точку). Каждая точка может иметь
один из 16 стандартных цветов.
Среднее разрешение для стандартной цветной
графики обеспечивает 200 строк по 320 точек.
Каждый байт в этом случае представляет четыре
точки (т.е. два бита на точку).
Высокое разрешение обеспечивает 200 строк по 640
точек. Каждый байт здесь представляет 8 точек (т.е.
один бит на точку). Нулевое значение бита дает
черный цвет точки, единичное - белый.
71. РЕЖИМ СРЕДНЕГО РАЗРЕШЕНИЯ
Байт: |C1 C0|C1 C0|C1 C0|C1 C0|Пиксели: 0
1
2
3
C1 C0
0 0
0 1
1 0
1 1
Палитра 0
фон
зеленый
красный
коричневый
Палитра 1
фон
голубой
сиреневый
белый
72. Прерывание 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'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. Пример: установка графического режима и отображение цвета
MOVBX,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. Пример: установка графического режима и отображение цвета
MOVCX,00
; да - сбросить столбец
INC BL
;Изменить цвет
INC DX
;Увеличить строку
CMP DX,40
;Строка 40?
JNE A50
; нет - цикл,
RET
; да - завершить
MAIN ENDP
CODESG ENDS
END MAIN
76. Дисковая память: Расширенные функции DOS
Работа с файлами.Коды ошибок
01 Ошибка номера
функции
02 Файл не найден
03 Путь доступа не найден
04 Открыто слишком
много файлов
05 Нет доступа (Операция
отвергнута)
06 Ошибка файлового
номера
07 Блок управления
памятью разрушен
08 Недостаточно памяти
09 Ошибка адреса блока
памяти
10 Ошибка оборудования
11 Ошибка формата
12 Ошибка кода доступа
13 Ошибка данных
15 Ошибка дисковода
16 Попытка удалить
оглавление
17 Другое устройство ?
18 Нет больше файлов
77. Работа с файлами
AH=3Сh: Создание файлаOUTREC DB 256 DUP (' ')
MOV AH,3CH
;Запрос на MOV AH,40H
;Запрос
создание
записи
MOV CX,00
; обычного MOV BX,HANDLE1
файла
;Файловый номер
LEA DX,PATHNM1 ;ASCIIZ MOV CX,256
;Длина
строка
записи
INT 21H
;Вызов DOS
LEA DX,OUTREC ;Адрес
области вывода
JC error
;Переход по
ошибке
INT 21H
;Вызов DOS
MOV H1,AX ;Сохранение
JC error2
;Проверка на
файлового номера в DW
ошибку
CMP AX,256
;Все байты
записаны?
AH=40h: Запись файла
JNE error3
HANDLE1 DW ?
78. Работа с файлами
AH=3Eh: Закрытие файлаMOV AH,3EH
;Запрос на закрытие файла
MOV BX,HANDLE1 ;Файловый номер
INT 21H
;Вызов DOS
AH=3Dh: Открытие файла
Коды доступа:
0 Открыть файл только для ввода
1 Открыть файл только для вывода
2 Открыть файл для ввода и вывода
79. Работа с файлами
Пример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 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 PROCASSUME
FAR
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. Пример чтения из файла
CMPENDCDE,00
;Ошибка открытия?
JNZ A90
; да - завершить программу
A20LOOP:
CALL F10READ
;Чтение записи с диска
CMP ENDCDE,00
;Ошибка чтения?
JNZ A90
; да - выйти,
CALL G10DISP
; нет - выдать имя,
JMP A20LOOP
;
и продолжить
A90: RET
BEGIN ENDP
83. Пример чтения из файла
;Открытие файла:
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
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 ; нет - выдать
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. Пример чтения из файла
CMPROW,20
;Последняя строка экрана?
JEA G90
; да - обойти
INC ROW
RET
G90:
MOV AX,0601H
CALL Q10SCR
;Прокрутка (скроллинг)
CALL Q20CURS
;Установить курсор
RET
G10DISP ENDP
87. Пример чтения из файла
;Прокрутка (скроллинг) экрана:
;
---------------------------Q10SCR PROC NEAR
;в AX - адрес
элемента
MOV BH,1EH
;Установить цвет
MOV CX,0000
MOV DX,184FH
;Функция прокрутки
INT 10H
RET
Q10SCR ENDP
88. Пример чтения из файла
;Установка курсора:
Q20CURS PROC NEAR
MOV AH,02
;Функция установки
курсора
MOV BH,00
; курсор
MOV DH,ROW
; строка
MOV DL,00
; столбец
INT 10H
RET
Q20CURS ENDP
89. Пример чтения из файла
;Вывод сообщения об ошибке:
X10ERR PROC NEAR
MOV AH,40H
;в DX - адрес сообщения
MOV BX,01
;Номер
MOV CX,20
;Длина сообщения
INT 21H
RET
X10ERR ENDP
CODESG ENDS
END
BEGIN