test
এর মতো and
, এটি কেবল FLAGS না লিখে এর উভয় ইনপুটটি সংশোধিত রেখে। দুটি ভিন্ন ইনপুট সহ, কিছু বিট সমস্ত শূন্য হয়, বা যদি কমপক্ষে একটি সেট করা থাকে তবে এটি পরীক্ষার জন্য কার্যকর। (উদাহরণস্বরূপ, test al, 3
জেডএফ সেট করে যদি EAX 4 এর একাধিক হয় (এবং এর সাথে এর নিম্ন 2 বিট উভয়ই শূন্য থাকে)।
test eax,eax
সমস্ত ফ্ল্যাগ সেট করে ঠিক একই ভাবে cmp eax, 0
would :
- সিএফ এবং অফ সাফ করা (এবং / টেস্ট সবসময় তা করে; শূন্য বিয়োগ করা কখনই বহন করে না)
- EAX এর মান অনুসারে জেডএফ, এসএফ এবং পিএফ। (
a = a&a = a-0
)।
(যথারীতি পিএফ কেবলমাত্র কম 8 বিট অনুসারে সেট করা থাকে )
অপ্রচলিত এএফ (সহায়ক-ক্যারি পতাকা, ASCII / BCD নির্দেশাবলী দ্বারা ব্যবহৃত) ব্যতীত টেস্ট এটি অপরিবর্তিত রেখে দেয় তবে সিএমপি "ফলাফল অনুসারে" সেট করে । যেহেতু শূন্যকে বিয়োগ করা 4 র্থ থেকে 5 তম বিট পর্যন্ত ক্যারি উত্পাদন করতে পারে না, তাই সিএমপিকে সর্বদা এএফ পরিষ্কার করা উচিত।
টেস্টটি ছোট (তাত্ক্ষণিক নয়) এবং কখনও কখনও দ্রুত (সিএমপির চেয়ে বেশি সিপিইউতে তুলনামূলক এবং শাখার ইউওপে ম্যাক্রো ফিউজ করতে পারে)। এটি test
শূন্যের সাথে একটি রেজিস্টার তুলনা করার জন্য পছন্দসই প্রতিমা তৈরি করে । এটি একটি পীফোল অপ্টিমাইজেশন যার জন্য cmp reg,0
আপনি অর্থগত অর্থ নির্বিশেষে ব্যবহার করতে পারেন।
তাত্ক্ষণিক 0 দিয়ে সিএমপি ব্যবহারের একমাত্র সাধারণ কারণ হ'ল আপনি যখন মেমরি অপারেণ্ডের সাথে তুলনা করতে চান। উদাহরণস্বরূপ, cmpb $0, (%esi)
অন্তর্নিহিত দৈর্ঘ্যের সি-স্টাইলের স্ট্রিংয়ের শেষে একটি সমাপ্ত শূন্য বাইট পরীক্ষা করতে।
AVX512F যোগ করেkortestw k1, k2
এবং AVX512DQ / BW (Skylake-X তবে কেএনএল নয়) যুক্ত করে ktestb/w/d/q k1, k2
, যা AVX512 মাস্ক রেজিস্টারে (k0..k7) চালিত করে তবে এখনও নিয়মিত FLAGS সেট test
করে যেমন পূর্ণসংখ্যা OR
বা AND
নির্দেশাবলী করে। ( ptest
এসএসই 4 বা এসএসই এর মতো বাছাই করুনucomiss
: সিমডি ডোমেনে ইনপুট দেয় এবং ফলস্বরূপ FLAGS আসে))
kortestw k1,k1
কোনও এভিএক্স 512 ফলাফলের তুলনায় এসএসই / এভিএক্স 2 (v)pmovmskb/ps/pd
+ test
বা প্রতিস্থাপনের ভিত্তিতে শাখা / সেমিওভিসি / সেটসিটি-তে স্টোরিমেটিক উপায় cmp
।
jz
বনামের ব্যবহার je
বিভ্রান্তিকর হতে পারে।
jz
এবং je
আক্ষরিকভাবে একই নির্দেশিকা , যেমন মেশিন কোডে একই অপকড। তারা একই কাজ করে তবে মানুষের কাছে বিভিন্ন অর্থগত অর্থ রয়েছে । ডিসেসেমব্লার্স (এবং সাধারণত সংকলকগুলি থেকে asm আউটপুট) কেবল কখনও একটি ব্যবহার করবে, সুতরাং শব্দার্থক পার্থক্যটি নষ্ট হবে।
cmp
এবং sub
তাদের দুটি ইনপুট সমান হলে জেডএফ সেট করুন (যেমন বিয়োগের ফলাফল 0)। je
(সমান হলে লাফ দেওয়া) শব্দার্থগতভাবে প্রাসঙ্গিক প্রতিশব্দ।
test %eax,%eax
/ and %eax,%eax
আবার ZF সেট করে যখন ফলাফলের শূন্য, কিন্তু না "সমতা" পরীক্ষা আছে। পরীক্ষার পরে জেডএফ আপনাকে দুটি অপারেশন সমান ছিল কিনা তা জানায় না। সুতরাং jz
(শূন্য হলে লাফ দেওয়া) শব্দার্থগতভাবে প্রাসঙ্গিক প্রতিশব্দ।