ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 27.03.2024
Просмотров: 8
Скачиваний: 1
Министерство образования и науки Российской Федерации
Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования «ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ» (ТУСУР)
Кафедра комплексной информационной безопасности электронно-вычислительных систем (КИБЭВС)
Трансляция программ
Отчет по лабораторной работе №1 по дисциплине «Языки программирования»
|
|
Студент гр. ***-* |
|
|
|
|
|
________.2023 |
|
|
Принял |
|
|
Кандидат Технических наук, Доцент каф. КИБЭВС |
|
__________ |
________ А.С. Романов |
|
|
________.2023 |
2023
1 Введение
Цель работы - Знакомство с основными элементами языков и сред программирования, изучение процессов трансляции.
2 Ход работы
2.1 Трансляция
В таблице 1.1 представлены названия файлов информация о их трансляции.
Название файла |
Трансляция |
0_a_Snuke |
Успешно |
1_a_XraY |
Успешно |
2.01.nullptr |
Успешно |
2.02.constexpr |
Успешно |
2.03.if.switch |
Успешно |
2.04.initializer.list |
Успешно |
2.05.structured.binding |
Успешно |
2.06.auto |
Успешно |
2.07.decltype |
Успешно |
2.08.tail.return.type |
Успешно |
2.09.decltype.auto |
Успешно |
2.10.if.constexpr |
Успешно |
2.11.for.loop |
Успешно |
2.12.external.template |
Успешно |
2.13.alias.template |
Успешно |
2.14.default.template.param |
Успешно |
2.15.variadic.template.param |
Успешно |
2.16.fold.expression |
Успешно |
2.18.non.type.template.auto |
Успешно |
2.19.delegate.constructor |
Успешно |
2.20.strong.type.enum |
Успешно |
Рассмотрим файл 0_a_Snuke, например, вызов функции внутри программы происходит через solver.solve() , однако в ассемблере это будет:
lea rax, [rbp-9]
mov rdi, rax
call test::Solver::solve()
Сравнение переменных if (sz(ans) > c) puts("IMPOSSIBLE"):
lea rax, [rbp-80]
mov rdi, rax
call std::vector<long long, std::allocator<long long> >::size() const
movsx rdx, eax
mov rax, QWORD PTR [rbp-48]
cmp rdx, rax
setg al
test al, al
je .L13
mov edi, OFFSET FLAT:.LC0
call puts
jmp .L14
Идентификатор х++ реализован через:
mov rax, QWORD PTR [rbp-88]
add rax, 1
mov QWORD PTR [rbp-88], rax
Сравнение переменных между собой:
call std::basic_istream<char, std::char_traits<char> >::operator>>(long long&)
mov rdx, rax
lea rax, [rbp-40]
mov rsi, rax
mov rdi, rdx
call std::basic_istream<char, std::char_traits<char> >::operator>>(long long&)
mov rdx, rax
lea rax, [rbp-48]
mov rsi, rax
mov rdi, rdx
call std::basic_istream<char, std::char_traits<char> >::operator>>(long long&)
.LEHE0:
Операция умножения для ассемблера реализуется кодом ниже
mov rdx, QWORD PTR [rbp-88]
mov rax, QWORD PTR [rbp-32]
imul rdx, rax
mov eax, DWORD PTR [rbp-20]
cdqe
add rax, rdx
mov QWORD PTR [rbp-88], rax
3 Заключение
В результате проделанной работы были транслированы коды с языков С и С++ на язык ассемблер. Подобранны файлы с GitHub для трансляции. Файл 0_a_Snuke был взят для сравнения языков.
Отчёт оформлен согласно ОС ТУСУР 2021