8088 विधानसभा, आईबीएम पीसी डॉस, 25 बाइट्स
unassembled:
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$'
स्पष्टीकरण:
इनपुट स्ट्रिंग की लंबाई (प्लस लीडिंग स्पेस) को देखता है जो DOS मेमोरी एड्रेस पर स्टोर करता है 80H
, और इसे AL
(शुरुआत 0
में DOS द्वारा ) जोड़ता है । यदि 1
स्ट्रिंग की लंबाई के द्विआधारी प्रतिनिधित्व में बिट्स की एक अजीब संख्या है , तो सीपीयू समता ध्वज को विषम, और इसके विपरीत में सेट किया गया है। तो इनपुट स्ट्रिंग ' Bad'
लंबाई 4
( 0000 0100
), विषम समता है और इनपुट स्ट्रिंग ' Good'
है 5
( 0000 0101
) समता है।
DX
शुरू में स्ट्रिंग को इंगित करने के लिए सेट किया गया है 'Good$Bad$'
, और अगर समता भी है (मतलब इनपुट था ' Good'
) स्ट्रिंग पॉइंटर को उस लंबाई से आगे बढ़ाएं ( 5
) तो यह अब इंगित करता है 'Bad$'
। यदि समता विषम है, तो कुछ भी न करें क्योंकि यह पहले से ही इंगित करता है 'Good$'
। फिर $
कंसोल को समाप्त करने के लिए DOS API का उपयोग करें ।
उदाहरण:
डाउनलोड करें और GOODBAD.COM का परीक्षण करें या xxd
डंप से निर्माण करें :
0000000: ba10 01d1 ee02 047b 0202 d0b4 09cd 21c3 .......{......!.
0000010: 476f 6f64 2442 6164 24 Good$Bad$