gpt4 book ai didi

string - 移动到缓冲区内字符串的末尾 - 汇编语言

转载 作者:行者123 更新时间:2023-12-03 21:34:43 34 4
gpt4 key购买 nike

我正在尝试输入一个字符串,然后查看该字符串中的最后一个值是否为 EOL 字符。我想我会使用读入的字符串的长度,然后将它添加到缓冲区的地址以找到最后一个元素。这似乎不起作用。

编辑:很抱歉我没有包含更多信息。变量定义如下:

  %define BUFLEN 256

SECTION .bss ; uninitialized data section
buf: resb BUFLEN ; buffer for read
newstr: resb BUFLEN ; converted string
rlen: resb 4

然后调用 dos 中断以接受来自用户的字符串,如下所示:

    ; read user input
;
mov eax, SYSCALL_READ ; read function
mov ebx, STDIN ; Arg 1: file descriptor
mov ecx, buf ; Arg 2: address of buffer
mov edx, BUFLEN ; Arg 3: buffer length
int 080h

然后我们进入循环:

  test_endl:
mov ecx, [rlen]
mov esi, buf
add esi, ecx ; i want to move 'rlen' bytes into buf
mov al, [esi] ; to see what the last element is
cmp al, 10 ; compare it to EOL
jnz L1_init
dec ecx ; and then decrease 'rlen' if it is an EOL
mov [rlen], ecx\

我是 NASM 用户,为 i386 机器编译和编写。

最佳答案

将字符串的长度添加到缓冲区的地址可以访问字符串后面的字节。

根据你的说法

  • 您想查看字符串的最后一个值是否为 EOL 字符
  • 如果它是 EOL (*),您的目标是减少 'rlen'

我得出结论,您认为字符串的可能 EOL 字符部分由其长度 rlen 定义。如果你不这样做,那么 (*) 就没有意义。

使用mov al,[esi-1]查看最后一个元素是什么!

test_endl:
mov ecx, [rlen]
mov esi, buf
add esi, ecx ; i want to move 'rlen' bytes into buf
mov al, [esi-1] ; to see what the last element is
cmp al, 10 ; compare it to EOL
jnz L1_init
dec ecx ; and then decrease 'rlen' if it is an EOL
mov [rlen], ecx

关于string - 移动到缓冲区内字符串的末尾 - 汇编语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32664286/

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