8086 मशीन कोड + डॉस, 61 बाइट्स
Hexdump (दाईं ओर ASCII दृश्य के साथ):
B8 1E 01 8B F8 CD 21 B1 1F F2 AE 8B F7 AC 8A D0 ......!.........
B4 02 CD 21 80 E2 20 74 02 CD 21 E2 F0 C3 71 77 ...!.. t..!...qw
65 72 74 79 75 69 6F 70 0D 0A 61 73 64 66 67 68 ertyuiop..asdfgh
6A 6B 6C 0D 0A 7A 78 63 76 62 6E 6D 0D jkl..zxcvbnm.
विधानसभा स्रोत कोड (tasm के साथ इकट्ठा किया जा सकता है):
.MODEL TINY
.CODE
org 100h
MAIN PROC
mov ax, offset qwerty ; sets ah=1 (coincidence)
mov di, ax ; di points to the string
int 21h ; reads a char from keyboard into al
mov cl, 31 ; cx is the length of the string
repne scasb ; look for the char
mov si, di ; si now points beyond the found char
myloop:
lodsb ; load a char
mov dl, al
mov ah, 2
int 21h ; output the char
and dl, 20h ; if it's a letter, set it to a space
jz print_done ; if it's not a letter, don't print a space
int 21h ; if it's a letter, print a space
print_done:
loop myloop ; repeat until end of string
ret
qwerty db 'qwertyuiop',13,10,'asdfghjkl',13,10,'zxcvbnm',13
MAIN ENDP
END MAIN
यहां दो मजेदार बातें:
qwertyस्ट्रिंग ऑफ़सेट है 0x011e। इसका ऊपरी बाइट 1 है, जो चरित्र इनपुट के लिए डॉस फ़ंक्शन नंबर है। यह कोड में 1 बाइट बचाता है।
- सभी लोअर-केस अक्षरों में बिट 5 सेट है। एक
ANDसाथ करते समय 0x20, वे सभी एक स्थान में बदल जाते हैं, जो तब मुद्रित होता है। यदि पिछला चार-छोर बाइट था, तो यह 0 में बदल जाता है, और कोई स्थान आउटपुट नहीं है। इसका उपयोग 0d 20 0a 20पंक्ति के अंत में निरर्थक अनुक्रम से बचने के लिए किया जाता है ।
एक लगभग मजेदार बात:
मैंने सामान्य स्थान (स्ट्रिंग की शुरुआत) के बजाय पता 0 (जो कि 2 बाइट्स द्वारा प्रोग्राम आकार में कमी आई) पर शुरू होने वाले इनपुट चार के लिए खोज करने की कोशिश की। यह लगभग काम किया; हालाँकि, यह इनपुट के लिए विफल रहा t, क्योंकि कोड में ही बाइट t(सशर्त कूद के एन्कोडिंग के भाग के रूप में) शामिल है। तो इसके लिए t, यह कुछ जंक बाइट्स का उत्पादन करेगा:
