готовая печатка. 1. Техника безопасности 5 Изучение требования безопасности на рабочем месте 7
![]()
|
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 не понадобится, и его можно убрать, щелкнув мышью по маленькому квадратику в левом верхнем углу окна, или введя команду Начальное окно отладчика дает слишком мало информации для отладки программы. В нем можно выполнять программу по частям до местоположения курсора (клавиша Окно процессора состоит, в свою очередь, из 5 внутренних окон для наблюдения текста программы на языке ассемблера и в машинных кодах, регистров процессора, флагов, стека и содержимого памяти. С помощью этих окон можно полностью контролировать ход выполнения отлаживаемой программы. Для того чтобы можно было работать с конкретным окном, например, прокручивать его содержимое, надо сделать его активным, щелкнув по нему мышью. |