рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

Зміст звіту

Зміст звіту - раздел Образование, Виконати дослідження переводу чисел з десяткової в двійкову систему числення 1. Постановка Задачі Для Конкретного Варіанта. 2. Блок-Схема Алгорит...

1. Постановка задачі для конкретного варіанта.

2. Блок-схема алгоритму виконання прикладу з детальним коментарем та описом роботи.

3. Лістинг програми та коментарі до всіх команд.

4. Рrint screen екрана 32-розрядного налагоджувача з виконанням програми та результатами виконання.

5. Короткий опис виконання програми.

6. Висновки за результатами роботи.

Приклад 12.7:

Проаналізувати масив даних з 10 елементів розміром у подвійне слово. Додавати елементи масиву доти, поки значення суми не перевищить 15. Зберегти номер елемента, на якому відбулося переповнення. Видати повідомлення на екран монітора (текстове або/чи числове).

Блок-схему алгоритму виконання прикладу наведено на рис. 12.9.

 

 
 

 

 


Розв’язання прикладу 12.3 з використанням директив високого рівня, але поки без виведення даних, наведено у лістингу 12.9.

 

Лістинг 12.9:

title CopyRight by Rysovaniy A. N. rysov@rambler.ru

.386 ; директива визначення типу мікропроцесора

.model flat, stdcall ; завдання лінійної моделі пам’яті

; та угоди ОС Windows

option casemap:none ; відмінність малих та великих літер

.data ; директива визначення даних

mas1 dd 1,4,5,4,6,7,3,8,2,10 ; масив чисел

len equ $-mas1 ; визначення кількості байтів в масиві

.code ; директива початку сегмента даних

_start: ; мітка початку програми з ім’ям _start

mov ecx,len ; завантаження лічильника

shr ecx,2 ; визначення кількості подвійних слів

lea esi, mas1 ; завантаження адреси початку масиву

mov eax, [esi] ; завантаження числа

m1:

.IF(eax<15) ; умова

mov ebx,[esi+4] ; завантаження нового числа з масиву

add eax,ebx ; додавання елементів

add esi,4 ; розрахунок адреси нового числа

add ebx,4 ; розрахунок адреси наступного числа

loop m1 ; перейти на m1, якщо ecx = 0

.ENDIF ; закінчення директиви високого рівня

ret ; повернення керування ОС

end _start ; директива закінчення програми з ім’ям _start

 

У наведеній програмі при виникненні необхідності додавання двох чисел одного масиву слід використати додатковий регістр (для зберігання адреси другого числа). Таким регістром вибрано регістр ebx. Завантаження в цей регістр значення адреси другого числа виконується командою mov ebx,[esi+4].

У зв’язку з тим, що за завданням вибрано формат регістрів в 32 розряди (4 байти), для підготовки зчитування нових слів виконуються команди

add esi,4

add ebx,4.

Вікна налагоджувача після налагодження програми з лістингу 12.9 наведено на рис. 12.10.

 

 

 
 

 


Для виконання другої частини роботи необхідно організувати виведення даних на екран. Для цього доцільно використати АРІ-функцію WriteConsoleA, фрагмент застосування якої може бути таким:

 

.386

.model flat, stdcall

option casemap:none

include masm32includewindows.inc

include masm32includeuser32.inc

include masm32includekernel32.inc

includelib masm32libuser32.lib

includelib masm32libkernel32.lib

BSIZE equ 15

.data ; директива визначення даних

stdout dd ? ; дані для дескриптора виведення, що не визначені

buf db BSIZE dup(?) ; резервування пам’яті для буфера

frmt db "%d",0 ; завдання перетворення одного символу

cWritten dd ? ; комірки пам’яті для адрес

; символів виведення

. . .

.code ; директива початку сегмента даних

_start: ; мітка початку програми з ім’ям _start

. . .

invoke GetStdHandle, STD_OUTPUT_HANDLE ; отриманого дескриптора

mov stdout, eax ; запам’ятовування отриманого дескриптора

. . .

invoke wsprintf, ; АРІ-функція перетворення числа

ADDR buf, ; адреса буфера, куди буде записана посліднісьт символів

ADDR frmt, ; адреса рядка перетворення формату

edx ; регістр, вміст якого перетворюється

invoke WriteConsoleA, ; АРІ-функція виведення на екран

stdout, ; дескриптор стандартного пристрою виведення

ADDR buf, ; адреса початку повідомлення

BSIZE, ; розмір повідомлення

ADDR cWritten, ; адреса, де зберігається число символів

NULL

invoke ExitProcess, 0 ; повернення керування ОС Windows

; та визволення ресурсів

end _start ; директива закінчення програми з іменем _start

 

У цій програмі використовуються файли user32.inc і user32.lib, що зберігають інформацію про функцію wsprintf. Число параметрів цієї функції поки дорівнює трьом:

1. Параметр ADDR buf – це адреса буфера, куди буде записана послідовність символів. Пам’ять для буфера виділяється рядком buf db BSIZE dup(?), який резервує кількість байтів, заданих змінною BSIZE. Про резервування байтів пам’яті говорить слово dup – скорочене від англійського слова duplication (повторення). Знак питання, в дужках після dup, свідчить про те, що значення байтів наперед не визначене.

Розмір буфера, позначений ім’ям BSIZE, є реальним числом, яким асемблер замінить змінну BSIZE та яке задається рядком BSIZE equ 15.

2. Параметр ADDR ifmt – це адреса рядка формату, яка задає тип перетворення. Цей рядок складається з символів і завжди завершується нульовим байтом. Рядок “%d”,0 задає перетворення одного цілого числа в послідовність символів, а рядок “%d%d”,0 – перетворення двох чисел.

3. Параметр edx вказує функції wsprintf на те що число, яке потребує перетворення в послідовність символів, знаходиться, наприклад, у регістрі edx.

Процедура WriteConsoleA виводить ці символи на екран. За першим параметром цієї функції (stdout) перетворене у символ число виводиться через консоль, за другим (параметр ADDR buf) вказується адреса початку повідомлення, за третім (BSIZE) – розмір повідомлення, за четвертим (ADDR cWritten) – адреса ділянки пам’яті, де процедура WriteConsoleA зберігає число виведених на екран символів.

13.3. Лабораторна робота “Структури та макроси”

Мета заняття:

– поглибити і закріпити знання з архітектури МП платформи х86 і навички його програмування;

– придбати практичні навички складання, налагодження і виконання програм з використанням структур та АРІ-функцій під Win32, написаних мовою асемблеру МП платформи х86.

 

– Конец работы –

Эта тема принадлежит разделу:

Виконати дослідження переводу чисел з десяткової в двійкову систему числення

Лабораторна робота Подання даних... Мета заняття... Виконати дослідження переводу чисел з десяткової в двійкову систему числення Дати їх внутрішнє машинне подання...

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Зміст звіту

Что будем делать с полученным материалом:

Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:

Все темы данного раздела:

Вхідний контроль знань
1. Перевести числа вашого дня, місяця та року народження у двійкову, вісімкову та шістнадцяткову системи числення. 2. Перевести число DD.MM у двійкову та шістнадцяткову системи числення дл

Порядок виконання роботи
Для виконання завдання №1 необхідно вибрати свій варіант із табл. 3.3 та записати тільки число X зі знаками.   Таблиця 3.3 – Варіанти завдань

Link.exe /subsystem:console Lab1.obj.
Скопіювати вигляд налагоджувача у звіт можна, натиснувши клавіші PrtScr або Alt + PrtScr. Потім треба викликати налагоджувач OllyDbg (http://cracklab.ru/_dl/new/ollydbg110xp.rar або www.ol

Вхідний контроль знань
Написати та налагодити програму згідно з одержаним варіантом завдання. Результат записати у пам’ять. 1. Скласти день, місяць та рік свого народження. 2. Перемножити день, місяць т

Постановка задачі
Згідно з номером в групі вибрати варіант та написати на асемблері програму обчислення одного з виразів: 1. a – ab – e/c; 5. a – de – e/b; 9. (de – e)/(c – a);

Зміст звіту
1. Постановка задачі для конкретного варіанта. 2. Лістинг програми з детальним коментарем та описом роботи. 3. Рrint screen екрана 32-розрядного налагоджувача з виконаною програмо

Вхідний контроль знань
Написати та налагодити програму згідно з отриманим варіантом та оформити її у вигляді процедури з параметрами. Результат записати у пам’ять. 1. Виконати операцію логічного додавання дня та

Постановка задачі
Згідно з номером студента в групі вибрати варіант завдання та написати на асемблері програму обчислення одного з виразів: 1. 2d/с – сd; 8. 2ab – 8c/b; 15.

Зміст звіту
1. Постановка задачі для отриманого варіанта завдання. 2. Блок-схема алгоритму виконання прикладу з детальним коментарем. 3. Лістинг програми з детальним коментарем до кожної кома

Постановка задачі
Згідно з номером студента в групі вибрати варіант завдання та написати на асемблері програму обчислення одного з виразів: 1. 2(a – bс) + e/d; 9. 8c – 6ad

Зміст звіту
1. Постановка задачі для отриманого варіанта завдаання. 2. Блок-схема алгоритму виконання прикладу з детальним коментарем та описом роботи. 3. Лістинг програм: головної та зовнішн

Завдання 1.
Згідно з останньою цифрою номера студента в групі вибрати варіант завдання та написати на асемблері програму обчислення одного з прикладів з введенням та виведенням даних. П

Завдання 2.
Згідно з останньою цифрою номера студента в групі вибрати варіант завдання та написати програму з виведенням даних у файл та на екран монітора з використанням функції MessageBox (Mes

Зміст звіту
1. Постановка задачі для конкретного варіанта завдання. 2. Блок-схема алгоритму виконання прикладу з детальним коментарем та описом роботи. 3. Лістинг програми та коментарі до всі

Постановка задачі
Згідно з останньою цифрою номера в групі вибрати варіант завдання та написати на асемблері програму обчислення одного з виразів з використанням дійсних чисел та виведенням їх на екран. При цьому об

Методичні рекомендації
Для налагодження остаточного варіанта програми спочатку необхідно налагодити частину програми з отриманням одного результату та його виведенням. На другому етапі – отримання масиву результатів. На

Зміст звіту
1. Постановка задачі для конкретного варіанта. 2. Блок-схема алгоритму виконання прикладу. 3. Лістинг програми з детальним коментарем та описом роботи. 4. Рrint screen ек

Постановка задачі
Згідно з цифрою номера студента в групі вибрати свій варіант та написати програму з використанням команд обробки рядків,з обов’язковим використанням операцій введення та виведення.

Зміст звіту
1. Постановка задачі для конкретного варіанта. 2. Блок-схема алгоритму виконання прикладу з детальним коментарем та описом роботи. 3. Лістинг програми з виведенням даних на екран

Постановка задачі
Згідно з останньою цифрою номера студента в групі вибрати свій варіант та написати програму з використанням директив умовного асемблювання та дійсних чиселз обов’язковим виведенням

Завдання 1
1. Задано матрицю 3 ´ 5. Виконати транспонування цієї матриці. Результат виконання програми вивести у вікно консолі. 2. Задано матрицю 6 ´ 6. Визначити суму елементів під голов

Завдання 2
1. Задано послідовність структур. Структура містить поля: назва автомобіля, порядковий номер, ім’я власника, кількість порушень. Обчислити кількість власників з більш ніж з трьома порушеннями.

Макроси. Постановка задачі
Згідно з останньою цифрою номера студента в групі вибрати свій варіант та написати на асемблері програму обчислення одного з виразів з використанням макросів та виведенням їх на екран. При цьому об

Завдання 1
1. (2a/b) + a/3,1b; 6. (1,1ab – 3)/ab; 2. 1,1(x – a) + 210/(x – a); 7. 2,3(a – b) + 2,3(a – b)/a;

Зміст звіту
1. Постановка задачі для конкретного варіанта. 2. Блок-схема алгоритму виконання прикладу з детальним коментарем та описом роботи. 3. Лістинг програми та коментарі до всіх команд.

DATE1 ENDS
.data ; директива визначення даних str1 DATE1 <1,-1,-2,3> ; структура з іменем str1 str2 DATE1 <0,-2,-1,-3> ; структура з іменем str2

Постановка задачі
Згідно з останньою цифрою номера студента в групі вибрати свій варіант та написати програму на асемблері обчислення одного з виразів: 1. Задано масив А з N = 5 елементів. Нав

Деталі реалізації
Для виконання завдання було розроблено дві динамічні бібліотеки: ArrHandler.dllта ConsoIeIO.dll.Перша містить функції обробки масивів, друга – функції введення/вив

Public WriteLine
GetNum proto PrintNum proto Number :DWORD WriteLine proto BSIZE equ 12 .data hInst dd 0 stdin dd 0 stdout dd 0 rdn dd 0

GetNum proc
; вивести запрошення invoke WriteConsole, stdout, offset msg, MS, offset wrtn, 0 ; прочитати число в символьному вигляді invoke ReadConsole, stdin, offset buff, BSIZE, of

Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • Популярное
  • Облако тегов
  • Здесь
  • Временно
  • Пусто
Теги