По условиям задачи мне необходимо написать программу на с++ которая обрабатывает определённым образом строку. Загвоздка заключается в том, что ввод с клавиатуры должен производится asm вставкой.
На данный момент, единственное что у меня получается сделать это вывести длину введённой строки. Код выглядит так:
#include <iostream>
using namespace std;
int main(void)
{
int x = 10;
int y;
asm (".lcomm buff, 32;"
"movl $3, %%eax;"
"movl $0, %%ebx;"
"movl $buff, %%ecx;"
"movl $32, %%edx;"
"int $0x80;"
"movl %%eax, %0;"
:"=r"(y)
:"r"(x)
:"%eax");
cout<<y;
}
Часть кода взята из примера, в котором происходит ввод с клавиатуры и вывод введённых данных на экран на чистом асме.
Как мне записать в переменную 'y' (допустим, если она типа char*) введённую строку? Чтобы cout<<y вывела то что я введу.
Пишу в Eclipse под линухом.
Примечание:
если я возвращаю строку, объявленную в асме, например, как .string:
stringname
то всё возвращается нормально ("movl $stringname, %0;"), проблема именно в том, что не понимаю как вернуть строку которую ввели, не нашёл способа получить указатель на неё.
По идее, кроется в $buff но как работать с ним я толком не понял.
Примечание:
Суть примечания 1 в том, что читать строку и выводить на экран у меня получилось, приведённый код работает по тем же принципам что и те три по ссылкам (код из второй ссылки уже видел ранее), причём чтение выглядит так же.
У меня не получается записать введённую строку в char* (в моём коде необходимо заменить int y на char *y и, соответственно, дописать после строки "int $0x80;" код для занесения строки в переменную). Сколько ни роюсь в мануалах по асму не могу понять как это сделать.
RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.
Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.
Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.