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

Assembler #3 Получение ввода от юзера


Доброго времени суток, господа. Добро пожаловать на 3 урок по ASM. Сегодня мы научимся получать ввод из командной строки. За основу мы возьмём наш код программы "Hello, World!". Напомню, выглядит он вот так:
image.png
Вещи, которые Вы уже знаете я опять повторять не буду, чтобы Вас не утомлять. Только отмечу , что мы будем использовать секцию .bss для выделения память под имя юзера. К тому-же мы сегодня будем активно использовать подпрограммы. Всё это Вы сможете увидеть дальше.

Для начала мы напишем ту часть кода, в которой Вы будете хорошо ориентироваться:
image.png
Теперь займёмся изучением нового. Напишем код, которой будет получать имя юзера из stdin. У нас он будет находиться в лейбле _getName, как Вы уже поняли.
_getName:
mov rax, 0
mov rdi, 0
mov rsi, name
mov rdx, 16
syscall
ret
В rax мы помещаем 0, так-как мы хотим не выводить, а получать информацию.
В rdi мы помещаем 0, тем самым указываем, что источником получения инфомации будем STDIN(ввод из консоли).
В rsi мы помещаем переменную name, для которой в секции .bss выделяли память заранее.
В rdx мы помещаем 16, количество байт, которое мы выделили в секции .bss.
Компилируем и запускаем:
nasm -f elf64 hello.asm -o hello.o
ld hello.o -o hello
./hello
Программа задала нам предсказуемый вопрос:
image.png
Пишем своё имя и получаем ответ)
image.png
Всем спасибо за внимание. До новых встреч!

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