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

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

https://t.me/Torchik_Ru

Доброго времени суток, господа. Добро пожаловать на 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

Программа задала нам предсказуемый вопрос:

Пишем своё имя и получаем ответ)

Всем спасибо за внимание. До новых встреч!

Report Page