জেড 80 মেশিন কোড, 8 6 বাইট *
<8ww8>
* আমস্ট্রাদ বেসিক থেকে প্রবেশ করে কিছু শর্ত অনুমান করে
< INC A // A=A+1
8w JR C, #77 ## C is unset unless A has overflowed, does nothing
w LD (HL), A // Saves A to memory location in HL (randomly initialised)
8> JR C, #3E ## C is still unset, does nothing
A
বেসিক থেকে প্রবেশ করার সময় প্রাথমিকভাবে 0 হয়। এটা তোলে বৃদ্ধি A
এন বার, তাহলে এটি লিখেছেন এন (যা বেসিক দ্বারা সামান্য যেকোনো অবস্থানে সেট করা হয়) একই মেমরির অবস্থান গুণ! JR
যেহেতু ঝাঁপ দাও আপেক্ষিক অপারেশন কখনো কিছু না C
পতাকা সবসময় সেট করা থাকে না, তাই "আউট মন্তব্য" নিম্নলিখিত বাইট ব্যবহার করা হয়! এই সংস্করণটি নির্দিষ্ট প্রবেশের শর্ত ধরে ধরে কিছুটা প্রতারণা করছে, যথা A
সর্বদা BASIC গ্যারান্টি থেকে প্রবেশ করে 0 এর অবস্থানটি (HL)
নিরাপদ হওয়ার গ্যারান্টি নেই, এবং সম্ভবত এটি সম্ভবত একটি বিপজ্জনক অবস্থান। নীচের কোডটি অনেক বেশি শক্তিশালী কারণ এটি এত দীর্ঘ।
জেড 80 মেশিন কোড, 30 বাইট
ASCII হিসাবে:
o!.ww.!>A=o>{))((}<o=A<!.ww.!o
মূলত, প্রথমার্ধটি একটি শূন্য মান তৈরির গ্যারান্টি দেয় এবং দ্বিতীয়ার্ধ এটি বৃদ্ধি করে এবং স্মৃতিতে লিখে দেয়। নীচের প্রসারিত সংস্করণে ##
কোডটি বোঝায় যা আয়নার অর্ধেক অংশে কোনও উদ্দেশ্য করে না।
o LD L, A ##
!.w LD HL, #772E // Load specific address to not corrupt random memory!
w LD (HL), A ## Save random contents of A to memory
.! LD L, #21 ##
>A LD A, #41 // A=#41
= DEC A // A=#40
o LD L, A // L=#40
>{ LD A, #7B ##
) ADD HL, HL // HL=#EE80
) ADD HL, HL // HL=#DD00. L=#00 at this point
(( JR Z, #28 ##
} LD A, L // A=L
< INC A // A=L+1
o LD L, A // L=L+1
= DEC A // A=L
A LD B, C ##
< INC A // A=L+1
!.w LD HL, #772E // Load address back into HL
w LD (HL), A // Save contents of A to memory
.! LD L, #21 ##
o LD L, A // L=A
অনুমোদিত নির্দেশাবলী ভঙ্গ:
n op description
-- ---- -----------
28 LD LoaD 8-bit or 16-bit register
3 DEC DECrement 8-bit or 16-bit register
1 INC INCrement 8-bit or 16-bit register
1 ADD ADD 8-bit or 16-bit register
Available but useless instructions:
3 JR Jump Relative to signed 8-bit offset
1 DAA Decimal Adjust Accumulator (treats the A register as two decimal digits
instead of two hexadecimal digits and adjusts it if necessary)
1 CPL 1s ComPLement A
1 HALT HALT the CPU until an interrupt is received
অনুমোদিত 39 টি নির্দেশাবলীর মধ্যে 28 টি লোড অপারেশন (0x40 থেকে 0x7F অবধি সমস্ত একক বাইট LD
নির্দেশ রয়েছে), যার বেশিরভাগ এখানে কোনও সহায়ক নয়! এখনও মেমরির নির্দেশের একমাত্র লোডের অনুমতি দেওয়া হ'ল LD (HL), A
এর অর্থ হল আমাকে মানটি সঞ্চয় করতে হবে A
। যেহেতু A
অনুমোদিত INC
নির্দেশের সাথে একমাত্র নিবন্ধক বাকি রয়েছে এটি আসলে বেশ কার্যকর!
আমি A
0x00 দিয়ে শুরু করতে লোড করতে পারি না কারণ ASCII 0x00 অনুমোদিত অনুমতিযুক্ত অক্ষর নয়! সমস্ত উপলভ্য মানগুলি 0 থেকে অনেক দূরে এবং সমস্ত গাণিতিক এবং যৌক্তিক নির্দেশনা বাতিল করা হয়েছে! বাদে ... আমি এখনও করতে পারি ADD HL, HL
, HL
নিজের মধ্যে 16-বিট যুক্ত করুন ! সরাসরি লোডিং মানগুলি ছাড়া (এখানে কোনও ব্যবহার নেই!), আইএনক্রিমেন্টিং A
এবং ডেক্রেমেন্টিং A
, L
বা HL
কোনও রেজিস্ট্রারের মান পরিবর্তন করার একমাত্র উপায় আমার! আসলে একটি বিশেষ নির্দেশ রয়েছে যা প্রথমার্ধে সহায়ক হতে পারে তবে দ্বিতীয়ার্ধে কাজ করার জন্য একটি ব্যথা এবং একটি পরিপূরক নির্দেশ যা এখানে প্রায় অকেজো এবং কেবল স্থান গ্রহণ করবে।
সুতরাং, আমি 0 এর পার্শ্ববর্তী মানটি পেয়েছিলাম: 0x41। কিভাবে 0 এর কাছাকাছি? বাইনারি এটি 0x01000001। সুতরাং আমি এটিকে হ্রাস করছি, এটিকে লোড করুন L
এবং ADD HL, HL
দু'বার করুন! L
এখন শূন্য, যা আমি আবার লোড করব A
! দুর্ভাগ্যবশত, জন্য ASCII কোড ADD HL, HL
হল )
তাই আমি এখন ব্যবহার করতে হবে (
দুইবার। সৌভাগ্যবসত, (
হয় JR Z, e
, যেখানে e
পরবর্তী বাইট। সুতরাং এটি দ্বিতীয় বাইট আপ গব্বল এবং আমি ঠিক নিশ্চিত করা প্রয়োজন যে Z
পতাকা সঙ্গে সতর্কতা অবলম্বন করে এটি কিছু না করে ! Z
পতাকাটি প্রভাবিত করার জন্য সর্বশেষ নির্দেশটি ছিল DEC A
(পাল্টা স্বজ্ঞাত, ADD HL, HL
এটি পরিবর্তন করে না) এবং যেহেতু আমি জানি যে A
0x40 ছিল যে সময়ে এটির গ্যারান্টিটি Z
সেট করা হয়নি।
দ্বিতীয়ার্ধে প্রথম নির্দেশনাটি JR Z, #28
প্রথম 255 বার কিছুই করবে না কারণ জে ফ্ল্যাগটি কেবল তখনই সেট করা যায় যদি A 255 থেকে 0 থেকে প্রবাহিত হয় তবে তার পরে আউটপুটটি ভুল হবে, তবে যেহেতু এটি কেবল 8-বিট মানগুলিকেই সংরক্ষণ করছে যে কোন ব্যাপার না। কোডটি 255 বারের বেশি প্রসারিত করা উচিত নয়।
কোডটি স্নিপেট হিসাবে কার্যকর করতে হবে যেহেতু পরিষ্কারভাবে ফেরার সমস্ত উপলভ্য উপায় বাতিল করা হয়েছে। সমস্ত পুনর্নির্দেশের নির্দেশাবলী 0x80 এর উপরে এবং অনুমোদিত কয়েকটি ঝাঁপ অপারেশন কেবল একটি ইতিবাচক অফসেটে ঝাঁপিয়ে উঠতে পারে, কারণ সমস্ত 8-বিট নেতিবাচক মানগুলিও বঞ্চিত করা হয়েছে!
#
এটির নিজস্ব প্রতিচ্ছবিটিও, তবে, আপনি ঠিক বলেছেন, কনসোলে নেই।