Assembler #3 Получение ввода от юзера
Доброго времени суток, господа. Добро пожаловать на 3 урок по ASM. Сегодня мы научимся получать ввод из командной строки. За основу мы возьмём наш код программы "Hello, World!". Напомню, выглядит он вот так:
Вещи, которые Вы уже знаете я опять повторять не буду, чтобы Вас не утомлять. Только отмечу , что мы будем использовать секцию .bss
для выделения память под имя юзера. К тому-же мы сегодня будем активно использовать подпрограммы. Всё это Вы сможете увидеть дальше.
Для начала мы напишем ту часть кода, в которой Вы будете хорошо ориентироваться:
Теперь займёмся изучением нового. Напишем код, которой будет получать имя юзера из 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
Программа задала нам предсказуемый вопрос:
Пишем своё имя и получаем ответ)
Всем спасибо за внимание. До новых встреч!