1

我正在尝试扫描来自用户的输入,并将字符串转换为没有换行符的内容,以便为文件提供名称。在以某种方式扫描来自用户的输入时,会发生换行符被附加到扫描的字符串。(实际上我在这里对两个文件进行操作,所以我使用了两个字符串。)。在这里,我尝试使用 movsb 直到通过在 al 中移动 10 来出现换行符。10 这是ascii中的换行符,但这不起作用。

 section .data
        msg3 db "%s",10,0
        msg4 db "%s",0
        msg5 db "%d",10,0
        msg6 db 10

section .bss
    x resd 50
    y resd 50
    a resd 1
    d resd 1
    b resd 50
    c resd 50
section .text
    global main
    extern printf , scanf,gets
main :  
    xor eax,eax
    mov eax,3
    mov ebx,0
    mov ecx,x
    mov edx,30
    int 80h
    mov dword[a],eax
    push dword[a]
    push msg5
    call printf
    add esp,8

    xor eax,eax
    mov eax,3
    mov ebx,0
    mov ecx,y
    mov edx,30
    int 80h
    mov dword[d],eax


    xor eax,eax
    mov esi,x
    mov edi,b
    mov ecx,dword[a]
    mov al,10
    cld
repne   movsb   
    mov esi,y
    mov edi,c
    mov ecx,dword[d]
repne   movsb
    xor eax,eax
4

1 回答 1

0

最后做了这样的事情,它奏效了。早期代码的某些部分也有缺陷。谢谢弗兰克科特勒。

    xor eax,eax
    mov eax,3
    mov ebx,0
    mov ecx,x
    mov edx,30
    int 80h
    mov dword[a],eax
    push dword[a]
    push msg5
    call printf
    add esp,8

    xor eax,eax
    mov eax,3
    mov ebx,0
    mov ecx,y
    mov edx,30
    int 80h
    mov dword[d],eax


    xor eax,eax
    mov esi,x
    mov edi,b
    mov ecx,dword[d]
    mov al,0
    cld
repne   movsb   
    mov ecx,dword[d]
    mov byte[ecx+b-1],0
    mov esi,y
    mov edi,c
    mov ecx,dword[d]
repne   movsb
    xor eax,eax
    mov ecx,dword[d]
    mov byte[ecx+c-1],0

    xor eax,eax
    mov esi,b
    mov edi,x
    mov ecx,dword[d]
    mov al,0
    cld
repne   movsb   
    mov al,0
    mov ecx,dword[d]

    mov esi,c
    mov edi,y
    mov ecx,dword[d]
repne   movsb
    xor eax,eax
于 2013-05-05T04:08:13.973 回答