Уважаемые пользователи Голос!
Сайт доступен в режиме «чтение» до сентября 2020 года. Операции с токенами Golos, Cyber можно проводить, используя альтернативные клиенты или через эксплорер Cyberway. Подробности здесь: https://golos.io/@goloscore/operacii-s-tokenami-golos-cyber-1594822432061
С уважением, команда “Голос”
GOLOS
RU
EN
UA
azrael
6 лет назад

Assembler #4 Математические операции и стек


Доброго времени суток, господа. Сегодня мы продолжаем изучение ASM и рассмотрим такую тему, как математические операции и высним что такое стек.

Математические операции

Математические операции используются для математических манипуляций с регистрами. Форма записи математической операции обычно такая:
операция регистр, значение/регистр
Первый регистр - объект над которым происходит операция.
Например:
add rax, 5
cmp rax, rbx
Список возможных математических операций:

ASCII

ASCII - это метод через который новые современные компьютеры отображают строки текста. Компьютеры способны хранить только числа, поэтому и символы хранятся в виде чисел. ASCII позволяет привязать к каждому символу своё число. В итоге мы получаем целую таблицу соответсвий значений определённым символам.
image.png

Отображение цифр

Вот код подпрограммы, которая позволяет нам вывести одну цифру в пределах от 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

Тестирование математических операций

Бегло пройдемся по маматическим операциям:
image.png
Из этой таблицы должен быть понятен принцип работы. Так-что стоять на одном месте не будем.

Стек

Стек, как и регистры, позволяет хранить данные. Он просто даёт нам для этого несколько иной путь.
Представьте стопку бумаги. Вы можете брать с неё листы только сверху-вниз и никак иначе. Чтобы получить листик из центра Вам необходимо забрать все листики над ним. Точно так-же работает и стек.

Терминология

Если вы хотите положить данные на стек, то вы производите операцию push, если же вы хотите эту информацию забрать то вы должны произвести операцию pop.

Операции над стеком

Чтобы не мучать вас пустыми объяснениями у меня для вас есть ещё одна таблица:
image.png
Вот иллюстрация того, как устроена команда push:
image.png
А вот команда pop:
image.png

Пример кода

В качестве домашнего задания попробуйте написать такой простой код:
image.png

6
0.082 GOLOS
На Golos с August 2018
Комментарии (1)
Сортировать по:
Сначала старые