Изученить процессы создания, запуска и отладки программ на ассемблере Nasm под управлением операционной системы Linux, а также особенностей описания и внутреннего представления данных.
Вычислить целочисленное выражение:
Вычислить целочисленное выражение:
Дана матрица 5х4. Вычеркнуть строки с нулевой сум¬мой элементов. Организовать ввод матрицы и вывод результатов.
Дан текст не более 255 символов. Слова отделяются друг от друга пробелами. Удалить из слов гласные буквы.
Дано 8 слов по 6 символов. В начале каждого слова записан номер из двух символов. Расставить слова по возрастанию номеров.
Разработать грамматику и распознаватель описания языка программирования C++, включающего оператор цикла-пока и оператор присваивания. Считать, что условие – значение переменной логического типа, тело цикла содержит не более одного оператора, а оператор присваивания в правой части содержит только идентификаторы или целые константы. Например: while (d) while (ii) gyu=5;
- <команда> ::= <цикл> | <присваивание>
- <присваивание> ::= <идентификатор> <знак присваивания> <присваиваемое><;>
- <присваиваемое>::= <число> | <строка> | <идентификатор>
- <цикл> ::= <начало цикла> <открывающие скобки> <идентификатор> <закрывающие скобки> <команда>|<;>
- <начало цикла> ::= while,
- <знак присваивания> ::= =
- <число> ::= <знак><цифра>…<цифра>
- <цифра> ::= 0 |1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
- <символ>::= <буква>|<цифра>
- <строка>::= <двойная кавычка><символ>…<символ><двойная кавычка>
- <идентификатор> ::= <буква><символ>...<символ>
- <буква> ::= a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | t | u | v | w | x | y | z | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z
- <знак> ::= + | -
Правило построения нетерминала <команда> включает рекурсивное вложение: <цикл> в конечном счете определяется через <цикл>. Следовательно, это грамматика второго типа по Хомскому
Порядок регистров: ebx, ecx, edx, esi, edi, ebp
Результат функции:
- если строка - передаётся указатель на строку в ebx
- если не строка - передаётся прямое значение в eax
Порядок регистров: rdi, rsi, rdx, r10, r8, r9
Результат функции:
- если строка - передаётся указатель на строку в rdi
- если не строка - передаётся прямое значение в rax
- Если переменная задаётся с помощью var в регистр она передается через указатель(не зависит от типа переменной).
- Если переменная передаётся с использованием * или & она передаётся через указатель.
- Char не строка или её вид, поэтому он передаётся как допустим переменная integer (работает и в случае если char это тип результата функции).
- Всё строки и их виды всегда передаются через указатели независимо от языка.