assembler usuwanie białych znaków

0

Witam , jak usunąć w asemblerze białe znaki z takiego łańcucha znakowego

ciag db "D dFF 2 H",36
0

Nie bardzo rozumiem pytanie. W takim sam sposób jak w dowolnym innym języku. Najprościej będzie pewnie iterować po ciągu i jeśli trafimy na spacje to przesuwamy resztę ciągu o jeden znak do przodu.

0

Ja bym to zrobił tak (NASM 32 bit):

global _main
extern _printf    ; Printf do prostego wypisania zawartosci :)

section .data
tab    dd    "hello world, czesc swiecie!", 0
fmt    db    "%c", 0

section .text

;    Wypisanie zawartości tablicy.
;    To samo co do{ wypisz(tab[i]); i++; }while(tab[i]!='\0');
wypisz:
    push dword[tab+edi]
    push fmt
    call _printf
    add esp, 8
    
    
    inc edi
    cmp dword[tab+edi], 0
    jne wypisz
    ret

_main:
    mov edi, 0
   
;    Pętla główna iterująca każdy element tablicy
;    Jeżeli tab[i] == ' ' to skocz do etykiety usuń. 
glowna:
    mov cl, byte[tab+edi]
    cmp cl, ' '
    je usun
    
    dalej:
    inc edi
    cmp dword[tab+edi], 0
    jne glowna
    
    mov edi, 0
    call wypisz    

;    Koniec programu
koniec:
    xor eax, eax
    ret

;    Przesuwanie znaku i+1 na pozycję i.
;    To samo co while(tab[i+1] != '\0'){ tab[i] = tab[i+1]; i++; }
;    Jeżeli tab[i+1] == '\0' to zakończ stringa i resetuj wartości rejestru licznika
usun:
    cmp byte[tab+edi+1], 0
    je resetuj
    
    ;    Jeżeli tab[i+1] != '\0' to zamień wg wzoru tab[i] = tab[i+1]
    mov cl, byte[tab+edi+1]
    mov byte[tab+edi], cl
    inc edi
    jmp usun
    
resetuj:
    mov byte[tab+edi], 0
    mov edi, 0
    jmp dalej

Działa bardzo ładnie, sprawdziłem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1