Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ЯП лаба 1

.docx
Скачиваний:
4
Добавлен:
03.11.2023
Размер:
24.69 Кб
Скачать

Министерство образования и науки Российской Федерации

Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования «ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ» (ТУСУР)

Кафедра комплексной информационной безопасности электронно-вычислительных систем (КИБЭВС)

Трансляция программ

Отчет по лабораторной работе №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

Соседние файлы в предмете Языки программирования