在执行movsb时向al寄存器添加换行符(或者如何将换行符与输入字符串中的charachters进行比较)

时间:2013-05-04 05:29:57

标签: assembly newline

我正在尝试扫描来自用户的输入,并且字符串将被转换为缺少换行符的内容,以便为文件提供名称。在扫描来自用户的输入时,以某种方式发生的事情是将换行符附加到扫描的字符串上。 (实际上我在这里对两个文件进行操作,所以我使用了两个字符串。)。在这里,我试图使用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

1 个答案:

答案 0 :(得分:0)

最后做了这样的事情。早期代码的某些部分也存在缺陷。谢谢Frank Kotler。

    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