डॉस पर x86 मशीन कोड - 14 13 11 बाइट्स
खैर, यह फिर से कम हो गया! एक असंबंधित चुनौती के लिए एक समाधान लिखने के बाद , मैंने देखा कि एक ही चाल यहाँ भी लागू की जा सकती है। तो अब हम शुरू करें:
00000000 b4 08 cd 21 35 01 0a 86 c2 eb f7 |...!5......|
0000000b
टिप्पणी विधानसभा:
org 100h
section .text
start:
mov ah,8 ; start with "read character with no echo"
lop:
; this loop runs twice per character read; first with ah=8,
; so "read character with no echo", then with ah=2, so
; "write character"; the switch is performed by the xor below
int 21h ; perform syscall
; ah is the syscall number; xor with 0x0a changes 8 to 2 and
; viceversa (so, switch read <=> write)
; al is the read character (when we did read); xor the low
; bit to change 0 to 1 and reverse
xor ax,0x0a01
mov dl,al ; put the read (and inverted character) in dl,
; where syscall 2 looks for the character to print
jmp lop ; loop
पिछला समाधान - 13 बाइट्स
मुझे लगता है कि यह इससे ज्यादा छोटा नहीं है।असल में, यह किया! @Ninjalj का शुक्रिया एक और बाइट बंद करने के लिए।
00000000 b4 08 cd 21 34 01 92 b4 02 cd 21 eb f3 |...!4.....!..|
0000000d
इस संस्करण में उन्नत इंटरएक्टिविटी ™ की विशेषता है - इसे कमांड लाइन से चलाने के बाद, यह "उल्टे" वर्णों को तब तक बाहर निकालता है जब तक आप इनपुट अंक लिखते हैं (जो कि गूंज नहीं हैं); बाहर निकलने के लिए, बस एक Ctrl-C करें।
पिछले समाधान के विपरीत, इसमें DosBox में चलने में कुछ परेशानी है - चूंकि DosBox Ctrl-C को सही ढंग से समर्थन नहीं करता है , यदि आप बाहर निकलना चाहते हैं तो आपको DosBox विंडो को बंद करने के लिए मजबूर किया जाता है। VM में DOS 6.0 के साथ, इसके बजाय, यह इच्छानुसार चलता है।
NASM स्रोत:
org 100h
section .text
start:
mov ah,8
int 21h
xor al,1
xchg dx,ax
mov ah,2
int 21h
jmp start
पुराना समाधान - 27 25 22 बाइट्स
इसने कमांड लाइन से इसके इनपुट को स्वीकार किया; DosBox में .COM फ़ाइल के रूप में आसानी से चलता है।
00000000 bb 01 00 b4 02 8a 97 81 00 80 f2 01 cd 21 43 3a |.............!C:|
00000010 1e 80 00 7c f0 c3 |...|..|
NASM इनपुट:
org 100h
section .text
start:
mov bx, 1
mov ah, 2
loop:
mov dl, byte[bx+81h]
xor dl, 1
int 21h
inc bx
cmp bl, byte[80h]
jl loop
exit:
ret