ডস, 43 বাইটের জন্য x86-16 মেশিন কোড
; Draw 32x32 red square
B8 0C 28 mov ax, 0x0C28 ; AL == color red, AH == set pixel function
B9 00 1F mov cx, 31
DrawBox:
BA 00 1F mov dx, 31
DrawRow:
CD 10 int 0x10
4A dec dx
75 FB jnz DrawRow
E2 F6 loop DrawBox
; Draw the interior white cross
B0 0F mov al, 0x0F ; high byte already set
B1 06 mov cl, 6 ; high byte already 0
DrawCross:
B2 0D mov dl, 13 ; high byte already 0
DrawCrossInner:
CD 10 int 0x10 ; plot CX, DX
87 D1 xchg dx, cx
CD 10 int 0x10 ; plot DX, CX
87 D1 xchg dx, cx
42 inc dx
80 FA 12 cmp dl, 13+6
75 F2 jne DrawCrossInner
41 inc cx
80 F9 19 cmp cl, 6+(32-6-6)
75 EA jne DrawCross
C3 ret
উপরের কোডটি একটি COM ফাইল হিসাবে একত্রিত করার জন্য ডিজাইন করা হয়েছে এবং তারপরে ডসের অধীনে চালানো হবে। এটি স্ক্রিনের উপরের-বাম কোণে সুইস পতাকাটির 32 × 32 প্রতিনিধিত্ব করে পতাকাটির পৃথক পিক্সেল প্লট করতে রম বিআইওএস ভিডিও পরিষেবাগুলিকে অনুরোধ করে।
কোডটি ধরে নিয়েছে যে ভিডিও মোডটি ইতিমধ্যে 0x13 মোডে সেট করা আছে, এর অর্থ এটি একটি ভিজিএ প্রদর্শন প্রয়োজন। অন্যান্য ভিডিও মোডগুলি ব্যবহার করা যেতে পারে, তবে ভিজিএর প্রয়োজন আপনাকে দুটি জিনিস দেয়: (1) বর্গ পিক্সেল এবং (2) একটি ডিফল্ট প্যালেট যাতে সত্যিকারের 100% লাল থাকে ( 0xFF0000
) আপনাকে প্যালেট পরিবর্তন করে বাইটগুলি নষ্ট করতে হবে না meaning রং)। এই প্রোগ্রামটি চালানোর আগে, আপনাকে আপনার প্রদর্শনটি 0x13 মোডে স্যুইচ করতে হবে; নিম্নলিখিত কোডটি আপনার যা করা দরকার তা হ'ল:
mov ax, 0x13
int 0x10
কোডটি অন্য কোনও অনুমান করে না এবং ডস-সামঞ্জস্যপূর্ণ অপারেটিং সিস্টেমের অধীনে কোনও x86- সামঞ্জস্যপূর্ণ হার্ডওয়্যারটিতে চালানো উচিত।
তবে প্রোগ্রামটি পতাকা আঁকার সাথে সাথেই সমাপ্ত হবে, তাই ডস প্রম্পটটি সাধারণত পর্দার উপরের বাম কোণে আবার মুদ্রণ করা হবে এবং পতাকাটির শীর্ষ কয়েকটি লাইন .েকে দেবে। অতএব, আপনি যদি সত্যিকারের আউটপুটটিতে আশ্চর্য হতে চান, আপনার সিস্টেমটি RET
জ্বলে উঠার আগেই তাকে স্তব্ধ / বিরতি দেওয়া উচিত । ফ্রিডোস ভার্চুয়াল মেশিনে চলছে এমন দেখতে দেখতে এটির স্ক্রিনশট এখানে দেওয়া হয়েছে:
ভিডিও বাফারে সরাসরি পিক্সেল ডেটা লিখে আরও গল্ফ করা সম্ভব হতে পারে, বিশেষত যেহেতু আমি ইতিমধ্যে 0x13 মোডটি ধরে নিচ্ছি। আমি এখনও চেষ্টা করিনি। INT 0x10
ইতিমধ্যে একটি খুব ছোট নির্দেশ, তবে আমি যদি পিক্সেল ডেটা সরাসরি মেমোরিতে লিখতে ওয়ান-বাইট স্ট্রিং নির্দেশাবলী ব্যবহার করতে পারি তবে তার ফলে কোডের একটি উল্লেখযোগ্য সাশ্রয় ঘটতে পারে।