Модульное программирование системных программ на языке Аssembler
Автор: yyuyy • Июнь 13, 2020 • Лабораторная работа • 2,115 Слов (9 Страниц) • 477 Просмотры
Министерство образования и науки Украины
Харьковский национальный университет радиоэлектроники
Кафедра СТ
Отчёт
по лабораторной роботе №5
дисциплины «Системное программирование»
«Модульное программирование системных программ
на языке Аssembler»
Выполнил: ст. гр. АКТСИ-17-1 Здорик Н.В. | Проверил: доцент кафедры СТ Коваленко А.И. |
Харьков 2018
МОДУЛЬНОЕ ПРОГРАММИРОВАНИЕ СИСТЕМНЫХ ПРОГРАММ
НА ЯЗЫКЕ ASSEMBLER
Цель работы:
1. Изучение аппаратного построения процессора
2. Изучение команд на языке Ассемблера для передачи управления.
3. Изучение модульного построения программ с использованием директив языка Ассемблер.
4. Изучение способов передачи параметров процедурам и получение результатов в различных вариантах (с использованием глобальных переменных, регистров, стека).
5. Изучение инструктивных соглашений о вызовах процедур при
компоновке модулей (параметров атрибута «Модификатор языка» «С» и «STDCALL»).
6. Изучение основных команд и директив языка программирования
Ассемблер для выполнения вычислений с использованием целочисленной арифметики (сложение, вычитание, умножение, деление).
7. Ознакомление с функциональными возможностями программы- компилятора MASM32.
8. Ознакомление с функциональными возможностями программы- отладчика OllyDbg.
9. Получить навыки разработки модульных программ на языке
Ассемблера и их отладки.2 Исходные данные и постановка задачи
Задания лабораторной работы необходимо выполнять поэтапно.
Примерная последовательность этапов работы:
Задания лабораторной работы необходимо выполнять поэтапно.
Последовательность этапов работы для выполнения задания 1.
1. Проанализировать код выполнения арифметических вычислений
программы, созданной в лабораторной работе № 2.
2. Разработать алгоритмы и написать код процедур для выполнения
арифметических операций (сложение, вычитание, умножение, деление). Длина
используемых параметров – слово.
3. Разместить код процедур в теле основной программы.
4. Используя глобальные переменные в качестве передаваемых значений
процедурам, произвести отладку созданной программы с помощью отладчика
OllyDbg. При необходимости произвести корректировку алгоритма и
программы.
Задание
Создать 32-разрядное модульное приложение, реализующее все
арифметические операции в виде процедур. Передачу параметров процедурам
производить с использованием глобальных переменных.
.486 ;
.model flat ,stdcall
option casemap: none
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\include\msvcrt.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\msvcrt.lib
.data
msgboxtitle db "Лабараторная робота №5. Задание №1",0 ;
msgboxtxt db 512 dup(?) , 0; output buffer
format db " %d",0
namberr dword ?
inhandle dword ? ;ячейка памяти для хэндла ввода
outhandle dword ?; memory cell for output handle
msg1310 byte 13, 10
namberw dword ?
buf1f dw 30 dup(?)
x sword 10
x2 sword ?
a sword -2
b sword -4
a_b sword ?
x2_ab sword ?
x_b sword ?
;(x+b)*(2*x-a*b)
xb_a2bx sword ?
;(x+b)*(2*x-a*b)/y
y sword 2
xb_a2bx_y sword ?
;(x+b)*(2*x-a*b)/y+d
d sword 6
f sword ?
vivod_1 db "2X= ","%d",0dh,0ah,
"A*B= ","%d ",0dh,0ah,
"2X-A*B= ","%d ",0dh,0ah,
"(x+b)*(2*x-a*b)= ","%d",0dh,0ah,
"x+b= ","%d ",0dh,0ah,
"(x+b)*(2*x-a*b)/y = ","%d ", 0dh,0ah,
"(x+b)*(2*x-a*b)/y+d = ","%d ",0dh,0ah,0
;for console
bf0 byte "Zdorik Nikita Viktorovich AKTSI-17-1",0
...