\documentclass[a4paper,12pt]{memoir}
\usepackage{extsizes}
\usepackage[T2A]{fontenc}					% внутренняя кодировка  TeX
\usepackage[utf8]{inputenc}					% кодовая страница документа
\usepackage[english, russian]{babel} 		% локализация и переносы
\usepackage[top=20mm, bottom=30mm, left=20mm, right=20mm]{geometry} % Задаем отступы

\usepackage[warn]{mathtext}          		% русские буквы в формулах, с предупреждением
\usepackage{indentfirst}   					% русский стиль: отступ первого абзаца раздела
\parindent=12mm            					% Размер отступа

\usepackage{misccorr}      					% точка в номерах заголовков
\usepackage{cmap}         					% русский поиск в pdf
\usepackage[pdftex,unicode]{hyperref} 		% поддержка url-тегов

%\usepackage{amsmath}
%\usepackage{amsfonts}
%\usepackage{amssymb}

\usepackage{graphicx}
\usepackage{color}
\usepackage{xcolor}
\definecolor{light-gray}{gray}{0.97}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Списки

\usepackage{enumitem}
%%%\setlist[itemize]{noitemsep,nolistsep} % !!! [itemsep=1ex,leftmargin=1cm

\newlist{steps}{enumerate}{1}%
\setlist[steps]{label={\textbf{\arabic*.}},leftmargin=12mm,itemsep=.5em}

\newlist{substeps}{enumerate}{1}%
\setlist[substeps]{label={\textbf{\alph*.}},leftmargin=24mm,itemsep=.5em}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Подсветка синтаксиса исходного кода

\usepackage{minted}
\usemintedstyle{default} 
\newminted{nasm}{bgcolor=light-gray,frame=lines,linenos=true,showtabs=true}
\newminted{cmake}{bgcolor=light-gray,frame=lines,linenos=true,showtabs=true}
\newminted{text}{bgcolor=light-gray,frame=lines,showtabs=true,resetmargins=true}

\begin{document}


\chapter{Ассемблер для ОС MS~Windows 32 бит.}

\section{Векторная арифметика}
В лабораторной работе рассматривается вопросы создания библиотеки функций на Ассемблер  с использованием расширенного набора команд процесса SSE.

\subsection{Система сборки CMake}

Процесс сборки приложения из нескольких файлов может отличаться на разных компьютерах, например, могут использоваться разные пути для библиотек или использоваться разные компиляторы. Поэтому ручное написание Makefile является не желательным. Для создания Makefile обычно используют специальные утилиты, например, CMake, которую мы и рассмотрим в этой лабораторной работе.

\begin{steps}
\item Создайте рабочую директорию lab06 с репозиторием Mercurial.

\item Создайте файлы main.asm и CMakeLists.txt (обратите внимание на регистр символов в названии файлов, это будет важно при работе в ОС Linux):
\end{steps}

\begin{nasmcode}
global  _main
extern  _ExitProcess@4
extern  _printf

section .text   use32 
_main: 
        push    msg
        call    _printf
        add     esp, 4
        
        xor     eax, eax 
        push    eax 
        call    _ExitProcess@4

section .data 
msg     db      "Hello World!!!", 13, 10, 0
\end{nasmcode}

\begin{cmakecode}
cmake_minimum_required(VERSION 2.8.12)
project(lab06 C ASM_NASM)
add_executable(lab06 "main.asm")
set_target_properties(lab06 PROPERTIES LINKER_LANGUAGE C)
\end{cmakecode}

В первой строке файла CMakeLists.txt минимальная версия CMake, необходимая для cборки проекта. Во второй задаётся имя проекта и используемые языки программирования, хотя в нашей программе сейчас нет кода на языке Си, нам будет необходимы инструменты линковки. В третьей строке создаётся исполняемый файл lab06 и файлы с исходным кодом для его компиляции. В четвёртой строке мы указываем, что для линковки исполняемого файла надо использовать средства поставляемые с компилятором языка Си.

Далее скомпилируем нашу программу с использованием компиляторов MinGW и MS Visual Studio. Если раньше мы компилировали программы в той же директории, где хранились и исходные файлы, то теперь мы уйдём от этой вредной привычки.

\begin{steps}[resume]
\item Скомпилируйте приложение с использованием инструментов MinGW:
\end{steps}

\begin{substeps}
\item Создайте директорию build-mingw.
\item Откройте новый сеанс командной строки.
\item Перейдите в директорию lab06\\build-mingw.
\item Внесите в начало переменой окружения PATH пути до NASM, CMake и MinGW.
\item Создайте Makefile для MinGW используя CMake:
\end{substeps}
\begin{textcode}
...\lab06\build-mingw> cmake -G "MinGW Makefiles" ..
\end{textcode}
\begin{substeps}[resume]
\item Посмотрите на созданный файл.
\item Соберите приложение (mingw32-make).
\item Проверьте работу программы.
\end{substeps}

\begin{steps}[resume]
\item В директории lab06 создайте файл .hgignore:
\end{steps}

\begin{textcode}
syntax: glob
build*
\end{textcode}

\begin{steps}[resume]
\item Зафиксируйте изменения с комментарием: «Init. Test compiling with MinGW tools.».
Теперь пришло время воспользоваться инструментами MS Visual Studio для сборки приложения. В дальнейшем мы будем их использовать для создания 64-разрядных приложений.
\item Попробуйте скомпилировать приложение с использованием MSVC:
\end{steps}

\begin{substeps}
\item В lab06 создайте директорию build-msvc.
\item Откройте новый сеанс командной строки.
\item Перейдите в директорию lab06\\build-msvc.
\item Настройте окружения для работы с MSVC в x86-режиме:
\end{substeps}

\begin{textcode}
> call "{Path to MS VS}\VC\vcvarsall.bat" x86
\end{textcode}

\begin{substeps}[resume]
\item Внесите в начало переменой окружения PATH пути до NASM и CMake.
\item Создайте Makefile для MSVC используя CMake:
\end{substeps}

\begin{textcode}
...\lab06\build-msvc> cmake -G "NMake Makefiles" ..
\end{textcode}

\begin{substeps}[resume]
\item Посмотрите на созданный файл.
\item Соберите приложение:
\end{substeps}

\begin{textcode}
...\lab06\build-msvc> nmake
\end{textcode}

\begin{substeps}[resume]
\item Что произошло? Можете ли вы самостоятельно сказать причину ошибки?
\end{substeps}





\end{document}