gpt4 book ai didi

linux - 如何从字符串NASM汇编64位linux中读取每个字符

转载 作者:太空宇宙 更新时间:2023-11-04 04:10:23 27 4
gpt4 key购买 nike

我有一个 64 位 NASM 程序集分配,用于将输入文本的字母大写(所有字母都应为小写,除了句子开头的字母)。我对汇编程序完全陌生,当我阅读如下文本时,我在任何地方都找不到如何从字符串中增量读取每个字符:

section .data

prompt db "Enter your text: ", 10
length equ $ - prompt
text times 255 db 0
textsize equ $ - text

section .text
global main
main:
mov rax, 1
mov rdi, 1
mov rsi, prompt
mov rdx, length
syscall ;print prompt

mov rax, 0
mov rdi, 0
mov rsi, text
mov rdx, textsize
syscall ;read text input from keyboard




exit:
mov rax, 60
mov rdi, 0
syscall

另外,我不知道如何知道文本何时结束,这样我就可以知道何时必须退出程序。我应该对文本大小进行一些操作还是有一些显示 EOL 的特殊符号之王?谢谢您的回答。

最佳答案

从 sys_read(系统调用 rax=0)返回后,RAX 寄存器应包含实际已读取的字符数。请注意,在 Linux 中,当/n 被接受时,sys_read 将返回,即使提供的缓冲区中有更多空间。

然后组织一个从 0 到 RAX 的循环并按照您想要的方式处理每个字符:

        mov    byte ptr [text+rax], 0  ; make the string zero terminated for future use.

mov rcx, rax ; rcx will be the character counter.
mov rsi, text ; a pointer to the current character. Start from the beginning.

process_loop:
mov al, [rsi] ; is it correct NASM syntax?

; here process al, according to your needs...
; .....

inc rsi
dec rcx
jnz process_loop

上面的代码当然可以优化,例如使用字符串指令或循环指令,但在我看来,这种方式更适合初学者。

关于linux - 如何从字符串NASM汇编64位linux中读取每个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19445350/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com