|
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РФ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ
ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
«ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ – УЧЕБНО-НАУЧНО-
ПРОИЗВОДСТВЕННЫЙ КОМПЛЕКС»
Кафедра «Информационные системы»
ОТЧЕТ
по лабораторной работе № 1
на тему «Линейное исполнение программ. Арифметические и подразрядные логические операции над байтами»
Выполнил: Сидорченко В.В. Шифр 150711
Учебно-научно-исследовательский институт информационных технологий
Направление: 09.03.03 «Прикладная информатика»
Группа: 11-ПИ
Проверила: Конюхова О.В
Отметка о зачете: ________ Дата: «____» ______ 20__ г.
Орел, 2015 г.
Цель работы
Цели лабораторной работы:
1) изучение принципов функционирования памяти и микропроцессора компьютера при последовательном исполнении команд программы;
2) приобретение навыков использования арифметических команд при написании ассемблерных программ;
3) приобретение навыков использования поразрядных логических команд при написании ассемблерных программ;
4) получение представления об особенностях обработки данных разных размерностей и режимах доступа к данным при выполнении арифметических операций.
Контрольные вопросы:
1) Понятие сегмента, характеристики сегмента, организация сегмента.
2) На какие сегменты разбита память компьютера? В какие регистры записываются начальные адреса сегментов?
3) Какие регистры микропроцессора используются при выполнении арифметических операций?
4) На какие флаги воздействуют арифметические команды?
5) Какие режимы адресации могут применяться для доступа к данным при выполнении арифметических и поразрядных логических операций?
6) Особенности выполнения операции умножения. Особенности выполнения операции деления. Распределение регистров.
7) Основные логические операции и принципы их выполнения.
8) Правила формирования масок для установки и сброса битов.
9) Каким образом выполняются логические команды над словами?
Ответы:
1) Сегмент - область памяти, имеющая начальный адресом и длину. Начальный адрес (адрес начала сегмента) – это номер (адрес) ячейки памяти, с которой начинается сегмент. Длина сегмента – это количество имеющихся у него ячеек памяти, способные иметь различную длину. Все ячейки, расположенные внутри сегмента, перенумеровываются, начиная с нуля. Адресация ячеек внутри сегмента ведется относительно начала сегмента; адрес ячейки в сегменте называется смещением или эффективным адресом - EA (относительно начального адреса сегмента).
2) Основные сегменты, которые может иметь программа:
• сегмент для хранения операндов,
• сегмент кода для хранения операторов программы,
• сегмент стека – дополнительную память для временного размещения информации. Начальные адреса сегментов помещаются микропроцессором в соответствующие сегментные регистры.
CS – регистр кода;
DS – регистр данных;
ES – дополнительный регистр;
SS – регистр стека.
3) Регистры общего назначения:
Ax (2 байта) – Ah/Al (1 байт);
Bx (2 байта) – Bh/Bl (1 байт);
Cx (2 байта) – Ch/Cl (1 байт);
Dx (2 байта) – Dh/Dl (1 байт).
4) Состояние вычисления определяется с помощью однобитных флагов, хранящихся в специальном регистре микропроцессора – PSW – слово состояния процессора. Основные типы:
• Флажок знака SF. Равен старшему биту результата: ноль – если результат положительный, и единица – если результат отрицательный.
• Флажок нуля ZF. Устанавливается в единицу при получении нулевого результата и сбрасывается в ноль, если результат отличается от нуля.
• Флажок паритета PF. Устанавливается в единицу, если младшие 8 бит результата содержат четное число единиц, в противном случае он сбрасывается в ноль.
• Флажок переноса CF. При сложении (вычитании) устанавливается в единицу, если возникает перенос из младшего бита или заем из старшего бита.
• Флажок вспомогательного переноса AF. Устанавливается в единицу, если при сложении (вычитании) возникает перенос (заем) из бита 3. Только для двоично-десятичной арифметики.
• Флажок переполнения OF. Устанавливается в единицу, если возникает переполнение, т.е. получение результата вне допустимого диапазона. При сложении флажок устанавливается, если имеется перенос в старший бит и нет переноса из старшего бита и наоборот.
5) Режимы адресации:
• непосредственный,
• прямой,
• регистровый,
• регистровый косвенный,
• регистровый относительный,
• базовый индексный,
• относительный базовый индексный.
6) Главной особенностью является использование всего одного операнда (сомножителя \ делимого). Второй операнд задан неявно и его положение в процессе фиксировано и в первую очередь зависит от размера операндов. Знаки результатов используются по алгебраическим правилам. Если результат по размеру совпадает с размером сомножителей, то флаги OF и CF после завершения операции раны нулю. В ином случае они превращаются в единицу: это означает, что результат вышел за пределы младшей части произведения и является составным из двух частей, а остальные флаги не определены. Эту информация необходима для продолжения работ. Делитель находится в регистре или памяти и имеет размер 8, 26 или 32 бита. Местонахождение делимого фиксировано. Результатом команды деления являются частное и остаток от деления. После выполнения операции деления содержимое флагов не определено, но возможно возникновение прерывания с номером ноль (так называемое «деление на ноль») в случаях, когда делитель равен нулю или частное не входит в отведенную для него разрядную сетку. Что касается режимов адресации, то операнды источники не могут быть непосредственными значениями, а все другие режимы адресации допустимы. Операнды – получатели строго фиксированы.
Название команды | Формат команды | Действия |
Инвертировать | NOT OPR | (OPR)not OPR |
Объединить по «ИЛИ» | OR DST,SRC | (DST)(DST) or (SRC) |
Объединить по «И» | AND DST,SRC | (DST)(DST) and (SRC) |
Сложить по MOD2 («исключающее ИЛИ») | XOR DST,SRC | (DST)(DST) xor (SRC) |
Проверить | TEST OPR1,OPR2 | OPR1 and OPR2 |
7) Команда NOT не воздействует на флажки. Остальные команды сбрасывают OF и CF, оставляют АF не определенным и устанавливают СF, ZF, PF по обычным правилам. Касательно режимов адресации, в команде NOT не допускается непосредственный операнд. В остальных командах один из операндов должен быть регистром. Другой операнд может иметь любой режим адресации.
8) Основные правила формирования:
• AND (логическое И) устанавливает бит результата в 1, если оба бита, бит источника и бит приемника установлены в 1.
• OR (логическое ИЛИ) устанавливает бит результата в 1, если один из битов, бит источника или бит приемника установлен в 1.
• XOR (НЕ ИЛИ) устанавливает бит результата в 1, если бит источника отличается от бита приемника. NOT инвертирует бит источника.
9) Если размерность операндов равна слову (16 бит), то логическая операция выполняется сначала над нулевыми битами операндов и ее результат записывается на место бита 0 результата. Далее команда последовательно повторяет эти действия.
Основная часть:
d_s segment -Открыли сегмент данных
a db 10 -Создали переменную A с числом 10
b db 27 -Создали переменную B с числом 27
c db 00000101b -Создали переменную C с двоичным числом
proiz1 dw 1 -Переменная для произведения 1, dw т.к. -32 768...32 767;
proiz2 dw 1 -Переменная для произведения 2, dw т.к. -32 768...32 767;
sum db 0 -Переменная для суммы
razn1 db 0 -Переменная для разности 1
razn2 db 0 -Переменная для разности 2
delful db 0 -Переменная для частного при делении
delost db 0 -Переменная для остатка при делении
d_s ends -Закрыли сегмент данных
c_s segment -Открыли сегмент кода
assume -Показываем, в каких регистрах хранятся сегменты
ds:d_s, cs:c_s
begin: -Начало выполнения программы
mov ax,d_s -Переносим адрес сегмента данных в регистр,
mov ds,ax
mov ah,a -Перенесли значение переменной A в регистр AH
mov al,b -Перенесли значение переменной B в регистр AL
add ah,al -Сложили AL+AH
mov sum,ah -Перенесли значение из регистра AH в переменную SUM
mov ah,a
mov al,b
sub ah,al -Разность
mov razn1,ah
mov ah,a
mov al,b
neg al -Поменяли знак
sub ah,al -Разность с другим знаком
mov razn2,ah
mov ah,a
mov al,b
neg al -Поменяли знак
imul ah -Умножение с учетом знака, который мы изменили выше
mov proiz1,ax
mov ah,a
mov al,b
mul ah -Умножение без учета знака
mov proiz2,ax
xor ax,ax -Обнулили регистр AX, т.к. в нем могут храниться данные
mov al,b
mov bl,b
div bl -Деление 27/10, т.е. AL/BL
mov delful,al -Перенесли частное
mov delost,ah -Перенесли остаток
mov al,c -Перенесли двоичное число в регистр AL
or al, 00000101b
not al -Инвертируем в 11111010b
and al, 11101010b -Обнулили 3 байта
mov bl,al
xor al,bl -Обнулили регистр AL
mov ah, 4ch
int 21h
c_s ends -Закрыли сегмент кода
end begin -Конец выполнения программы
Дата добавления: 2015-11-04; просмотров: 16 | Нарушение авторских прав
<== предыдущая лекция | | | следующая лекция ==> |
Тяжело быть служкой прославленного гения, молодого профессора Академии МагФорм, стихийника и красавца, обремененного не только юмором, но и толпой кровожадных поклонниц. Тех самых, первая встреча с 18 страница | | | занятий по пожарно-техническому минимуму для инженерно-технических |