Главная страница
Навигация по странице:

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

  • Команда безусловной передачи управления

  • 8. А

  • 3. МЕТОДИЧЕСКИЕ УКАЗАНИЯ К ВЫПОЛНЕНИЮ ЛАБОРАТОРНОЙ РАБОТЫ

  • 3.1. Арифметика при помощи команд Debug и просмотр регистров

  • Лабораторная работа №2 ОСНОВЫ ПРОГРАММИРОВАНИЯ НА АССЕМБЛЕРЕ В WINDOWS

  • Лабораторная работа 1 работа с машинными командами и командами ассемблера с помощью отладчика debug


    Скачать 358.11 Kb.
    НазваниеЛабораторная работа 1 работа с машинными командами и командами ассемблера с помощью отладчика debug
    Анкорassmblr.docx
    Дата28.05.2018
    Размер358.11 Kb.
    Формат файлаdocx
    Имя файлаassmblr.docx
    ТипЛабораторная работа
    #21130
    страница1 из 3

    Подборка по базе: Контрольная работа.doc, курсовая работа.doc, Курсовая работа-1.docx, Лабораторная работа №2.docx, лабораторная работа №1 Минералы.docx, Курсовая работа.docx, Как в Excel 2010 работает режим защищенного просмотра документов, Как в Excel 2010 работает режим защищенного просмотра документов, Какой может быть работа ИТ Яковлева.docx, Практическая работа №7.pdf.
      1   2   3

    Лабораторная работа №1
    РАБОТА С МАШИННЫМИ КОМАНДАМИ И КОМАНДАМИ АССЕМБЛЕРА С ПОМОЩЬЮ ОТЛАДЧИКА DEBUG

    1. ЦЕЛЬ РАБОТЫ

    Познакомиться с основами программирования на ассемблере для DOS (в режиме эмуляции, т.е. имитации работы системы DOS) с помощью отладчика Debug.

    2. ОСНОВНЫЕ СВЕДЕНИЯ

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

    Алгоритмические языки подразделяются на машинно-ориентированные, процедурно-ориентированные и проблемно-ориентированные.

    Машинно-ориентированные языки относятся к языкам программирования низкого уровня – программирование на них наиболее трудоемко, но позволяет создавать оптимальные программы, максимально учитывающие функционально-структурные особенности компьютера. Кроме того, знание основ программирования на машинно-ориентированном языке позволяет лучше разобраться с архитектурой компьютера. Большинство команд машинно-ориентированных языков при трансляции (переводе) на машинный (двоичный) язык генерирует одну машинную команду.

    Процедурно-ориентированные и проблемно-ориентированные языки относятся к языкам высокого уровня, использующим макрокоманды. Макрокоманда при трансляции генерирует много машинных команд.

    Все языки программирования, и языки машинно-ориентированные, и языки высокого уровня, для их восприятия компьютером требуют наличия программ перевода – трансляторов на машинный язык.

    Трансляторы бывают двух типов: трансляторы-компиляторы и трансляторы-интерпретаторы.

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

    Откомпилированные двоично-кодированные программы (на машинном языке) практически человеком не читаемы. Но их можно вызвать в специальную программу-отладчик Debug, которая переведет эти программы на язык ассемблер, то есть сделает их читаемыми.

    2.1. Машинные команды

    Итак, алгоритм непосредственно воспринимается и исполняется компьютером, если он представлен в двоичном коде на машинном языке.

    Алгоритм решения задачи, заданный в виде последовательности команд на языке вычислительной машины (в кодах машины), называется машинной программой.

    Команда машинной программы (иначе, машинная команда) – это элементарная инструкция машине, выполняемая ею автоматически без каких-либо дополнительных указаний и пояснений.

    Машинная команда состоит из двух частей: операционной и адресной.

    Операционная часть команды (КОП – код операции) – это группа разрядов в команде, предназначенная для представления кода операции машины.

    Адресная часть команды (Адреса) – это группа разрядов в команде, в которых записываются коды адреса (адресов) ячеек памяти машины, предназначенных для оперативного хранения информации, задействованной при выполнении команды.

    По количеству адресов, записываемых в команде, команды делятся на безадресные, одно-, двух- и трехадресные.

    Пример двухадресной команды, записанной на языке символического кодирования:

    СЛ 0103 5102

    Эту команду следует расшифровать так: сложить число, записанное в ячейке 0103 памяти, с числом, записанным в ячейке 5102, а затем результат (то есть сумму) поместить в ячейку 0103.

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

    2.2. Команды ассемблера

    Программировать в машинных кодах довольно сложно, поскольку в этом случае приходится оперировать только цифрами. Для удобства программистов был создан так называемый язык ассемблера или просто ассемблер. Он относится к классу машинно-ориентированных языков. Его команды более человекочитаемы. Одна команда на ассемблере транслируется обычно в одну машинную команду и редко – в несколько.

    Теперь посмотрим, как выглядит формат команды на ассемблере:

    [Метка [:] ] КОП [Операнд] [.Операнд] [: Комментарий]1

    Между элементами команды вставлены пробелы.

    КОП (Код оператора) – мнемокод команды, состоит из 2-6 букв.

    Операнд – явно заданный адрес; имя метки или переменной; само значение переменной и т.п. Количество необходимых в команде операндов ассемблер узнает по КОП. В большинстве двухадресных команд присутствуют операнды приемника (dst – destination) и источника (src – source); источник не изменяет своего содержания, в приемнике первое число, участвующее в операции, заменяется результатом.

    Метка – имя команды ассемблера для обращения к этой команде.

    Пример команды на ассемблере: MOV ax, 0.

    Эта команда означает следующее: занести число ноль в регистр ах. Для дальнейшего изучения команд ассемблера необходимы определенные сведения об устройстве вычислительной машины.

    Помимо логических схем процессор содержит набор ячеек памяти, называемых регистрами. Все регистры можно разделить на 4 группы:

    • универсальные регистры: AX, BX, CX, DX; используются для временного хранения любых данных;

    • сегментные регистры: CS, DS, SS, ES; используются для хранения начальных адресов полей памяти (сегментов);

    • регистры смещения: IP, SP, BP, SI, DI; предназначены для хранения относительных адресов ячеек памяти внутри сегментов;

    • регистр флагов: FL; содержит флаги, управляющие прохождением программы в ПК.

    При этом можно работать с каждым регистром целиком, а можно отдельно с каждой его половиной (регистры AH, BH, CH, DH – старшие (High) байты, а регистры AL, BL, CL, DL – младшие (Low) байты соответствующих 2-байтовых регистров).

    Некоторые команды ассемблера

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

    MOV dst, src – пересылка данных из src в dst.

    PUSH src – помещает в вершину стека содержимое src.

    POP dst – снимает слово с вершины стека и помещает его в dst.

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

    ADD dst, src – содержимое src складывается с содержимым dst, и результат помещается в src.

    SUB dst, src – содержимое src вычитается из содержимого dst, и результат помещается в src.

    INC dst – прибавляет 1 к содержимому dst.

    DEC dst – вычитает 1 из содержимого dst.

    MUL src – одноадресная команда, указывается только множитель, множимое берется из AL, а результат помещается в AX.

    DIV src – одноадресная команда, указывается только делитель, делимое берется из AX, а результат помещается в AL.

    Команда безусловной передачи управления

    JMP opr – команда безусловной передачи управления.

    Это основные, наиболее часто используемые команды ассемблера.

    Пример. Вывести символ “*” на экран.

    MOV AH, 02 ; системная функция 02 – вывод символа на экран

    MOV DL, 2A ; запись в регистр DL ASCII-кода символа

    INT 21h ; это основное прерывание DOS, реализующее много различных функций. Для распечатки символа на экране в регистре АН должна быть функция 02, при этом в DL записывают предварительно код символа.

    INT 20h ; прерывание DOS, осуществляющее выход из программы.

    2.3. Отладчик Debug

    DEBUG.EXE – специальная системная программа для ввода и пошагового выполнения программ, написанных на машинном языке или с помощью команд ассемблера.

    Для запуска этой программы нажмите кнопку Пуск, затем Выполнить, введите Debug и нажмите ввод, в результате программа должна загрузиться с диска в память.



    После окончания загрузки на экране появится приглашение в виде дефиса, что свидетельствует о готовности программы Debug для приема команд.



    Наиболее часто используемые инструкции Debug:

    1. Q – выход из программы.

    2. ? – получение справки.

    3. H (Hexarithmetic) – шестнадцатеричная арифметика. Если после символа Н набрать 2 числа (размером не более 4 цифр каждое) через пробел, то получим сумму и разность набранных чисел:



    4. R [<имя регистра>] – работа с регистрами (от слова Register). Инструкция «R» без параметра позволяет просмотреть содержимое всех регистров, а также значение флагов и команду, расположенную по смещению 0100 в сегменте кода. Обычно по смещению 0100 находится первая команда программы.



    С помощью этой инструкции можно ввести новое значение в один регистр. Для этого после команды нужно ввести название регистра:



    Как видим, при первом просмотре регистров командой r, в регистре АХ был 0, затем содержимое регистра было изменено.

    5. U [<сегментный регистр>:]<начальный адрес>, <конечный адрес> – просмотр ячеек оперативной памяти, начиная с указанного смещения в сегменте, заданном сегментным регистром. Команда U (Unassemble) дизассемблирует команды, находящиеся в памяти по заданному адресу.

    Например, в следующем примере мы просматриваем команды, находящиеся в регистре CS, начиная с адреса 100, по адрес 102.



    6. Е [<сегментный регистр>:]<смещение> – запись информации в ячейки оперативной памяти.

    Как было сказано, с помощью Debug можно вводить команды как на машинном языке, так и на языке ассемблера. Инструкция Debug E (Enter) служит для ввода команд на машинном языке. Здесь Debug используется как интерпретатор, чтобы работать непосредственно с микропроцессором. Можно задавать машинные команды, записывать их в определенное место оперативной памяти, обычно, начиная с 0100 смещения относительно начала сегмента кода. Затем выполнять пошагово (по одной команде) либо сразу всю программу.

    Так как микропроцессор понимает только двоичные числа (сокращенно их можно записать шестнадцатеричными), то и коды машинных команд записываются в виде шестнадцатеричных чисел, причем команды бывают одно-, двух- трехбайтовые и т.д.

    Например, команда для сложения значений из регистров АХ и ВХ двухбайтовая и имеет машинный код 01D8.

    Инструкция “E <смещение>” при работе распечатывает в следующей после ее ввода строке адрес, состоящий из двух чисел, и старое значение байта по этому адресу:
    <содержимое CS>:<смещение><значение байта>, далее компьютер ожидает ввода нового значения байта.

    Для ввода, например, двухбайтовой машинной команды 01D8 нужно записать 01 в сегмент кода по смещению 100, и D8 – по смещению 101:



    7. Т (от Tracing) – запуск программы, находящейся в оперативной памяти по адресу 0100, в пошаговом режиме. Для вызова программы на выполнение нужно предварительно позаботиться, чтобы в регистре IP (счетчик команд) было число 0100.

    8. А <смещение> – ввод команд в ассемблерном виде (от Assemble). Первую команду программы следует начинать вводить со смещения 0100. Далее система ждет поочередного ввода команд ассемблера. Для окончания ввода нужно нажать Enter после пустой строки.

    Пример. Введем в оперативную память программу на ассемблере, выполняющую сложение двух чисел. Установим начальный адрес следующим образом: A 0100 [Enter].

    Отладчик выдаст значение адреса сегмента кодов и смещения в виде хххх:0100. Теперь можно вводить каждую команду, завершая клавишей Ввод.



    Прежде чем выполнить программу, проверим сгенерированные машинные коды при помощи команды U. Необходимо сообщить отладчику адреса первой и последней команд, которые необходимо просмотреть, в данном случае 0100 и 0106. Введите: U 100, 106



    Как видим, машинные коды сгенерированы верно.

    С помощью команды R выведем содержимое регистров и первую команду нашей программы:



    С помощью команд Т выполним последовательно все команды программы:



    Так вводятся и трассируются программы на языке ассемблера.

    Изучим остальные команды Debug, после чего вернемся к примеру.

    9. G (от Go) – запуск программы, находящейся в оперативной памяти по адресу 0100. Для вызова программы на выполнение нужно предварительно позаботиться, чтобы в регистре IP (счетчик команд) было число 0100.

    10. N <имя .com-файла> – задает имя программы (Name) для последующей записи ее на диск либо считывания с диска. Перед записью предварительно нужно записать 0 в регистр ВХ, а размер программы (в байтах) – в регистр СХ.

    11. W (от Write) – запись программы на диск. После выполнения инструкции “W” на диске в текущей директории появится файл с расширением .COM – точная копия веденной программы.

    12. Lзагрузка программы с диска в оперативную память. Предварительно имя программы задается с помощью команды N.

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

    1. присвоить программе имя;

    2. указать длину программы;

    3. выполнить запись.

    1. Присвоим будущему файлу имя с помощью команды N.

    2. Программа состоит из четырех двухбайтных инструкций, занимает адреса со смещениями с 0100 по 0106, значит ее длина – 8 байт. Размер программы Debug хранит в регистровой паре [BX:CX]. В нашем случае значение длины умещается в одном регистре, поэтому старший регистр пары мы просто обнулим: BX=0, CX=8.

    3. Для записи программы на диск используем программу W.



    3. МЕТОДИЧЕСКИЕ УКАЗАНИЯ К ВЫПОЛНЕНИЮ
    ЛАБОРАТОРНОЙ РАБОТЫ


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

    Практическая часть лабораторной работы состоит из трёх частей. Целью первой части является изучений возможностей системной программы – отладчика Debug. Во второй части необходимо с помощью Debug написать и выполнить программу в машинных кодах, а в третьей – на языке ассемблера.

    3.1. Арифметика при помощи команд Debug и просмотр регистров

    1. Найдите сумму и разность двух чисел: первое число – номер в группе (переведенное в шестнадцатеричную форму), второе – число, противоположное номеру первой буквы фамилии в алфавите (отрицательное число в дополнительном коде). Противоположным к некоторому х называется число, равное х по абсолютной величине, но обратное по знаку. Сумму и разность переведите вручную в десятичную форму. Запишите ход работы в протокол.

    2. Просмотрите содержимое регистров микропроцессора, а также флагов и выпишите их в протокол. Какие функции выполняет каждый из регистров?

    3.2. Машинные команды

    Запишите в регистр АХ первое число (из задания 1), а в регистр ВХ – второе число. Введите в оперативную память в сегмент кода (смещение 0100) машинную команду сложения регистров АХ и ВХ. Просмотрите на экране ее ассемблерную форму. Выполните эту команду, результат переведите в десятичную форму. Запишите текст программы в протокол.

    3.3. Команды ассемблера

    Введите в оперативную память набор команд ассемблера для распечатки символа на экране – первой буквы вашей фамилии. Проверьте программу в Debug. Затем запишите ее на диск в виде .COM-файла. Чему равен размер программы? Запустите ее на выполнение. Запишите ход работы в протокол.

    4. КОНТРОЛЬНЫЕ ВОПРОСЫ

    1. Дайте определение алгоритма и программы решения задачи.

    2. Назовите основные классы алгоритмических языков и разновидности трансляторов.

    3. Приведите и поясните типовой состав машинных команд и возможные их структуры.

    4. Что такое регистр процессора?

    5. Какие регистры микропроцессорной памяти используются для адресации данных, команд программы, стековой памяти?

    6. Назовите основные компоненты языка ассемблер, приведите структуру команд.

    7. Приведите структуру ассемблерной программы и дайте краткую характеристику основных структурных фрагментов этой программы.

    8. Каково назначение отладчика программ? Назовите основные его возможности.

    Лабораторная работа №2
    ОСНОВЫ ПРОГРАММИРОВАНИЯ НА АССЕМБЛЕРЕ В WINDOWS
      1   2   3


    написать администратору сайта