Студопедия — Лабораторная работа №6. if(a>0&&b<10)f=x*(a+b)/50
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Лабораторная работа №6. if(a>0&&b<10)f=x*(a+b)/50






Работа с дисассемблером

Цель работы: освоить работу с дисассемблером.

Оборудование: персональный компьютер, Microsoft Visual Studio.

Краткая теория

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

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

Пример

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

После чего необходимо провести анализ эффективности программы на написанной на языке С++ и ассемблере. Ниже приведен листинг этой программы.

 

#include " stdafx.h"

 

#include < iostream>

using namespace std;

 

int _tmain(int argc, _TCHAR* argv[])

{

int a, b, c, x, f;

 

cout< < " Enter a=";

cin> > a;

cout< < " Enter b=";

cin> > b;

cout< < " Enter c=";

cin> > c;

cout< < " Enter x=";

cin> > x;

 

if (a> 0& & b< 10)f=x*(a+b)/50;

Else

if (a< 0)f=x*a+b/7;

else f=x%6+c+b;

 

Asm

{

cmp a, 0

jle next1

cmp b, 10

jge next1

mov eax, a

cdq

add eax, b

imul x

mov ecx, 50

idiv ecx

mov f, eax

jmp my_exit

next1:

cmp a, 0

jge next2

mov eax, x

cdq

imul a

mov ebx, eax

mov eax, b

cdq

mov ecx, 7

idiv ecx

add eax, ebx

mov f, eax

jmp my_exit

next2:

mov eax, x

cdq

mov ecx, 6

idiv ecx

add edx, c

add edx, b

mov f, edx

 

my_exit:

};

 

cout< < " f=" < < f< < endl;

 

system(" pause");

return 0;

}

 

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

 

Рисунок 26 – Установка точки останова

 

После того как точка останова установлена, запускаем программу, вводим необходимые данные и запускаем дизассемблер. Для запуска дизассемблера необходимо выбрать пункт меню «Отладка» u«Окна»u«Дизассемблированный код» (рисунок 27).

 

Рисунок 27 – Выбор меню дизассемблера

 

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

 

if(a> 0& & b< 10)f=x*(a+b)/50;

0041158E cmp dword ptr [a], 0

00411592 jle wmain+0F1h (4115B1h)

00411594 cmp dword ptr [b], 0Ah

00411598 jge wmain+0F1h (4115B1h)

0041159A mov eax, dword ptr [a]

0041159D add eax, dword ptr [b]

004115A0 imul eax, dword ptr [x]

004115A4 cdq

004115A5 mov ecx, 32h

004115AA idiv eax, ecx

004115AC mov dword ptr [f], eax

Else

004115AF jmp wmain+124h (4115E4h)

if(a< 0)f=x*a+b/7;

004115B1 cmp dword ptr [a], 0

004115B5 jge wmain+110h (4115D0h)

004115B7 mov ecx, dword ptr [x]

004115BA imul ecx, dword ptr [a]

004115BE mov eax, dword ptr [b]

004115C1 cdq

004115C2 mov esi, 7

004115C7 idiv eax, esi

004115C9 add ecx, eax

004115CB mov dword ptr [f], ecx

004115CE jmp wmain+124h (4115E4h)

else f=x%6+c+b;

004115D0 mov eax, dword ptr [x]

004115D3 cdq

004115D4 mov ecx, 6

004115D9 idiv eax, ecx

004115DB add edx, dword ptr [c]

004115DE add edx, dword ptr [b]

004115E1 mov dword ptr [f], edx

 

Asm

{







Дата добавления: 2014-11-10; просмотров: 602. Нарушение авторских прав; Мы поможем в написании вашей работы!



Обзор компонентов Multisim Компоненты – это основа любой схемы, это все элементы, из которых она состоит. Multisim оперирует с двумя категориями...

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

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

ТЕОРЕТИЧЕСКАЯ МЕХАНИКА Статика является частью теоретической механики, изучающей условия, при ко­торых тело находится под действием заданной системы сил...

Ганглиоблокаторы. Классификация. Механизм действия. Фармакодинамика. Применение.Побочные эфффекты Никотинчувствительные холинорецепторы (н-холинорецепторы) в основном локализованы на постсинаптических мембранах в синапсах скелетной мускулатуры...

Шов первичный, первично отсроченный, вторичный (показания) В зависимости от времени и условий наложения выделяют швы: 1) первичные...

Предпосылки, условия и движущие силы психического развития Предпосылки –это факторы. Факторы психического развития –это ведущие детерминанты развития чел. К ним относят: среду...

Понятие метода в психологии. Классификация методов психологии и их характеристика Метод – это путь, способ познания, посредством которого познается предмет науки (С...

ЛЕКАРСТВЕННЫЕ ФОРМЫ ДЛЯ ИНЪЕКЦИЙ К лекарственным формам для инъекций относятся водные, спиртовые и масляные растворы, суспензии, эмульсии, ново­галеновые препараты, жидкие органопрепараты и жидкие экс­тракты, а также порошки и таблетки для имплантации...

Тема 5. Организационная структура управления гостиницей 1. Виды организационно – управленческих структур. 2. Организационно – управленческая структура современного ТГК...

Studopedia.info - Студопедия - 2014-2024 год . (0.011 сек.) русская версия | украинская версия