我正在尝试接受一个字符串,然后查看字符串中的最后一个值是否为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\
我是用户编程和编写i386机器的NASM。
答案 0 :(得分:3)
将字符串的长度添加到缓冲区的地址,可以访问后面的字符串。
根据你的说法
我得出结论,您考虑字符串中可能的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