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

  • 36. Дизассемблирование и отладка программ арифметических операций с целыми числами.

  • готовая печатка. 1. Техника безопасности 5 Изучение требования безопасности на рабочем месте 7


    Скачать 1.09 Mb.
    Название1. Техника безопасности 5 Изучение требования безопасности на рабочем месте 7
    Анкорготовая печатка
    Дата31.01.2023
    Размер1.09 Mb.
    Формат файлаdocx
    Имя файлаGotovaya_pechatka.docx
    ТипРеферат
    #914139
    страница20 из 22
    1   ...   14   15   16   17   18   19   20   21   22

    35. Ассемблирование программ арифметических операций с целыми числами.



    Для того чтобы приступить к работе с языком ассемблер нужно разобраться что это за язык и как он работает

    Определение процессов ассемблирования и дизассемблирования, а также процесс работы программ.

    Процесс трансляции программы на языке ассемблера в объектный код принято называть ассемблированием. Дизассемблирование - процесс и/или способ получения исходного текста программы на ассемблере из программы в машинных кодах. 

    Примеры простых операций сложение и вычитание на языке ассемблер.

    ADD – команда для сложения двух чисел. Она работает как с числами со знаком, так и без знака (числа, среди которых нет отрицательных).

    ADD Приемник, Источник

    Логика работы команды:

    <Приемник> = <Приемник> + <Источник>

    Возможные сочетания операндов для этой команды аналогичны команде MOV.

    По сути дела, это – команда сложения с присвоением.

    Приемник += Источник;

    Операнды должны иметь одинаковый размер. Результат помещается на место первого операнда.

    После выполнения команды изменяются флаги, по которым можно определить характеристики результата:

    Флаг CF устанавливается, если при сложении произошёл перенос из старшего разряда. Для беззнаковых чисел это будет означать, что произошло переполнение и результат получился некорректным.

    Флаг OF обозначает переполнение для чисел со знаком.

    Флаг SF равен знаковому биту результата (естественно, для чисел со знаком, а для беззнаковых он равен старшему биту и особо смысла не имеет).

    Флаг ZF устанавливается, если результат равен 0.

    Флаг PF — признак чётности, равен 1, если результат содержит нечётное число единиц.

     SUB - команда для вычитания одного числа из другого. Она работает как с числами со знаком, так и без знака.

    SUB Приемник, Источник

    Логика работы команды:

    <Приемник> = <Приемник> - <Источник>

    Возможные сочетания операндов для этой команды аналогичны команде MOV.

    Приемник -= Источник;

    Операнды должны иметь одинаковый размер. Результат помещается на место первого операнда.

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

    Вот пример программы на языке ассемблера x86 (с использованием синтаксиса NASM), которая выполняет арифметические операции с целыми числами:

    section .data

    x dd 10

    y dd 5
    section .text

    global _start
    _start:

    mov eax, [x] ; Load x into register eax

    add eax, [y] ; Add y to eax and store the result in eax

    mov [sum], eax ; Store the result in the sum variable
    mov eax, [x] ; Load x into register eax

    sub eax, [y] ; Subtract y from eax and store the result in eax

    mov [difference], eax ; Store the result in the difference variable
    mov eax, [x] ; Load x into register eax

    imul eax, [y] ; Multiply eax by y and store the result in eax

    mov [product], eax ; Store the result in the product variable
    mov eax, [x] ; Load x into register eax

    mov edx, 0 ; Clear the edx register

    idiv eax, [y] ; Divide eax by y and store the result in eax and the remainder in edx

    mov [quotient], eax ; Store the result in the quotient variable

    mov [remainder], edx ; Store the remainder in the remainder variable
    mov eax, 4 ; System call number for write

    mov ebx, 1 ; File descriptor (1 = stdout)

    mov ecx, sum ; Address of the sum variable

    mov edx, 4 ; Length of the variable (4 bytes for a 32-bit integer)

    int 0x80 ; Invoke the kernel
    mov eax, 4 ; System call number for write

    mov ebx, 1 ; File descriptor (1 = stdout)

    mov ecx, difference ; Address of the difference variable

    mov edx, 4 ; Length of the variable

    36. Дизассемблирование и отладка программ арифметических операций с целыми числами.



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

    Отладку и изучение работы готовой программы удобнее всего осуществлять с помощью интерактивного отладчика, который позволяет выполнять отлаживаемую программу по шагам или с точками останова, выводить на экран содержимое регистров и областей памяти, модифицировать (в известных пределах) загруженную в память программу, принудительно изменять содержимое регистров и выполнять другие действия, позволяющие в наглядной и удобной форме контролировать выполнение программы.
    Отладка программ производится различными отладчиками мною будет рассмотрин процесс отладки с помощью TD.EXE из пакета TASM. Приступая к работе с отладчиком, следует убедиться, что в рабочем каталоге имеются и загрузочный (Р.ЕХЕ), и исходный (P.ASM) файлы, так как отладчик в своей работе использует оба эти файла. Для запуска отладчика следует ввести команду td р

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

    Начальное окно отладчика дает слишком мало информации для отладки программы. В нем можно выполнять программу по частям до местоположения курсора (клавиша ) и команда за командой (клавиша ); можно также с помощью окна Watches наблюдать изменения заданных полей данных. Однако для отладки программы на уровне языка ассемблера необходимо контролировать все регистры процессора, включая регистр флагов, а также, во многих случаях, поля данных вне программы (например, векторы прерываний или системные таблицы). Гораздо более информативным является "окно процессора", которое вызывается с помощью пункта Vicw> CPU верхнего меню или командой ++.

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

    1   ...   14   15   16   17   18   19   20   21   22


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