2016-02-06 2 views
1

Я пишу программу, чтобы проверить, является ли строка палиндром или нет. Я хочу взять строку в качестве ввода от пользователя. Строка может содержать любой символ от цифр до специальных символов. Как я могу принимать данные от пользователя. Я пробовал следующий код.Как взять строку в качестве вставки в сборке x64

global _start 
section .bss 
    string resb 9 

section .text 
_start: 
    mov rax,0   ;Am I doing this correct ? 
    mov rdi,0 
    mov rsi,string 
    mov rdx,8 
    syscall 

    xor rax,rax 
    mov rdx,[string] 
    mov rax,1 
    mov rdi,1 
    mov rsi,rdx 
    mov rdx,8 
    syscall 

    mov rax,0 
    mov rdi,0 
    syscall 

Является ли приведенный выше код правильным, потому что, когда я выводил строку, он обнаруживал ошибку сегментации. Ошибка

Segmentation fault (core dumped) 

Я кодирования в NASM в Linux (Ubuntu 14.04)

+0

Вы также должны показать код с ошибкой ... также я предполагаю, что у вас есть инструкция syscall и что вы находитесь в Linux ... но мне не нужно было предполагать, вы должны были сказать нам, что тоже , Тем не менее, чтение выглядит правильно. – Jester

+0

OK Я обновляю его – Paras

ответ

2

Для печати необходимо также передать адрес так mov rdx, [string] неправильно, вам нужно mov rdx, string или lea rdx, [string]. Кроме того, ваш последний syscall ошибочен, потому что это снова read. Вероятно, вы хотите mov rax, 60 сделать это exit.

См., Поэтому вы должны разместить Minimal, Complete, and Verifiable example.