8088 Assembly, IBM PC DOS, 25 Byte
Zerlegt:
BA 0110 MOV DX, OFFSET GB ; point DX to 'Good','Bad' string
D1 EE SHR SI, 1 ; point SI to DOS PSP (80H)
02 04 ADD AL, [SI] ; add input string length to AL, set parity flag
7B 02 JNP DISP ; if odd parity, input was 'Bad' so jump to display 'Good'
02 D0 ADD DL, AL ; otherwise add string length as offset for 'Bad' string
DISP:
B4 09 MOV AH, 9 ; DOS display string function
CD 21 INT 21H ; call DOS API, write string to console
C3 RET ; return to DOS
GB DB 'Good$','Bad$'
Erläuterung:
Prüft die Länge der Eingabezeichenfolge (plus Leerzeichen), die DOS unter der Speicheradresse speichert 80H
, und fügt sie hinzu AL
(zunächst 0
unter DOS ). Wenn 1
die binäre Darstellung der Zeichenfolgenlänge eine ungerade Anzahl von Bits enthält, wird das CPU-Paritätsflag auf ungerade gesetzt und umgekehrt. So Eingabestring ' Bad'
Länge 4
( 0000 0100
), ungerade Parität und Eingabestring ' Good'
ist 5
( 0000 0101
) ist gerade Parität.
DX
ist anfangs so eingestellt, dass sie auf den String zeigt 'Good$Bad$'
, und wenn die Parität gerade ist (dh die Eingabe war ' Good'
), stellen Sie den String-Zeiger um diese Länge vor ( 5
), sodass er jetzt auf zeigt 'Bad$'
. Wenn die Parität ungerade ist, tun Sie nichts, da sie bereits auf verweist 'Good$'
. Verwenden Sie dann die DOS-API, um a anzuzeigen$
terminierte Zeichenfolge für die Konsole .
Beispiel:
![Bildbeschreibung hier eingeben](https://i.stack.imgur.com/uw5Ze.png)
Laden Sie GOODBAD.COM herunter und testen Sie es oder erstellen Sie es aus einem xxd
Dump:
0000000: ba10 01d1 ee02 047b 0202 d0b4 09cd 21c3 .......{......!.
0000010: 476f 6f64 2442 6164 24 Good$Bad$