Сведения о структуре ввода и данных.
Продолжайте чтение на каждый символ (rdx=1
), в цикле. Входными символами будут, например, '1', '2', '3', '4', '5', 10
, символ 10
- это новая строка (возможно, проверьте также и другие пробельные символы, например 13, 9, 32
, или даже переверните тест, любой символ из диапазона '0'..'9'
- это конец номера).
При чтении цифр, решите, хотите ли вы сохранить их как строки или числа.
Если строки, то записывают каждую новую цифру в память по адресу arr + n * 8 + input_char_index, поместив, вероятно, нулевое значение в качестве терминатора после номера (ваш текущий массив может содержать не более 7 символов длинных строк + ноль для каждого " n ") или сохранить длину строки в отдельный массив или в качестве первого байта элемента и сделать первый символ в смещении +1 после байта длины и т. д. (вы можете спроектировать свою структуру данных, как вы пожелаете). Чтобы отобразить такую строку, просто загрузите ее адрес lea rcx,[arr+n*8]
и вычислите ее длину с помощью strlen
(она будет считывать + счет char по char до тех пор, пока не будет найден 0
) или загрузите длину, если вы ее где-то сохранили, и sys_write.
Если вы хотите сохранить номера, установить некоторые запасной регистр в качестве нулевого упреждающего ввода (например rdi
), то для каждого значного чтения делать add rdi,rdi
lea rdi,[rdi+rdi*4]
=> это rdi *= 10
, а затем преобразовать входной символ из ASCII цифры до 64b- -9 и добавьте его в rdi
... цикл до тех пор, пока не будет прочитана цифра или новая строка (но число без знака 64b будет переполняться для ввода 19 + цифр). После окончания ввода введите значение arr
, теперь arr
будет содержать числовые значения QWORD.
Для вывода их вы должны сделать преобразование в противоположном направлении, от численного значения в некоторый буфер памяти, производя цифру по символам ASCII (достаточно большой буфер, снова 20+ символов безопасны для значения 64b). После того, как ваш номер хранится в памяти в виде строки ASCII +, знайте, что это длина, вы можете SYS_WRITE на stdout.
Вы также можете рассмотреть несколько дополнительных руководств и перечитать некоторую теорию об общих структурах данных/etc, памяти, строковых кодировках, регистрах, режимах адресации x86, ... прежде чем писать свой собственный код (так как он чувствует, что вы слишком много догадываетесь, как все работает).
Вам нужно загрузить 'n' в регистр, если вы хотите его индексировать. Остальная часть вашего вопроса неясна. – Jester
извините за неясность, но английский не мой родной язык. Я имею в виду, когда я изменяю mov rdx, 2 я могу читать числа с клавиатуры, например 11, когда я изменяю mov rdx, 3 Я могу читать числа, подобные 111. Я хочу прочитать все возможные длины чисел. –
Прочитайте их в цикле по цифре? – Jester