2024-10-20, nasm, assemblerprogramm, lods, stos, movs und ich weiss was ich neulich bei movs falsch gemacht habe

ich weiss, was ich neulich bei lodsb falsch gemacht habe, lodsb erhoeht lediglich di, oder si. Eines von beiden, oder dekrementiert es. je nachdem wie das direction flag gesetzt ist. anders, wenn man rep verwendet. Hier wird, cx dekrementiert, wahrscheinlich, weil die Stringoperation so oft ausgefuehrt wird, wie in CX

ich schreibe heute drei Assemblberprogramme

  1. das von neulich, zum sortieren, ohne lods
  2. das von neulich, mit lods und stos
  3. eines zum kopieren von strings mit lods, stos, movs und rep

global _start

section         .data
                str_src:    db "hallo welt sagt David Vajda", 0
                str_des:    db "                           ", 0
                str_len:    dw 0
section         .text
_start:
                mov esi, str_src
                mov ecx, 0

loop1:          lodsb
                cmp al, 0
                je loop1end
                inc ecx
                jmp loop1
loop1end:       mov [str_len], ecx
                mov esi, str_src
                mov edi, str_des
strcpy:         cmp ecx, 0
                jle strcpyend
                lodsb
                stosb
                dec ecx
                jmp strcpy
strcpyend:

        mov edx, [str_len]
        mov ecx, str_des
        mov ebx, 1
        mov eax, 4
        int 0x80

        mov ebx, 0
        mov eax, 1
        int 80h

Und mit

rep

global _start

section         .data
                str_src:    db "hallo welt sagt David Vajda", 0
                str_des:    db "                           ", 0
                str_len:    dw 0
section         .text
_start:
                mov esi, str_src
                mov ecx, 0

loop1:          lodsb
                cmp al, 0
                je loop1end
                inc ecx
                jmp loop1
loop1end:       mov [str_len], ecx
                mov esi, str_src
                mov edi, str_des
                rep movsb

        mov edx, [str_len]
        mov ecx, str_des
        mov ebx, 1
        mov eax, 4
        int 0x80

        mov ebx, 0
        mov eax, 1
        int 80h
output:
david@work:~$  nasm -f elf32 nasm20241020_002.asm
david@work:~$ ld -m elf_i386 nasm20241020_001.o -o nasm20241020_001
david@work:~$ ./nasm20241020_001
hallo welt sagt David Vajdadavid@work:~$
david@work:~$
david@work:~$  nasm -f elf32 nasm20241020_002.asm
david@work:~$ ld -m elf_i386 nasm20241020_002.o -o nasm20241020_002
david@work:~$ ./nasm20241020_002
hallo welt sagt David Vajdadavid@work:~$
david@work:~$
david@work:~$