Assembler #4 Математические операции и стек
Доброго времени суток, господа. Сегодня мы продолжаем изучение ASM и рассмотрим такую тему, как математические операции и высним что такое стек.
Математические операции
Математические операции используются для математических манипуляций с регистрами. Форма записи математической операции обычно такая:
операция регистр, значение/регистр
Первый регистр - объект над которым происходит операция.
Например:
add rax, 5
cmp rax, rbx
Список возможных математических операций:
ASCII
ASCII - это метод через который новые современные компьютеры отображают строки текста. Компьютеры способны хранить только числа, поэтому и символы хранятся в виде чисел. ASCII позволяет привязать к каждому символу своё число. В итоге мы получаем целую таблицу соответсвий значений определённым символам.
Отображение цифр
Вот код подпрограммы, которая позволяет нам вывести одну цифру в пределах от 0 до 9:
section .data digit db 0,10 _printRAXDigit: add rax, 48 mov [digit], al mov rax, 1 mov rdi, 1 mov rsi, digit mov rdx, 2 syscall ret
Значение в регистре rax
увеличено на 48
. Если вы посмотрите в таблицу, то увидите, что 48
- значение, что равно цифре 0
, с остальными цифрами всё, соответсвенно, также.
Чтобы вывести цифру 7
нам надо:
mov rax, 7
call _printRAXDigit
Тестирование математических операций
Бегло пройдемся по маматическим операциям:
Из этой таблицы должен быть понятен принцип работы. Так-что стоять на одном месте не будем.
Стек
Стек, как и регистры, позволяет хранить данные. Он просто даёт нам для этого несколько иной путь.
Представьте стопку бумаги. Вы можете брать с неё листы только сверху-вниз и никак иначе. Чтобы получить листик из центра Вам необходимо забрать все листики над ним. Точно так-же работает и стек.
Терминология
Если вы хотите положить данные на стек, то вы производите операцию push
, если же вы хотите эту информацию забрать то вы должны произвести операцию pop
.
Операции над стеком
Чтобы не мучать вас пустыми объяснениями у меня для вас есть ещё одна таблица:
Вот иллюстрация того, как устроена команда push
:
А вот команда pop
:
Пример кода
В качестве домашнего задания попробуйте написать такой простой код: