Аналіз і оптимізація програм з використанням асемблерних вставок у програмах мовою С++
Автор: Стас Сердюк • Май 16, 2019 • Лабораторная работа • 12,580 Слов (51 Страниц) • 373 Просмотры
Лабораторна робота №1
Тема: Аналіз і оптимізація програм з використанням асемблерних вставок у програмах мовою С++
Мета: вивчення методів реалізації мовою Асемблера основних виконавчих операторів мови С++, ознайомлення з методикою включення текстів програм мовою Асемблера в програми мовою С++.
Варіант 3
#include
#include"stdafx.h"
#include
int i, k;
int main() {
int j;
int A[9];
k = 1;
for (i = 0; i <= 8; i++) {
j = k + i * 3;
if (j>18)
A[i] = j;
else {
k += 2;
A[i] = k;
}
}
for (i = 0; i <= 8; i++)
printf("%d ", A[i]);
printf("\n");
system("pause");
return 0;
}
Результат роботи програми[pic 1]
Асемблерний код програми
; Listing generated by Microsoft (R) Optimizing Compiler Version 19.00.24215.1
TITLE C:\Users\User\Desktop\лт\trt\trt\trt.cpp
.686P
.XMM
include listing.inc
.model flat
INCLUDELIB MSVCRTD
INCLUDELIB OLDNAMES
PUBLIC ?i@@3HA ; i
PUBLIC ?k@@3HA ; k
_BSS SEGMENT
?i@@3HA DD 01H DUP (?) ; i
?k@@3HA DD 01H DUP (?) ; k
_BSS ENDS
PUBLIC ___local_stdio_printf_options
PUBLIC __vfprintf_l
PUBLIC ??$__vcrt_va_start_verify_argument_type@QBD@@YAXXZ ; __vcrt_va_start_verify_argument_type
PUBLIC _printf
PUBLIC _main
PUBLIC ?_OptionsStorage@?1??__local_stdio_printf_options@@9@4_KA ; `__local_stdio_printf_options'::`2'::_OptionsStorage
PUBLIC ??_C@_03JDANDILB@?$CFd?5?$AA@ ; `string'
PUBLIC ??_C@_01EEMJAFIK@?6?$AA@ ; `string'
PUBLIC ??_C@_05PDJBBECF@pause?$AA@ ; `string'
EXTRN __imp____acrt_iob_func:PROC
EXTRN __imp____stdio_common_vfprintf:PROC
EXTRN __imp__system:PROC
EXTRN @_RTC_CheckStackVars@8:PROC
EXTRN __RTC_CheckEsp:PROC
EXTRN __RTC_InitBase:PROC
EXTRN __RTC_Shutdown:PROC
; COMDAT ?_OptionsStorage@?1??__local_stdio_printf_options@@9@4_KA
_BSS SEGMENT
?_OptionsStorage@?1??__local_stdio_printf_options@@9@4_KA DQ 01H DUP (?) ; `__local_stdio_printf_options'::`2'::_OptionsStorage
_BSS ENDS
; COMDAT rtc$TMZ
rtc$TMZ SEGMENT
__RTC_Shutdown.rtc$TMZ DD FLAT:__RTC_Shutdown
rtc$TMZ ENDS
; COMDAT rtc$IMZ
rtc$IMZ SEGMENT
__RTC_InitBase.rtc$IMZ DD FLAT:__RTC_InitBase
rtc$IMZ ENDS
; COMDAT ??_C@_05PDJBBECF@pause?$AA@
CONST SEGMENT
??_C@_05PDJBBECF@pause?$AA@ DB 'pause', 00H ; `string'
CONST ENDS
; COMDAT ??_C@_01EEMJAFIK@?6?$AA@
CONST SEGMENT
??_C@_01EEMJAFIK@?6?$AA@ DB 0aH, 00H ; `string'
CONST ENDS
; COMDAT ??_C@_03JDANDILB@?$CFd?5?$AA@
CONST SEGMENT
??_C@_03JDANDILB@?$CFd?5?$AA@ DB '%d ', 00H ; `string'
CONST ENDS
; Function compile flags: /Odtp /RTCsu /ZI
; File c:\users\user\desktop\лт\trt\trt\trt.cpp
; COMDAT _main
_TEXT SEGMENT
_A$ = -52 ; size = 36
_j$ = -8 ; size = 4
_main PROC ; COMDAT
; 6 : int main() {
00000 55 push ebp
00001 8b ec mov ebp, esp
00003 81 ec f8 00 00
...