স্কিপ করে মূল কন্টেন্ট এ যান

ইনলাইন অ্যাসেম্বলি

পরিচিতি

এই ডকুমেন্টটি ওয়েভ ভাষার ইনলাইন অ্যাসেম্বলি নিয়ে আলোচনা করে। ইনলাইন অ্যাসেম্বলি হল একটি ফিচার যা ওয়েভ প্রদান করে। এটি উচ্চ-স্তরের ভাষার সুবিধা বজায় রেখে, নিম্ন-স্তরের হার্ডওয়্যার নিয়ন্ত্রণে সরাসরি প্রবেশযোগ্য করে, উচত গ্রেডের ব্যাকরণ।

এটি বিশেষত জেলার অপারেশন, মেমরির সরাসরি অ্যাক্সেস, বিশেষ কমান্ড এক্সিকিউশন সহ সাধারণ Wave কোডের সাথে পরিচালনা কঠিন টাস্কগুলি সমাধান করে যখন কর্মক্ষমতার অপ্টিমাইজেশন বা হার্ডওয়্যারে ভিত্তি করে কাজগুলি প্রয়োজনীয় হয়।


মৌলিক ব্যাকরণ

সম {
"অ্যাসেম্বলি কমান্ড" // প্রকৃত অ্যাসেম্বলি কোড (এক লাইনে একটি কমান্ড)
...
ইন("রেজিস্টার") মান // ইনপুট রেজিস্টার ম্যাপিং
আউট("রেজিস্টার") ভেরিয়েবল // আউটপুট রেজিস্টার ম্যাপিং
}

ব্যাকরণ উপাদান

  1. অ্যাসেম্বলি নির্দেশনা

    • "..." স্ট্রিং আকারে লিখিত, যা প্রকৃত CPU তে কার্যকর নিম্ন-স্তরের অ্যাসেম্বলি নির্দেশনা।
    • একাধিক লাইন লেখা সম্ভব এবং এক লাইনে এক নির্দেশনা দেওয়া হয়।
    • উদাহরণ:
      "mov rax, 1"
      "syscall"
  2. in("রেজিস্টার") মান

    • ভেরিয়েবল (অথবা এক্সপ্রেশন) এর মান নির্দিষ্ট রেজিস্টারে লোড করা হয়।
    • উদাহরণ:
      in("rdi") s
      -> ভেরিয়েবল s এর মান x86-64 প্রোটোকলের প্রথম syscall প্যারামিটার রেজিস্টার rdi তে রাখা হয়।
  3. out("রেজিস্টার") ভেরিয়েবল

    • নির্দিষ্ট রেজিস্টারের মান Wave ভেরিয়েবলে নিয়ে আসা হয়।
    • উদাহরণ:
      out("rax") ret
      -> syscall এর রিটার্ন ভ্যালু যা rax রেজিস্টারে সঞ্চিত থাকে, তা ভেরিয়েবল ret এ সংরক্ষণ করা হয়।

সাধারণ উদাহরণ

fun main() {
var msg_ptr: ptr<i8> = "syscall থেকে শুভেচ্ছা!\n";
var ret_val: i64;

asm {
"mov rax, 1"
"syscall"
in("rdi") 1
in("rsi") msg_ptr
in("rdx") 20
out("rax") ret_val
}
}

সতর্কতা

  • ইনলাইন অ্যাসেম্বলি Wave এর টাইপ স্ট্যাবিলিটি নষ্ট করে, তাই ভুল কমান্ড ব্যবহার করলে প্রোগ্রাম অপ্রত্যাশিতভাবে বন্ধ হতে পারে বা অজ্ঞাত আচরণ ঘটতে পারে।
  • in, out ম্যাপিংগুলি কম্পাইল সময়ে যাচাই করা হয়, কিন্তু নির্দেশনার সঠিকতা তারপরেও নিশ্চিত নয়।