Программная модель микропроцессора 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Режимы адресации


Слайд 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 источник IMUL источник
Команда деления
DIV источник IDIV источник


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

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

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


Слайд 22Функции работы с клавиатурой
Прерывание 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
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Регистры, участвующие в цепочечных командах


Слайд 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Пример: Использование цепочечных команд
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

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 ; из 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 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'
REPNE SCASB ; в NAME1
JNE H20 ;Если не найден - выйти
MOV AH,03
H20: RET
H10SCAS ENDP
CODES ENDS
END BEGIN

Слайд 36ASCII-ФОРМАТ
Команды коррекции:
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

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 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 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
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 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 ; адресов
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 ;Цикл 3 раза
RET
C10ADD ENDP
 
CODESG ENDS
END BEGIN

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

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


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

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


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


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


Слайд 49Математический сопроцессор


Слайд 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Арифметические команды
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 - Масштабирование на

степень числа 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)
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,

количество знаков после запятой не больше 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 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
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, 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 res
fwait

mov ax, 4c00h
int 21h
end

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


Слайд 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 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) имеет три степени разрешения:
Низкое разрешение (не

поддерживается в 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 Палитра 1
0 0 фон фон
0 1 зеленый голубой
1 0 красный сиреневый
1 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Пример: установка графического режима и отображение цвета
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

; да - сбросить столбец
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: Создание файла
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 ;Запрос

на закрытие файла
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 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 ; да - завершить программу
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Пример чтения из файла
CMP ROW,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

Обратная связь

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

Email: Нажмите что бы посмотреть 

Что такое ThePresentation.ru?

Это сайт презентаций, докладов, проектов, шаблонов в формате PowerPoint. Мы помогаем школьникам, студентам, учителям, преподавателям хранить и обмениваться учебными материалами с другими пользователями.


Для правообладателей

Яндекс.Метрика