Ассе́мблер (от англ. assembler — сборщик) — транслятор программы из текста на языке ассемблера, в программу на машинном языке.
Как и сам язык, ассемблеры, как правило, специфичны для конкретной архитектуры, операционной системы и варианта синтаксиса языка, поскольку работают с мнемониками машинных инструкций определённого процессора. Вместе с тем, ассемблеры могут быть мультиплатформенными или вовсе универсальными, то есть работать на разных платформах и операционных системах. Среди ассемблеров можно также выделить группу кросс-ассемблеров, имеющих возможность собирать машинный код и исполняемые модули (файлы) для архитектур, отличных от архитектуры и/или операционной системы, в которых работает сам ассемблер (например, трансляция программы для микроконтроллера ассемблером, работающим на компьютере).
В Викисловаре есть статья «макроассемблер»
Многие современные ассемблеры являются макроассемблерами (от греч. μάκρος — большой, обширный), то есть макропроцессорами на базе языка ассемблера[1]. Кроме макросов, ассемблеры при трансляции выполняют другие директивы, набор которых зависит не от аппаратной платформы, для которой транслируется программа, а от самого используемого транслятора.
Ассемблирование может быть не первым и не последним этапом на пути получения исполнимого модуля программы. Так, многие компиляторы с языков программирования высокого уровня выдают результат в виде программы на языке ассемблера, которую в дальнейшем обрабатывает ассемблер. В свою очередь, результатом ассемблирования может быть не исполняемый, а объектный модуль, содержащий разрозненные блоки машинного кода и данных программы, из которого (или из нескольких объектных модулей) в дальнейшем с редактора связей (линкера) может быть получен исполняемый файл.
В отличие от компиляции программ на языках высокого уровня, ассемблирование является более или менее однозначным и обратимым процессом, поскольку в языке ассемблера каждой мнемонике соответствует одна машинная инструкция, в то время как в высокоуровневых языках каждое выражение может преобразовываться в большое число различных инструкций (операция, обратная ассемблированию, называется дизассемблированием). Трансляцию ассемблерных программ иногда также называют компиляцией.
В квадратиках, где символы не открываются вставлял строгие выражения.
#define _USE_MATH_DEFINES
#include <iostream>
#include<cmath>
signed main() {
double x, z;
std::cout << "x=";
std::cin >> x;
if (x < -M_PI)
z = log(abs(x));
else if (-M_PI < x < M_PI)
z = sin(x) + cos(2 * x);
else if (M_PI < x < 10)
z = pow(x, 3) + 1;
else if (10 < x < 100)
z = (x + 1) / (x * x + 8);
else
z = log(x);
std::cout << z << std::endl;
return 0;
}
div -целая часть от деления первого числа на второе
mod -остаток от деления первого числа на второе
10 div 5 = (5*2+0) div 5 = 2
5 mod 3 = (3*1+2) mod 3 = 2
100 div 20 = (20*5+0) div 20 = 5
4 mod 1 = (1*4+0) mod 1 = 0
10 mod 3 * 11 mod 2 = ( (3*3+1) mod 3) * ( (2*5+1) mod 2) = 1 * 1 = 1