<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://www.wikicshse.ru/index.php?action=history&amp;feed=atom&amp;title=CAOS-2024%2F25</id>
	<title>CAOS-2024/25 - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://www.wikicshse.ru/index.php?action=history&amp;feed=atom&amp;title=CAOS-2024%2F25"/>
	<link rel="alternate" type="text/html" href="https://www.wikicshse.ru/index.php?title=CAOS-2024/25&amp;action=history"/>
	<updated>2026-06-06T12:14:32Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://www.wikicshse.ru/index.php?title=CAOS-2024/25&amp;diff=117&amp;oldid=prev</id>
		<title>imported&gt;AlexMyltsev: Добавил ссылку на стайлгайд</title>
		<link rel="alternate" type="text/html" href="https://www.wikicshse.ru/index.php?title=CAOS-2024/25&amp;diff=117&amp;oldid=prev"/>
		<updated>2024-11-12T10:10:09Z</updated>

		<summary type="html">&lt;p&gt;Добавил ссылку на стайлгайд&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Вход в тестирующую систему: https://caos2024.myltsev.ru/&lt;br /&gt;
&lt;br /&gt;
Материалы лекций: https://caos.myltsev.ru/lectures/&lt;br /&gt;
&lt;br /&gt;
Чатик курса - https://t.me/+LAhlvwO1KV8wNjYy&lt;br /&gt;
&lt;br /&gt;
Канал с объявлениями - https://t.me/hse_caos_2024_c&lt;br /&gt;
&lt;br /&gt;
Форма для анонимного фидбека - https://forms.gle/F8vGpjLPybCexfQ69&lt;br /&gt;
&lt;br /&gt;
Стайлгайд: https://caos2024.myltsev.ru/style.html&lt;br /&gt;
&lt;br /&gt;
[https://exuberant-arthropod-be8.notion.site/21-22-0f236f7d03c74dfbbd945f93651758a2 Конспект лекций 2021 года от студентов]&lt;br /&gt;
&lt;br /&gt;
== Чатики и преподаватели по группам ==&lt;br /&gt;
Лектор — Александр Мыльцев [https://t.me/myltsev @myltsev]&lt;br /&gt;
&lt;br /&gt;
Старший семинарист - Игорь Минеев [https://t.me/objatie_groba @objatie_groba]&lt;br /&gt;
&lt;br /&gt;
= Настройка рабочего окружения =&lt;br /&gt;
===kks===&lt;br /&gt;
https://github.com/darkkeks/kks&lt;br /&gt;
&lt;br /&gt;
kks это консольная утилитка для курса, выполняющая много вещей, среди которых можно выделить несколько основных:&lt;br /&gt;
# Скачивание задач/сэмплов/контрольных с помощью одной команды. То же самое со сдачей задач: можно сдать и получить сразу результат. &lt;br /&gt;
# Генерация тестов с помощью скриптов и их тестирование.&lt;br /&gt;
# Просмотр рейтинга (как общего, так и по группам) в удобном формате&lt;br /&gt;
&lt;br /&gt;
Пример использования:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;kks sync  # скачивание задач&lt;br /&gt;
# тут вы написали свой код&lt;br /&gt;
kks test --sample  # тестирование&lt;br /&gt;
kks submit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Больше примеров можно посмотреть в репозитории&lt;br /&gt;
===Библиотека ввода-вывода===&lt;br /&gt;
Библиотека ввода-вывода для ассемблера x86: [https://caos2024.myltsev.ru/simpleio_x86_64.S simpleio_x86_64.S]&lt;br /&gt;
&lt;br /&gt;
Все библиотечные функции не меняют значения регистров rsp, rbp, rbx, r12, r13, r14, r15.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
call writei32   // напечатать на экране значение edi&lt;br /&gt;
                // как знаковое десятичное число&lt;br /&gt;
call readi32    // ввести с клавиатуры число и сохранить в eax&lt;br /&gt;
call readi64    // ввести с клавиатуры число и сохранить в rax&lt;br /&gt;
call writei64   // вывести rdi&lt;br /&gt;
call finish     // завершить исполнение программы&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Внутри виртуальной машины её можно скачать командой &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;wget https://caos2024.myltsev.ru/simpleio_x86_64.S&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если получаете сообщение, что Wget не установлен на вашей системе (на Ubuntu Desktop по умолчанию нет), то установите его следующей командой: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;sudo apt install wget&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Docker для пользователей MacOS (intel based)===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Проверялось на MacOS BigSur и Monterey&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Загрузить сам докер можно отсюда: [https://docs.docker.com/get-docker/ тык]&lt;br /&gt;
&lt;br /&gt;
Команда для запуска: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;docker run -it --rm -v `pwd`:/caos -w /caos ubuntu&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В терминале заходите в свою папку с акосом и запускаете эту команду. После нее вы начинаете работать с контейнером Ubuntu в папке /caos, где будет все содержимое вашей папки в основной ОС. &lt;br /&gt;
Изменять содержимое внутри /caos можно и изнутри контейнера, и снаружи, изменения будут видны и там и там.&lt;br /&gt;
&lt;br /&gt;
Теперь вы можете писать код внутри своей любимой IDE (запущенной напрямую в вашей ОС, например VSCode), а компилить и запускать в докере через терминал.&lt;br /&gt;
&lt;br /&gt;
===Docker для пользователей MacOS на Apple Silicon===&lt;br /&gt;
Добавьте в .bashrc или .zshrc:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;export DOCKER_DEFAULT_PLATFORM=linux/amd64&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После этого перезапустите Docker.&lt;br /&gt;
&lt;br /&gt;
Вариант2: &lt;br /&gt;
* Скачиваем docker.&lt;br /&gt;
* Переходим в папку с задачами в терминале.&lt;br /&gt;
* Выполняем &amp;lt;code&amp;gt;docker run --platform linux/amd64 -it --rm -v `pwd`:/caos -w /caos ubuntu&amp;lt;/code&amp;gt;&lt;br /&gt;
* Делаем &amp;lt;code&amp;gt;apt update&amp;lt;/code&amp;gt;&lt;br /&gt;
* Делаем &amp;lt;code&amp;gt; apt -y install build-essential&amp;lt;/code&amp;gt;&lt;br /&gt;
* Собираем задачки командой &amp;lt;code&amp;gt;gcc -g задача.S simpleio_x86_64.S&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===CLion===&lt;br /&gt;
Для начала скачайте CLion с официального сайта и устанавите его.&lt;br /&gt;
====Если у вас не linux: вар. 1 - docker====&lt;br /&gt;
Скачайте и установите docker desktop. Добейтесь того, чтобы у вас заработал docker hello world (&amp;lt;code&amp;gt;docker run --rm hello-world&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Если у вас MacOs на арме&amp;lt;/b&amp;gt; сделайте то, что написано выше.&lt;br /&gt;
&lt;br /&gt;
После этого нам потребуется специальный образ с необходимыми для курса библиотеками и программами. &lt;br /&gt;
Создайте файл с именем Dockerfile и следующим содержанием:&lt;br /&gt;
&amp;lt;pre&amp;gt;FROM ubuntu:latest&lt;br /&gt;
&lt;br /&gt;
RUN apt update &amp;amp;&amp;amp; apt install -y gdb make cmake g++&lt;br /&gt;
WORKDIR /caos&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В директории с этим запустите эту команду чтобы собрать образ: &amp;lt;code&amp;gt;docker build -t caos .&amp;lt;/code&amp;gt; и дождитесь пока она выполнится.&lt;br /&gt;
&lt;br /&gt;
После этого откройте окно настроек, перейдите в пункт Build, Execution, Deployment -&amp;gt; Toolchains и добавьте новый Toolchain с типом Docker.&lt;br /&gt;
В поле Image укажите &amp;lt;code&amp;gt;caos:latest&amp;lt;/code&amp;gt;, а остальные поля должны определиться автоматически. Поместите этот Toolchain первым в списке сделав его default&amp;#039;ным.&lt;br /&gt;
&lt;br /&gt;
====Если у вас не linux: вар. 2 - wsl (Windows only)====&lt;br /&gt;
&lt;br /&gt;
Установите wsl 2, выберите дистрибутив Ubuntu.&lt;br /&gt;
Внутри wsl 2 поставьте необходимые пакеты (&amp;lt;code&amp;gt;sudo apt install make cmake g++ gdb&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
После этого откройте окно настроек, перейдите в пункт Build, Execution, Deployment -&amp;gt; Toolchains и добавьте новый Toolchain с типом WSL.&lt;br /&gt;
Все поля должны определиться автоматически. Поместите этот Toolchain первым в списке сделав его default&amp;#039;ным.&lt;br /&gt;
&lt;br /&gt;
====Далее====&lt;br /&gt;
Создайте проект (можете выбрать C Executable, но это не особо принципиально)&lt;br /&gt;
Скачайте simpleio_x86_64.S и поместите в корень проекта.&lt;br /&gt;
&lt;br /&gt;
В &amp;lt;code&amp;gt;CMakeLists.txt&amp;lt;/code&amp;gt; удалите всё и вставьте это:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.10)&lt;br /&gt;
project(caos ASM)&lt;br /&gt;
&lt;br /&gt;
file(GLOB_RECURSE sources_list LIST_DIRECTORIES true ./*)&lt;br /&gt;
foreach(file ${sources_list})&lt;br /&gt;
    IF(${file} MATCHES &amp;quot;.S$&amp;quot; AND NOT ${file} MATCHES &amp;quot;simpleio_x86_64.S&amp;quot;)&lt;br /&gt;
        get_filename_component(X ${file} NAME)&lt;br /&gt;
        add_executable(${X} ${file} simpleio_x86_64.S)&lt;br /&gt;
    endif()&lt;br /&gt;
endforeach()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Сделайте Reload Cmake project (Внизу выберите вкладку Cmake и нажмите слева на кнопку обновления с двумя стрелочками).&lt;br /&gt;
&lt;br /&gt;
Этот конфиг написан таким образом, чтобы эффективно работать совместно с kks. На каждый .S файл (кроме библиотеки simpleio_x86_64.S) он создаст цель для сборки. &lt;br /&gt;
После того как у вас в проекте появляется новый файл (например после &amp;lt;code&amp;gt;kks sync&amp;lt;/code&amp;gt;) нужно делать Reload Cmake project.&lt;br /&gt;
Выберите справа сверху интересующий вас файл и запускайте.&lt;br /&gt;
&lt;br /&gt;
====Подсветка синтаксиса====&lt;br /&gt;
Если она работает неправильно, откройте файл &amp;lt;code&amp;gt;simpleio_x86_64.S&amp;lt;/code&amp;gt;, нажмите на его вкладку в списке открытых файлов сверху правой кнопкой мыши и выберите &amp;quot;Associate file type&amp;quot;. В списке выберите Assembly Language.&lt;br /&gt;
&lt;br /&gt;
====Дебагер====&lt;br /&gt;
Дебагер работает из-коробки.&lt;br /&gt;
&lt;br /&gt;
Чтобы узнать значения регистра напишите в поле снизу строку $eax и нажмите на кнопку &amp;quot;+&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Yabloko ===&lt;br /&gt;
Для того чтобы собрать Yabloko вам потребуется &lt;br /&gt;
* Компилятор, который умеет собирать elf-файлы под архитектуру x86. В мире линукса для такого традиционно собирают ещё одну копию &amp;lt;code&amp;gt;gcc&amp;lt;/code&amp;gt; (и называют &amp;lt;code&amp;gt;x86_64-elf-gcc&amp;lt;/code&amp;gt;, чтобы не путаться), однако &amp;lt;code&amp;gt;clang&amp;lt;/code&amp;gt;, в отличие от &amp;lt;code&amp;gt;gcc&amp;lt;/code&amp;gt;, в стандартной поставке уже имеет кросс-компилятор и кросс-линкер, так что можно (пока в теории) использовать его.&lt;br /&gt;
* [https://www.qemu.org/download/ QEMU]&lt;br /&gt;
&lt;br /&gt;
Всё это вы можете получить локально, не зависимо от того, на какой вы ОС.&lt;br /&gt;
Если вы по какой-то причине решили использовать учебный (или любой другой) сервер, то не забывайте добавлять к команде ssh опцию -X, которая пробрасывает X-сервер, а также по настроению опцию -C, которая сжимает передаваемые данные. Если у вас не линукс, то в таком случае вам потребуется ещё и скачать и установить X-сервер. Для [https://www.xquartz.org/ MacOs]. Для [https://sourceforge.net/projects/xming/ windows]. Если вы пользуетесь Putty, то поставьте галочку в Connection -&amp;gt; SSH -&amp;gt; X11 -&amp;gt; Enable X11 forwarding.&lt;/div&gt;</summary>
		<author><name>imported&gt;AlexMyltsev</name></author>
	</entry>
</feed>