############################################################################ ## Hier wird gezeigt, wie zwei Zeichenketten miteinander vergleichen werden. ## Das Ergebnis steht am Ende in result mit folgenden Werten: ## 0 (string1 = string2), ## 1 (string1 > string2), ## -1 (string1 < string2) ## Mit größer/kleiner ist die lexikalische Reihenfolge gemeint. ############################################################################ LOC Data_Segment GREG @ string1 BYTE "test",0 string2 BYTE "test",0 strGl BYTE "Strings sind gleich",0 strNgl BYTE "Strings sind verschieden",0 LOC #100 s1 IS $0 % Adresse vom 1.String s2 IS $1 % Adresse vom 2.String count IS $2 % Zähler c1 IS $3 % Zeichen vom 1.String c2 IS $4 % Zeichen vom 2.String cmp IS $5 % Hilfsvariable, speichert Vergleichswert result IS $6 % Ergebnis-Register Main LDA s1,string1 % Lade die Adresse vom ersten String LDA s2,string2 % Lade die Adresse vom zweiten String SET count,0 % Zählvariable, um ein Zeichen nach dem anderen zu laden JMP test % das ADD muss uebersprungen werden, wir wollen bei 0 anfangen loop ADD count,count,1 % Zählvariable erhöhen test LDB c1,s1,count % Zeichen von s1 laden LDB c2,s2,count % Zeichen von s2 laden CMP cmp,c1,c2 % Vergleichen BNZ cmp,return % sind verschieden PBNZ c1,loop % prüfen, ob das Ende des ersten Strings erreicht ist return SET result,cmp % Vergleichswert ins Ergebnis-Register setzen BNZ cmp,notequal % beide Strings sind verschieden -> notequal LDA $255,strGl % Text ins globale Register laden TRAP 0,Fputs,StdOut % Text ausgeben TRAP 0,Halt,0 % beende Programm notequal LDA $255,strNgl % Text ins globale Register laden TRAP 0,Fputs,StdOut % Text ausgeben TRAP 0,Halt,0 % beende Programm