Assembler - sumowanie kodów ascii z łańcucha znaków

0

Witam, mam do zrobienia zadanie w assemblerze, polegające na porównaniu sum kodów ASCII dwóch łańcuchów znaków. Nie jestem zbyt dobry w assemblerze, udało mi się na razie zrobić program który porównuje długości dwóch łańcuchów znaków. Nie wiem jak zrobić sumowanie tych kodów ascii w danym łańcuchu.

To co udało mi się zrobić:

 ORG 100H

START:

mov	ah, 9 ;wyswietlenie tekstu
mov	dx, tekst1
int 21h

mov	ah, 0ah	 ;pobieranie lancucha znakow z klawiatury
mov	dx, lancuch1 ;zapisanie do zmiennej
int	21h

mov ah,2
mov dl,10
int 21h

mov	ah, 9 ;wyswietlenie tekstu
mov	dx, tekst2
int 21h

mov	ah, 0ah	 ;pobieranie lancucha znakow z klawiatury
mov	dx, lancuch2 ;zapisanie do zmiennej
int	21h	

mov bh, [lancuch1+1]
mov bl, [lancuch2+1]

cmp bh,bl

je rowne
jl wiekszy2
jg wiekszy1

rowne:
mov ah,9
mov dx, tekst3
jmp wypisz
ret
wiekszy2:

mov ah,9
mov dx, tekst5
jmp wypisz
ret
wiekszy1:

mov ah,9
mov dx, tekst4
jmp wypisz

;koniec
wypisz:
int 21h
mov ah,9
mov dx, tekst6
int 21h

mov ah, 1 ; wczytuje dowolny klawisz i konczy program
int 21h
cmp al,13	 ; jesli znak jest enterem, program wraca na start
jnz START

mov	ax, 4c00h
int	21h


tekst1 db 13,10,"Podaj 1 ciag znakow - $"
tekst2 db 13,10,"Podaj 2 ciag znakow - $"
tekst3 db 13,10,"Lancuchy znakow sa tej samej dlugosci.$",13,10,
tekst4 db 13,10,"1 Lancuch jest dluzszy od 2. $",13,10,
tekst5 db 13,10, "2 Lancuch jest dluzszy od 1. $",13,10,	
tekst6 db 13,10, "dowolny znak- jeszcze raz / enter- koniec $$$"
lancuch1 db 20
db 0
times 22 db "$"
lancuch2 db 20
db 0
times 22 db "$"

<code class="asm"> - msm

0

Nie jestem zbyt dobry w assemblerze, udało mi się na razie zrobić program który porównuje długości dwóch łańcuchów znaków.

http://pastebin.com/ymffKMLG
http://katalogi.pl/236231-assembler-suma-kod%C3%B3w-ascii.html
http://katalogi.pl/78748-assembler-por%C3%B3wnanie-kod%C3%B3w-ascii-dw%C3%B3ch-ci%C4%85g%C3%B3w-znak%C3%B3w.html
(17 listopad 2009, różnią się jedyne trochę kolejnością funkcj)

Ponad 4 lata temu go napisałeś i dalej nie poprawiłeś? :P. Chyba jednak nie Ty.

Ale porównaniu sum kodów ASCII dwóch łańcuchów znaków jest dość proste, w zasadzie kilka linjek sprowadzających się do:

int a = suma_ascii(napis_1);
int b = suma_ascii(napis_2);
if (a > b) wypisz("większe");
else wypisz("mniejsze");

Gdzie sumowanie z kolei sprowadza się do (też w 'pseudokodzie'):

int suma_ascii(char *napis) {
    suma = 0;
    while (*napis != '$') {  // albo *napis != 0, zależne co kończy napis
        suma += *napis;
        napis++;
    }
    return suma;
}

(odpisałem też na PM.)

0

OK, dzięki. Wiem, że zadanie jest proste, tylko problem w tym, że nie wiem jak w assemblerze napisać pętlę która będzie sumowała kody ascii kolejnych znaków w łańcuchu.

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