首页 > 解决方案 > 如何将字符串的地址更改为字符串的第n个字符

问题描述

我是一个初学者,用 64 位编写一个程序,该程序应该询问用户一个 8 个字符长的字符串,并根据用户输入的 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

主要的:

    ;; 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

实际结果:

输入字符串:

集会

输入要截断的字符数:

3

这是输入的

集会

这是编辑的文本

▒J@


预期的:

集会

3

集会

嵌入

标签: assemblyx86-64

解决方案


推荐阅读