x86 সমাবেশ, 512 বাইট
এনএএসএম এর সাথে সংকলিত এবং কিউইএমইউ দিয়ে পরীক্ষিত। বুট করার জন্য আপনাকে বুটসেক্টর (ফাইলের মধ্যে 510 বাইট) শেষে 2 বাইটের বুট স্বাক্ষর লাগাতে হবে তাই আমি জিরো দিয়ে সংকলিত কোডটি পূরণ করে 317 বাইট হারিয়েছি। এটি আমার প্রথম গল্ফ তাই কোনও বিরাট ত্রুটির জন্য আমাকে ক্ষমা চাইতে হবে।
[org 7c00h] ;So NASM can change the labels into memory locations correctly.
cld ;Tells lodsb to look forward in memory
mov bh, 65 ;Moves the ASCII value of A into the BH register
mov si, NATO ;Moves the first byte of NATO into the si register
call print ;Call the 'print' subroutine
jmp $ ;Loops forever
print:
mov ah, 0eh ;Moves the hex value 0E into the AH register. Tells interrupt 10h that we want subfucntion 0E
lodsb ;Load a byte of SI into AL and increments a register (DL i think) that tells it the offset to look at
cmp al, 3 ;Compares the AL register that now has a byte from our string to ASCII value 3 (Enf Of Text)
je R ;If AL == 3 then jump to R
cmp al, 0 ;Comapre AL to ASCII 0 (NULL)
je newWord ;If AL == 0 hump to newWord
int 10h ;Execute interrupt 10h Subfunction 0Eh (stored in AH register) which prints character value in AL
jmp print ;Jump to print
newWord:
mov al, 10 ;Move ASCII 10 (New Line) into AL
int 10h ;Print character
mov al, 13 ;Move ASCII 13 (Carriage Return) into AL
int 10h ;Print character
mov al, bh ;Move BH (which has our starting letter) into AL
int 10h ;Print Character
mov al, 58 ;Move ASCII 58 (:) into AL
int 10h ;Print Character
mov al, 32 ;Move ASCII 32 (Space) into AL
int 10h ;Print Character
mov al, bh ;Move BH into AL
int 10h ;Print Character
inc bh ;Increments BH by one (BH++)
jmp print ;Jump to print
R:
ret ;Returns from a subroutine
;Below defines bytes (db) of our string to print. I used 0 as word seperators and 3 to end the string.
NATO: db 0,"lfa",0,"ravo",0,"harlie",0,"elta",0,"cho",0,"oxtrot",0,"olf",0,"otel",0,"ndia",0,"uliet",0,"ilo",0,"ima",0,"ike",0,"ovember",0,"scar",0,"apa",0,"uebec",0,"omeo",0,"ierra",0,"ango",0,"niform",0,"ictor",0,"hiskey",0,"ray",0,"ankee",0,"ulu",3
times 0200h - 2 - ($ - $$) db 0 ;Zerofill the file with upto 510 bytes (This is where all my bytes are)
dw 0AA55H ;Write the bootsignature
আউটপুট
উপরের কোডটি আউটপুট দেয় এটি। আপনি দেখতে পাচ্ছেন যে: আলফা অনুপস্থিত এবং এটি কারণ হ'ল প্রম্পটটি 25 লাইন লম্বা ...
আমি একটি মুদ্রিত হয়েছে তা প্রমাণ করার জন্য : আলফা আমি এর সাথে প্রতিস্থাপন 0,"ulu"
করেছি 32,"Z: Zulu"
যাতে জুলু ইয়াঙ্কির মতো একই লাইনে থাকে।
আমি এটির প্রশংসা করব যদি কেউ আমাকে বলেন যে আমি আমার কোড থেকে 317 বাইট জিরোফিলটি বিয়োগ করতে সক্ষম হব তাই এটি 195 বাইট হবে। এছাড়াও যদি এটি এমনকি বৈধ হয় তবে আউটপুট স্ক্রিনে ফিট করে না।