Студопедия — Лабораторная работа №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; просмотров: 606. Нарушение авторских прав; Мы поможем в написании вашей работы!



Функция спроса населения на данный товар Функция спроса населения на данный товар: Qd=7-Р. Функция предложения: Qs= -5+2Р,где...

Аальтернативная стоимость. Кривая производственных возможностей В экономике Буридании есть 100 ед. труда с производительностью 4 м ткани или 2 кг мяса...

Вычисление основной дактилоскопической формулы Вычислением основной дактоформулы обычно занимается следователь. Для этого все десять пальцев разбиваются на пять пар...

Расчетные и графические задания Равновесный объем - это объем, определяемый равенством спроса и предложения...

Толкование Конституции Российской Федерации: виды, способы, юридическое значение Толкование права – это специальный вид юридической деятельности по раскрытию смыслового содержания правовых норм, необходимый в процессе как законотворчества, так и реализации права...

Значення творчості Г.Сковороди для розвитку української культури Важливий внесок в історію всієї духовної культури українського народу та її барокової літературно-філософської традиції зробив, зокрема, Григорій Савич Сковорода (1722—1794 pp...

Постинъекционные осложнения, оказать необходимую помощь пациенту I.ОСЛОЖНЕНИЕ: Инфильтрат (уплотнение). II.ПРИЗНАКИ ОСЛОЖНЕНИЯ: Уплотнение...

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

Тема 5. Анализ количественного и качественного состава персонала Персонал является одним из важнейших факторов в организации. Его состояние и эффективное использование прямо влияет на конечные результаты хозяйственной деятельности организации.

Билет №7 (1 вопрос) Язык как средство общения и форма существования национальной культуры. Русский литературный язык как нормированная и обработанная форма общенародного языка Важнейшая функция языка - коммуникативная функция, т.е. функция общения Язык представлен в двух своих разновидностях...

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