Эксперт
Сергей
Сергей
Задать вопрос
Мы готовы помочь Вам.

Цель работы:

  1. Знакомство со структурой ПЭВМ IBM PC.
  2. Использование регистров, доступных программисту.
  3. Знакомство со структурой программы.
  4. Написание элементов программы.
  5. Приобретение навыков программирования на языке ассемблер.

 

Техническое оснащение:

  1. Персональный компьютер с ОС Windows XP, 7, 8 или 10;
  2. Программное обеспечение: MASM32, IDE-MASM Builder и стандартные программы Windows.

 

Задание №1    Вывод сообщений в консольном приложении:

Исходный текст программы:

screenshot 6 17 screenshot 7 18

Задание №2    Сообщения в Windows-приложениях:

Исходный текст программы:

screenshot 8 17 screenshot 9 15 screenshot 10 16

Ответы на контрольные вопросы

  1. Регистры микропроцессора:
  • EAX/AX/AH/AL (accumulator register) – аккумулятор;
  • EBX/BX/BH/BL (base register) –регистрбазы;
  • ECX/CX/CH/CL (counter register) – счётчик;
  • EDX/DX/DH/DL (data register) – регистрданных;
  • ESI/SI (source index register) – индексисточника;
  • EDI/DI (destination index register) – индексприёмника (получателя);
  • ESP/SP (stack pointer register) – региструказателястека;
  • EBP/BP (base pointer register) – региструказателябазыкадрастека.

 

  1. Флаги:
  • Флаг переноса CF — показывает наличие переполнения в беззнаковой целочисленной арифметике.
  • Флаг чётности PF — устанавливается, если младший значащий байт результата содержит чётное число единичных битов.
  • Вспомогательный флаг переноса AF — устанавливается при переносе из бита 3-го результата/заёме в 3-ий бит результата.
  • Флаг нуля ZF — устанавливается, если результат равен нулю.
  • Флаг знака SF — равен значению старшего значащего бита результата, который является знаковым битом в знаковой арифметике.
  • Флаг переполнения OF — показывает наличие переполнения в знаковой целочисленной арифметике.
  • Флаг направления DF — управляет строковыми инструкциями (MOVS, CMPS, SCAS, LODS и STOS) – установка флага заставляет уменьшать адреса (обрабатывать строки от старших адресов к младшим), обнуление заставляет увеличивать адреса.
  • Флаг разрешения прерываний IF – обнуление этого флага запрещает отвечать на маскируемые запросы на прерывание.
  • Флаг трассировки TF – установка этого флага разрешает пошаговый режим отладки, когда после каждой выполненной инструкции происходит прерывание программы и вызов специального обработчика прерывания.
  • Поле IOPL показывает уровень приоритета ввода-вывода исполняемой программы или задачи.
  • Флаг вложенности задач NT – этот флаг устанавливается, когда текущая задача «вложена» в другую, прерванную задачу, и сегмент состояния TSS текущей задачи обеспечивает обратную связь с TSS предыдущей задачи.
  • Флаг возобновления RF используется для маскирования ошибок отладки.
  • VM – установка этого флага в защищённом режиме вызывает переключение в режим виртуального 8086.
  • Флаг проверки выравнивания AC – установка этого флага вместе с битом AM в регистре CR0 включает контроль выравнивания операндов при обращениях к памяти.
  • VIF – виртуальная копия флага IF; используется совместно с флагом VIP.
  • VIP – устанавливается для указания наличия отложенного прерывания.
  • ID – возможность программно изменить этот флаг в регистре флагов указывает на поддержку инструкции CPUID.

 

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

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

ADD <операнд1>, <операнд2>

SUB <операнд1>, <операнд2>

 

Команда ADD складывает операнды и записывает их сумму на место первого операнда. Команда SUB вычитает из первого операнда второй и записывает полученную разность на место первого операнда. Операнды должны иметь одинаковый размер. Если первый операнд – регистр, то второй может быть также регистром, ячейкой памяти и непосредственным операндом. Если первый операнд – ячейка памяти, то второй операнд может быть регистром или непосредственным операндом. Возможно сложение и вычитание как знаковых, так и беззнаковых чисел любого размера. Команды меняют флаги AF, CF, OF, PF, SF и ZF.

 

Команды инкремента и декремента увеличивают и уменьшают на 1 свой операнд.

INC <операнд>

DEC <операнд>

 

Операндом может быть регистр или ячейка памяти любого размера. Команды меняют флаги AF, OF, PF, SF и ZF.

 

Команда изменения знака:

NEG <операнд>

 

Операндом может быть регистр или ячейка памяти любого размера. Команда NEG рассматривает свой операнд как число со знаком и меняет знак операнда на противоположный. Команда меняет флаги AF, CF, OF, PF, SF и ZF.

 

Для беззнакового умножения используется команда MUL:

MUL <операнд>

 

Операнд, указываемый в команде, – это один из сомножителей. Он может быть регистром или ячейкой памяти, но не может быть непосредственным операндом.

Местонахождение второго сомножителя и результата фиксировано, и в команде явно не указывается. Если операнд команды MUL имеет размер 1 байт, то второй сомножитель берётся из регистра AL, а результат помещается в регистр AX. Если операнд команды MUL имеет размер 2 байта, то второй сомножитель берётся из регистра AX, а результат помещается в регистровую пару DX:AX. Если операнд команды MUL имеет размер 4 байта, то второй сомножитель берётся из регистра EAX, а результат помещается в регистровую пару EDX:EAX.

Команда меняет флаги CF и OF. Если произведение имеет такой же размер, что и сомножители, то оба флага сбрасываются в 0. Если же размер произведения удваивается относительно размера сомножителей, то оба флага устанавливаются в 1.

 

Для знакового умножения используется команда IMUL:

IMUL <операнд>

IMUL <операнд>, <непосредственный операнд>

IMUL <операнд1>, <операнд2>, <непосредственный операнд>

IMUL <операнд1>, <операнд2>

 

Команда знакового умножения имеет несколько вариантов.

Первый соответствует команде MUL – один из сомножителей указывается в команде, второй должен находиться в регистре EAX/AX/AL, а результат помещается в регистры EDX:EAX/DX:AX/AX.

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

Третий вариант команды IMUL позволяет указать и результат, и оба сомножителя. Однако результат может быть помещён только в регистр, а второй сомножитель может быть только непосредственным операндом. Первый сомножитель может быть регистром или ячейкой памяти.

Четвёртый вариант команды IMUL позволяет указать оба сомножителя. Первый должен быть регистром, а второй – регистром или ячейкой памяти. Результат помещается в регистр, являющийся первым операндом.

 

  1. Логические команды:

Операция отрицания меняет значение всех битов переменной на противоположное. Операция не меняет флаги.

NOT <операнд>

 

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

AND <операнд1>, <операнд2>

 

Операция поразрядное «или» выполняет логическое сложение всех пар бит операндов.

OR <операнд1>, <операнд2>

 

Операция поразрядное исключающее «или» выполняет сложение по модулю 2 всех пар бит операндов.

XOR <операнд1>, <операнд2>

 

 

Вывод

В ходе лабораторной работы познакомился со структурой ПЭВМ IBM PC и приобрёл навыки программирования на языке ассемблер.

Была ли полезна данная статья?
Да
60.93%
Нет
39.07%
Проголосовало: 1098

или напишите нам прямо сейчас:

⚠️ Пожалуйста, пишите в MAX или заполните форму выше.
В России Telegram и WhatsApp блокируют - сообщения могут не дойти.
Написать в MAXНаписать в TelegramНаписать в WhatsApp