Как изменить адрес строки на n-й символ строки - PullRequest
1 голос
/ 30 сентября 2019

Я новичок, пишу программу на 64-битном языке, которая должна запрашивать у пользователя строку длиной 8 символов и «вырезать» n символов из строки на основе введенного пользователем n (меньше чемили равно 8). Результат не тот, который я ожидаю.

Я пытаюсь изменить адрес строки так, чтобы он указывал на символ, который приходит n символов позже в строке. Я уже пытался использовать rep movsb, но не получилось. Я мог бы использовать петли и прыжки, но я не хочу. Я считаю, что способ, которым я пытаюсь, должен быть достаточно хорошим. Также, используя nasm для этой программы.

    section .bss
    num:    resw    2               ;Reserved for the number of char to be cut off

    section .data

    str:    db      "",0x00
    strLen: db      8                ; Length of string is 8


    section .text

    global  main

main:

    ;; Read user input
    mov     rax,0
    mov     rdi,0
    mov     rsi,str
    mov     rdx,strLen
    syscall

    ;; Get input for int 
    mov     rax,0
    mov     rdi,0
    mov     rsi,num
    syscall

    ;; Change the char to number
    mov     r10,[num]
    sub     r10,48
    mov     [num],r10

    ;; Edit the string address
    mov     rax,[num]
    lea     r10,[str+rax]
    mov     [str],r10

    ;; Show the edited string
    mov     rax,1
    mov     rdi,1
    mov     rsi,str
    syscall

    ;; Exit section.
    mov rax,60              ;calls sys_exit
    xor rdi,rdi             ;0 for no errors
    syscall                 ;system call

Фактический результат:

Введите строку:

Assembly

Введите количество символовобрезать:

3

Это то, что было введено

Сборка

Вот отредактированный текст

▒J @


Ожидается:

Сборка

3

Сборка

Эмбли

...