pobieranie łańcucha w asemblerze

0

Witam.

Jak napisać w asemblerze żeby program pobrał z wejścia dwa łańcuchy znakowe oraz wygenerował na wyjściu jeden łańcuch zawierający znaki o kodach ASCII będące średnią(zaokrągloną w górę) znaków na odpowiadających sobie pozycjach w łańcuchach źródłowych.

Jestem totalnie zielony. Proszę o pomoc

0

Ja bym zaczął od nauki podstaw

0

Nie napisałeś w jakim asemblerze, więc zakładam że chodzi o najpopularniejsze chyba (ale tylko na forum na szczęście), pisanie pod 16bitowy DOSowy.

Musiałbyś sprecyzować czego chcesz. Powinieneś zrobić coś w rodzaju:

  1. Pobrać łańcuch znakowy. Jeśli faktycznie DOS to np. pętlą z http://spike.scu.edu.au/~barry/interrupts.html#ah01 (lepiej użyć http://spike.scu.edu.au/~barry/interrupts.html#ah0a, ale chyba trudniej)
    np. tak (link: http://stackoverflow.com/a/6781107):
    mov di, string  ; es:di points to string
    cld             ; clear direction flag
read_loop:
    mov ah, 0x01    ; Function 01h Read character from stdin with echo
    int 0x21
    cmp al, 0x0D    ; character is carriage return?
    je read_done    ; yes? exit the loop
    stosb           ; store the character at es:di and increment di
    jmp read_loop   ; loop again
read_done:
    mov al, '$'     ; mark end of string
  1. Pobrać drugi łańcuch znakowy
  2. Pętla po każdym znaku, obliczająca średnią i albo zapisująca ją do osobnej tablicy albo wypisująca od razu. Załóżmy to drugie, bo chyba prostsze (pseudokod asembleropodobny):
a = początek_łańcucha_1                    // wskaźnik na łańcuch a
b = początek_łańcucha_2                    // wskaźnik na łańcuch b
start_pętli:
    if (*a == '$') { goto koniec_pętli; }  // pierwszy łańcuch się skończył
    if (*b == '$') { goto koniec_pętli; }  // drugi łańcuch się skończył
    c = (*a + *b + 1) / 2                  // wylicz średnią. +1 to sztuczka na zaokrąglenie w górę
    putchar(c);                            // int 21h, funkcja 2
    a += 1                                 // przesuń wskaźnik a do przodu
    b += 1                                 // przesuń wskaźnik b do przodu
    goto start_pętli
koniec_pętli:
    // ...profit

Chyba że chcesz gotowca, na to bym nie liczył :/.

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