এমআইপিএস কেন R0 কে "শূন্য" হিসাবে ব্যবহার করে যখন আপনি কেবল দুটি উত্পাদনের জন্য এক্সওর দুটি রেজিস্টার করতে পারবেন?


10

আমি মনে করি যে আমি একটি ট্রিভিয়া প্রশ্নের উত্তর খুঁজছি। আমি বুঝতে চেষ্টা করছি যে এমআইপিএস আর্কিটেকচারটি কেন কোনও রেজিস্টারে একটি স্পষ্ট "শূন্য" মান ব্যবহার করে আপনি যখন নিজের বিপরীতে কোনও রেজিস্টার এক্সওর করে একই জিনিস অর্জন করতে পারেন। কেউ বলতে পারে যে অপারেশনটি আপনার জন্য ইতিমধ্যে সম্পন্ন হয়েছে; তবে, আমি সত্যিই এমন পরিস্থিতিটি ভাবতে পারি না যেখানে আপনি প্রচুর "শূন্য" মান ব্যবহার করবেন। আমি হেনেসির মূল কাগজপত্র পড়েছি এবং এটি সত্যিকারের ন্যায়সঙ্গততা ছাড়াই একটি শূন্যকে সত্য হিসাবে বিবেচনা করে।

শূন্যের একটি হার্ড-কোডেড বাইনারি অ্যাসাইনমেন্ট থাকার যৌক্তিক কারণটি কি বিদ্যমান?

আপডেট: পিআইসি 32 এমজেডের এমআইপিএস কোরের জন্য এক্সসি 32-জিসিসি থেকে এক্সিকিউটেবলের 8 কেতে আমার কাছে "শূন্য" এর একক উদাহরণ রয়েছে।

add     t3,t1,zero

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

  • পূর্ণসংখ্যা শূন্য এবং শাখার সাথে তুলনা করুন (বিজেজ, বিজিটিজ, ব্লাজ, ব্ল্টজ)
  • পূর্ণসংখ্যা দুটি রেজিস্টার এবং শাখা (বেক, বাইন) তুলনা করুন
  • পূর্ণসংখ্যা দুটি রেজিস্টার এবং ট্র্যাপের তুলনা করুন (টেক, টিজ, টিলটি, টেন)
  • পূর্ণসংখ্যার তুলনা করুন নিবন্ধকার এবং তাত্ক্ষণিক এবং ফাঁদ (টেকি, টেজি, টল্টি, টেনি)

হার্ডওয়্যার বাস্তবায়নের ক্ষেত্রে এটি কীভাবে দেখায় কেবল তা নীচে আসে। এমআইপিএস-ভি ম্যানুয়ালটি থেকে, 68 পৃষ্ঠায় একটি অনাদায়ী উদ্ধৃতি রয়েছে:

শর্তসাপেক্ষ শাখাগুলি দুটি রেজিস্টারের মধ্যে পাটিগণিত তুলনা অপারেশনগুলি অন্তর্ভুক্ত করার জন্য ডিজাইন করা হয়েছিল (পিএ-আরআইএসসি এবং এক্সটেনসা আইএসএ তেও হয়েছিল), শর্ত কোডগুলি ব্যবহার করার পরিবর্তে (x86, এআরএম, এসপিএআরসি, পাওয়ারপিসি), বা কেবল শূন্যের বিপরীতে একটি নিবন্ধের তুলনা করতে ( আলফা, এমআইপিএস, বা দুটি কেবলমাত্র সমতা (এমআইপিএস) এর জন্য নিবন্ধভুক্ত। এই নকশাটি পর্যবেক্ষণ দ্বারা অনুপ্রাণিত হয়েছিল যে একটি সম্মিলিত তুলনা এবং শাখার নির্দেশকে একটি নিয়মিত পাইপলাইনে টিএস করে, অতিরিক্ত শর্তের কোডের অবস্থা বা অস্থায়ী নিবন্ধের ব্যবহার এড়ানো যায় এবং স্থির কোডের আকার এবং গতিশীল নির্দেশ আনতে ট্র্যাক হ্রাস করে। আরেকটি বিষয় হ'ল শূন্যের তুলনায় তুলনামূলকভাবে তুচ্ছ তরঙ্গীয় সার্কিটের বিলম্বের প্রয়োজন হয় (বিশেষত উন্নত প্রক্রিয়াগুলিতে স্থির যুক্তিতে সরে যাওয়ার পরে) এবং এটি গণিতের দৈর্ঘ্যের তুলনায় প্রায় ব্যয়বহুল। একটি সংযুক্ত তুলনা এবং শাখা নির্দেশের আরেকটি সুবিধা হ'ল শাখাগুলি সামনের-শেষ নির্দেশ প্রবাহে আগে পর্যবেক্ষণ করা হয় এবং এর আগে পূর্বাভাস দেওয়া যেতে পারে। এক্ষেত্রে শর্ত কোড সহ একটি ডিজাইনের সুবিধা রয়েছে যেখানে একই শর্ত কোডের ভিত্তিতে একাধিক শাখা নেওয়া যেতে পারে তবে আমরা বিশ্বাস করি যে এই ক্ষেত্রেটি তুলনামূলকভাবে বিরল।

এমআইপিএস-ভি নথি উদ্ধৃত বিভাগটির লেখককে আঘাত করে না। আমি তাদের সময় এবং বিবেচনার জন্য সবাইকে ধন্যবাদ জানাই।


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

3
AVR আর্কিটেকচারে, gcc প্রারম্ভকালে r1 থেকে শূন্য শুরুর দিকে যত্ন নেয় এবং আর কখনওই সেই মানটিকে স্পর্শ করে না, যেখানেই তাত্ক্ষণিক 0 ব্যবহার করা যায় না, উত্স হিসাবে r1 ব্যবহার করে। এখানে, উত্সর্গীকৃত শূন্য নিবন্ধটি পারফরম্যান্সের কারণে সংকলক দ্বারা সফ্টওয়্যারটিতে 'অনুকরণ' করা হয়। (বেশিরভাগ এভিআরগুলিতে 32 টি রেজিস্টার থাকে, সুতরাং এক (দুটি, আসলে) আলাদা করে রাখার সম্ভাব্য পারফরম্যান্স এবং কোড আকারের সুবিধার ক্ষেত্রে খুব বেশি খরচ হয় না))
জিমিবি

1
আমি এমআইপিএস সম্পর্কে জানি না, তবে এটি ক্লিয়ার করার জন্য রেজিস্টার কেওরিংয়ের তুলনায় আর0 কে অন্য রেজিস্টারে নিয়ে যাওয়া আরও দ্রুত হতে পারে।
জিমিবি

সুতরাং আপনি এই বিষয়টিতে দ্বিমত পোষণ করেন যে শূন্যটি এত ঘন ঘন যে এটি রেজিস্টারে ফাইলের মধ্যে একটি অবস্থানের জন্য মূল্যবান? তাহলে সম্ভবত আপনি ঠিক বলেছেন কারণ এটি সত্য যে এটি বিতর্কিত এবং প্রচুর আইএসএ শূন্য রেজিস্টার সংরক্ষণ না করার জন্য পছন্দ করে। "বিতর্কিত উইন্ডো, শাখার স্লট," পুরানো দিনগুলি "থেকে নির্দেশের পূর্বাভাসের মতো সেই সময়ে অন্যান্য বিতর্কিত বৈশিষ্ট্যের মতো ... আপনি যদি আইএসএ ডিজাইন করতে চান তবে আপনি সেগুলি ব্যবহার করবেন না যদি আপনি সিদ্ধান্ত না নেন।
ব্যবহারকারী 3528438

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

উত্তর:


14

আরআইএসসি সিপিইউতে শূন্য-নিবন্ধ দুটি কারণে কার্যকর:

এটি একটি দরকারী ধ্রুবক

আইএসএর বিধিনিষেধের উপর নির্ভর করে আপনি কিছু নির্দেশাবলীর এনকোডিংয়ে আক্ষরিক ব্যবহার করতে পারবেন না তবে আপনি r00 পেতে এটি ব্যবহার করতে পারবেন তা নিশ্চিত হতে পারেন ।

এটি অন্যান্য নির্দেশাবলী সংশ্লেষিত করতে ব্যবহার করা যেতে পারে

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

শূন্য-নিবন্ধের শব্দার্থবিজ্ঞানগুলি /dev/zero* নিক্স সিস্টেমে এর মতো: এতে লিখিত সমস্ত কিছুই বাতিল করা হয় এবং আপনি সর্বদা 0 টি পড়েন।

আসুন আমরা r0শূন্য-নিবন্ধকের সাহায্যে সিউডো-নির্দেশাবলী কীভাবে তৈরি করতে পারি তার কয়েকটি উদাহরণ দেখুন :

; ### Hypothetical CPU ###

; Assembler with syntax:
; op rd, rm, rn 
; => rd: destination, rm: 1st operand, rn: 2nd operand
; literal as #lit

; On an CPU architecture with a status register (which contains arithmetic status
; flags), `sub` can be used, with r0 as destination to discard result.
cmp rn, rm     ; => sub r0, rn, rm

; `add` instruction can be used as a `mov` instruction:
mov rd, rm     ; => add rd, rm, r0
mov rd, #lit   ; => add rd, r0, #lit

; Negate:
neg rd, rm     ; => sub rd, r0, rm

; On CPU without status flags,
nop            ; => add r0, r0, r0

; RISC-V's `jal` instruction -- Jump and Link: Jump to PC-relative instruction,
; save return address into rd; we can synthesize a `jmp` instruction out of it.
jmp dest       ; => jal r0, dest

; You can even load from an absolute (direct) address, for a usually small range
; of addresses by using a literal offset as an address.
ld rd, addr    ; => ld rd, [r0, #addr]

এমআইপিএস-এর ঘটনা

আমি এমআইপিএস নির্দেশের সেটটি আরও ঘনিষ্ঠভাবে দেখলাম। ব্যবহারযোগ্য কয়েকটি সিউডো-নির্দেশাবলী রয়েছে $zero; এগুলি প্রধানত শাখার জন্য ব্যবহৃত হয়। আমি যা পেয়েছি তার কয়েকটি উদাহরণ এখানে দেওয়া হয়েছে:

move $rt, $rs          => add $rt, $rs, $zero

not $rt, $rs           => nor $rt, $rs, $zero

b Label                => beq $zero, $zero, Label ; a small relative branch

bgt $rs, $rt, Label    => slt $at, $rt, $rs
                          bne $at, $zero, Label

blt $rs, $rt, Label    => slt $at, $rs, $rt
                          bne $at, $zero, Label

bge $rs, $rt, Label    => slt $at, $rs, $rt
                          beq $at, $zero, Label

ble $rs, $rt, Label    => slt $at, $rt, $rs
                          beq $at, $zero, Label

কেন আপনি $zeroআপনার ডিসেজেপ্যাজে নিবন্ধের কেবলমাত্র একটি উদাহরণ খুঁজে পেয়েছেন , সম্ভবত এটি আপনার ডিসেসেমব্লার যা নির্দেশের জ্ঞাত সিকোয়েন্সগুলি তাদের সমতুল্য ছদ্ম-নির্দেশিকায় রূপান্তর করতে যথেষ্ট স্মার্ট is

শূন্য-নিবন্ধটি কি সত্যিই দরকারী?

ভাল, স্পষ্টতই, এআরএম একটি শূন্য-নিবন্ধক যথেষ্ট দরকারী যে তাদের (কিছুটা) নতুন এআরএমভি 8-এ কোর, যা আআআআআআর 64 বাস্তবায়িত করেছে, এখন 64৪-বিট মোডে শূন্য-নিবন্ধ রয়েছে; আগে শূন্য-নিবন্ধ ছিল না। (নিবন্ধটি কিছুটা বিশেষ যদিও কিছু এনকোডিং প্রসঙ্গে এটি একটি শূন্য-রেজিস্টার, অন্যদের মধ্যে এটি স্ট্যাক পয়েন্টারটিকে পরিবর্তিত করে )


আমার মনে হয় না এমআইপিএস পতাকা ব্যবহার করে, তাইনা? শূন্য নিবন্ধটি কোনও সিপিইউ নিবন্ধের বিষয়বস্তু বিবেচনা না করে শর্তাধীন কিছু নির্দিষ্ট ঠিকানা পড়ার / লেখার ক্ষমতা যুক্ত করে এবং "মুভ তাত্ক্ষণিক"-স্টাইল অপারেশনকে সহায়তা করে, তবে অন্যান্য মুভগুলি নিজের সাথে সূত্রকে যৌক্তিক বা ই-এন-ইন দ্বারা সম্পন্ন করতে পারে ।
সুপারক্যাট

1
প্রকৃতপক্ষে, কোন রেজিস্টার যে গাণিতিক পতাকা রাখা হয়, এর পরিবর্তে তিনটি নির্দেশাবলী আছে সাহায্যের অনুকরণ সাধারণ শর্তসাপেক্ষ শাখা ( slt, slti, sltu)।
ঝাড়মন্ডার

এমআইপিএস নির্দেশিকাটির সেটটি দেখে এবং আমি যে নির্দেশনাটি বুঝতে পারি তা থেকে পূর্ববর্তী নির্দেশনা কার্যকর হওয়ার সময়ের মধ্যেই আমি আশ্চর্য হয়েছি, আমি অবাক হয়েছি যদি এমন কোনও অপকোড পাওয়া মুশকিল হত যা সরাসরি কিছু না করে তবে পরিবর্তে বলে যে যদি কোনও তাত্ক্ষণিক-মোড নির্দেশ কার্যকর হয় এবং পরবর্তী প্রাপ্ত নির্দেশের সেই বিট প্যাটার্ন থাকে তবে অপারেন্ডের উপরের 16 টি বিটগুলি পূর্বনির্দেশিত নির্দেশনা থেকে নেওয়া হবে? এটি 32-বিট তাত্ক্ষণিক-মোড অপারেশনগুলিকে দুটি শব্দ এবং দুটি চক্র ব্যয় না করে দ্বি-শব্দের দ্বি-চক্র নির্দেশনা দিয়ে পরিচালিত হবে ...
সুপারক্যাট

... একটি অপারেন্ড লোড করা হচ্ছে এবং তারপরে এটি ব্যবহারের জন্য তৃতীয় চক্র।
সুপারক্যাট

7

বেশিরভাগ এআরএম / শক্তি / স্পার্ক বাস্তবায়নের একটি লুকানো RAZ রেজিস্টার রয়েছে

আপনি ভাবতে পারেন যে এআরএম 32, স্পারসি ইত্যাদির 0 টি নিবন্ধ নেই তবে বাস্তবে তারা করে! মাইক্রো-আর্কিটেকচার স্তরে, বেশিরভাগ সিপিইউ ডিজাইন ইঞ্জিনিয়াররা 0 টি রেজিস্টারে যুক্ত করেন যা সফ্টওয়্যারটিতে অদৃশ্য হতে পারে (এআরএম এর শূন্য রেজিস্ট্রেশন অদৃশ্য) এবং নির্দেশের ডিকোডকে প্রবাহিত করতে সেই শূন্য রেজিস্টারটি ব্যবহার করে।

একটি সাধারণ আধুনিক এআরএম 32 ডিজাইনের কথা বিবেচনা করুন যাতে সফ্টওয়্যার অদৃশ্য রেজিস্টার রয়েছে, বলুন R16 ওয়্যার্ড করুন 0 এআরএম 32 লোডটি বিবেচনা করুন, এআরএম 32 লোড নির্দেশনার অনেকগুলি ক্ষেত্রে এই ফর্মগুলির মধ্যে একটি পড়ে যায় (আলোচনাটিকে সহজ রাখতে কিছুক্ষণের জন্য প্রাক-পোস্ট সূচকে উপেক্ষা করুন) ) ...

LDR ra, [rb] // NOTE:The ! is optional and represents address writeback.
LDR ra, [rb, rc](!)
LDR ra, [rb, #k](!)

প্রসেসরের অভ্যন্তরে, এটি একটি জেনারেলের কাছে ডিকোড হয়

ldr.uop ra, rb, rx, rc, #c // Internal decoded instruction format.

ইস্যু পর্যায়ে প্রবেশের আগে যেখানে রেজিস্টারগুলি পড়া হয়। নোট করুন যে আপডেট হওয়া ঠিকানাটি লিখতে ব্যাক করতে rx নিবন্ধকে উপস্থাপন করে। এখানে কয়েকটি ডিকোড উদাহরণ রয়েছে:

LDR R0, [R1]      ==> ldr.uop R0, R1, R16, R16, #0 // Writeback to NULL. 
LDR R0, [R1, R2]! ==> ldr.uop R0, R1, R1, R2,   #0 // Writeback to R1.
LDR R0, [R1, #2]  ==> ldr.uop R0, R1, R16, R16, #2 // Writeback to NULL.

সার্কিট স্তরে, তিনটি বোঝা আসলে একই অভ্যন্তরীণ নির্দেশ এবং এই ধরণের অরথোগোনালিটি পাওয়ার একটি সহজ উপায় একটি গ্রাউন্ড রেজিস্টার আর 16 তৈরি করা। যেহেতু আর 16 সর্বদা ভিত্তিযুক্ত তাই এই নির্দেশাবলী কোনও অতিরিক্ত যুক্তি ছাড়াই স্বাভাবিকভাবেই ডিকোড হয়। একক অভ্যন্তরীণ ফর্ম্যাটে নির্দেশাবলীর শ্রেণীর ম্যাপিং সুপারসক্যালার বাস্তবায়নে ব্যাপকভাবে সহায়তা করে কারণ এটি যুক্তির জটিলতা হ্রাস করে।

আরেকটি কারণ হ'ল লেখাগুলি ছুঁড়ে ফেলার একটি সুচারু উপায়। গন্তব্য নিবন্ধকরণ এবং আর -16 এ পতাকা সেট করে নির্দেশাবলী অক্ষম করা যেতে পারে। রাইটিং-ব্যাক ইত্যাদি অক্ষম করতে অন্য কোনও নিয়ন্ত্রণ সংকেত তৈরি করার দরকার নেই

আর্কিটেকচার নির্বিশেষে বেশিরভাগ প্রসেসরের বাস্তবায়ন পাইপলাইনে আরএজেড নিবন্ধকের মডেলটি দিয়ে শেষ হয়। এমআইপিএস পাইপলাইনটি মূলত এমন এক বিন্দুতে শুরু হয় যা অন্যান্য আর্কিটেকচারে কয়েক ধাপ হতে পারে।

এমআইপিএস সঠিক পছন্দ করেছে

সুতরাং, যে কোনও আধুনিক প্রসেসর বাস্তবায়নে রিড-এ-শূন্য রেজিস্ট্রেশন প্রায় বাধ্যতামূলক এবং এমআইপিএস এটি সফ্টওয়্যারটিতে দৃশ্যমান করে তোলে এটি অভ্যন্তরীণ ডিকোড যুক্তিটিকে কীভাবে প্রবাহিত করে তা অবশ্যই একটি প্লাস পয়েন্ট। এমআইপিএস প্রসেসরের ডিজাইনারদের অতিরিক্ত আরএজেড নিবন্ধে যুক্ত করার দরকার নেই যেহেতু already 0 ইতিমধ্যে মাটিতে রয়েছে। যেহেতু আরএজেড এসেম্বলারের জন্য উপলভ্য, তাই এমপিএসের কাছে প্রচুর সিকোডো নির্দেশাবলী পাওয়া যায় এবং এটিকে ডিভাইসটি যুক্তিটির অংশটিকে এসেম্বলারের কাছে ধাক্কা হিসাবে বিবেচনা করতে পারে সফ্টওয়্যার থেকে আরএজেড নিবন্ধকে আড়াল করার জন্য প্রতিটি নির্দেশের জন্য ডেডিকেটেড ফর্ম্যাট তৈরি করার পরিবর্তে অন্যান্য স্থাপত্যের মতো। RAZ রেজিস্টারটি একটি ভাল ধারণা এবং এজন্য এআরএমভি 8 এটি অনুলিপি করেছে।

যদি এআরএম 32 এর একটি $ 0 নিবন্ধ থাকে, তবে ডিকোড যুক্তিটি সহজ হয়ে যেত এবং গতি, অঞ্চল এবং শক্তির দিক থেকে স্থাপত্যটি আরও ভাল been উদাহরণস্বরূপ, উপরে উপস্থাপন করা এলডিআরের তিনটি সংস্করণের মধ্যে কেবল ২ টি ফর্ম্যাটের প্রয়োজন হবে। একইভাবে, এমওভি এবং এমভিএন নির্দেশাবলীর জন্য ডিকোড যুক্তি সংরক্ষণ করার দরকার নেই। এছাড়াও, সিএমপি / সিএমএন / টিএসটি / টিইকিউ অপ্রয়োজনীয় হয়ে উঠবে। সংক্ষিপ্ত (এমইউএল) এবং দীর্ঘ গুণ (ইউএমইউএলএল / এসএমইউএল) এর মধ্যে পার্থক্য করার প্রয়োজনও থাকবে না কারণ সংক্ষিপ্ত গুণকে register 0 ইত্যাদিতে নির্ধারিত উচ্চ নিবন্ধের সাথে দীর্ঘ গুণ হিসাবে বিবেচনা করা যেতে পারে short

যেহেতু প্রাথমিকভাবে এমআইপিএস একটি ছোট দল দ্বারা ডিজাইন করা হয়েছিল, তাই নকশার সরলতা গুরুত্বপূর্ণ ছিল এবং তাই স্পষ্টভাবে আরআইএসসির চেতনায় $ 0 বেছে নেওয়া হয়েছিল। এআরএম 32 স্থাপত্য স্তরে প্রচুর প্রচলিত সিআইএসসি বৈশিষ্ট্য ধরে রেখেছে।


1
সমস্ত এআরএম 32 সিপিইউ আপনার বর্ণনা অনুযায়ী কাজ করে না। কারও কারও কাছে আরও জটিল লোড নির্দেশাবলী এবং / অথবা রেজিস্টারটিতে লিখিত-ব্যাকের জন্য কম পারফরম্যান্স রয়েছে। সুতরাং তারা সবাই ঠিক একইভাবে ডিকোড করতে পারে না।
পিটার

6

দাবি অস্বীকারকারী: আমি সত্যিই এমআইপিএস এসেম্বেলারকে জানি না, তবে 0-মান রেজিস্টার এই আর্কিটেকচারের পক্ষে অনন্য নয়, এবং আমার ধারণা, এটি অন্য আরআইএসসি আর্কিটেকচারের মতোই ব্যবহার করা হয়েছিল।

0 পাওয়ার জন্য একটি রেজিস্টার XORing করা আপনার জন্য একটি নির্দেশিকা ব্যয় করতে হবে, যখন একটি পূর্বনির্ধারিত 0-মান নিবন্ধ ব্যবহার করবেন না।

উদাহরণস্বরূপ, mov RX, RYনির্দেশটি প্রায়শই হিসাবে প্রয়োগ করা হয় add RX, RY, R0। 0-মান রেজিস্ট্রেশন ছাড়াই আপনাকে xor RZ, RZযতবার ব্যবহার করতে চাইবে ততবার করতে হবে mov

আর একটি উদাহরণ হ'ল cmpনির্দেশনা এবং এর রূপগুলি (যেমন "তুলনা করুন এবং লাফানো", "তুলনা করুন এবং সরান" ইত্যাদি), যেখানে cmp RX, R0নেতিবাচক সংখ্যার জন্য পরীক্ষার জন্য ব্যবহৃত হয়।


1
MOV Rx,Ryহিসাবে বাস্তবায়ন কোন সমস্যা আছে AND Rx,Ry,Ry?
সুপারক্যাট

3
@ সুপের্যাট আপনি এনকোড করতে সক্ষম হবেন না mov RX, Immবা mov RX, mem[RY]যদি আপনার নির্দেশ সেটটি কেবলমাত্র একক তাত্ক্ষণিক মান এবং প্রতি নির্দেশ অনুসারে একক মেমরি অ্যাক্সেস সমর্থন করে।
দিমিত্রি গ্রিগরিয়েভ

এমআইপিএসের কী মোডে আছে তার ঠিকানা সম্পর্কে আমি পরিচিত নই। আমি জানি যে এআরএম এর [আরএক্স + রাই << স্কেল] এবং [আরএক্স + ডিসপ্লে] মোড রয়েছে এবং কিছু পরম ঠিকানাগুলির জন্য পরবর্তীটি ব্যবহার করতে সক্ষম হওয়া কিছু ক্ষেত্রে এটি সাধারণত প্রয়োজনীয় নয়। শূন্য স্থানচ্যুতি ব্যবহার করে একটি সরল [আরএক্স] মোড [আরএক্স + ডিসপ্লে] এর মাধ্যমে অনুকরণ করা যেতে পারে। এমআইপিএস কী ব্যবহার করে?
সুপারক্যাট

movএকটি দরিদ্র উদাহরণ; আপনি এটি শূন্য নিবন্ধের পরিবর্তে অবিলম্বে 0 দিয়ে প্রয়োগ করতে পারেন। যেমন ori dst, src, 0। তবে হ্যাঁ, যদি আপনি ছিল না সিনেমা-অবিলম্বে রেজিস্টার জন্য একটি opcode প্রয়োজন চাই addiu $dst, $zero, 1234, মত luiকিন্তু উপরের 16. পরিবর্তে নিম্ন 16 বিট এবং আপনি ব্যবহার করতে পারে norবা subএক-প্রতীক না / neg গড়ে তুলতে ।
পিটার

@ সুপের্যাট: যদি আপনি এখনও অবাক হন: ক্লাসিক এমআইপিএসের কেবলমাত্র একটি একক ঠিকানা রয়েছে: রেজিস্টার + ডিসপ্লে 16। মডার্ন এমআইপিএস এফপি লোড / স্টোরগুলির জন্য 2-নিবন্ধক ঠিকানার মোডের জন্য অন্যান্য ওপকডগুলি যুক্ত করেছে, অ্যারে সূচকটি দ্রুততর করে। (তবে এখনও পূর্ণসংখ্যক লোড / স্টোরের জন্য নয়, সম্ভবত এটির জন্য 2 ঠিকানার রেজি + স্টোরের জন্য একটি ডেটা রেগের জন্য পূর্ণসংখ্যার রেজিস্টার ফাইলের আরও পঠিত পোর্টগুলির প্রয়োজন হতে পারে See অফসেট হিসাবে একটি রেজিস্টার ব্যবহার করুন দেখুন )
পিটার

3

আপনার রেজিস্টার ব্যাঙ্কের শেষে কয়েকটি সীসা বেঁধে রাখা সস্তা (এটিকে পুরোপুরি বিকশিত রেজিস্টার করার চেয়ে সস্তা)।

প্রকৃত জোর করতে গেটগুলি স্যুইচ করতে এবং তারপরে এটি রেজিস্টারে সংরক্ষণ করতে কিছুটা শক্তি এবং সময় লাগে, যখন কোনও বিদ্যমান 0 মান সহজেই পাওয়া যায় তখন কেন সেই মূল্য দিতে হবে।

আধুনিক সিপাসে একটি (লুকানো) 0-মান রেজিস্টারও রয়েছে যা তারা xor eax eaxনিবন্ধের নাম পরিবর্তনের মাধ্যমে কোনও নির্দেশের ফলস্বরূপ ব্যবহার করতে পারেন ।


6
এর আসল ব্যয় R0কয়েকটি তারের গ্রাউন্ডিংয়ের ক্ষেত্রে নয় তবে রেজিস্টারগুলির সাথে সম্পর্কিত প্রতিটি নির্দেশে আপনাকে এর জন্য একটি কোড সংরক্ষণ করতে হবে।
দিমিত্রি গ্রিগরিয়েভ

এক্সোরটি একটি লাল রঙের হেরিং। এক্সওর-জিরোনিং কেবল এক্স ৮ good-তে ভাল, যেখানে সিপিইউরা আইডিয়োমকে স্বীকৃতি দেয় এবং ইনপুটগুলির উপর নির্ভরতা এড়ায়। আপনি উল্লেখ করেছেন যে, স্যান্ডিব্রিজে-পরিবার এমনকি এটির জন্য একটি চালাও চালায় না, কেবল এটি রেজিস্টার-নামকরণ পর্যায়ে পরিচালনা করে। ( X86 অ্যাসেমব্লিতে শূন্যে একটি নিবন্ধীকৃত করার সর্বোত্তম উপায় কী: xor, Mov বা এবং? )। তবে এমআইপিএস-এ, একটি রেজিস্টার XORing- এ একটি মিথ্যা নির্ভরতা থাকবে; মেমরি নির্ভরতা আদেশের নিয়ম (সি ++ এর সমতুল্য HW std::memory_order_consume) এর নির্ভরতা প্রচারের জন্য এক্সওআর প্রয়োজন।
পিটার

আপনার যদি শূন্য নিবন্ধ না থাকে, আপনি একটি রেজিস্টারে তাৎক্ষণিকভাবে সরানোর জন্য একটি অপকোড অন্তর্ভুক্ত করবেন। lui16 টির মতো তবে বাঁ-স্থানান্তরিত নয় So তাই আপনি এখনও একটি নির্দেশ দিয়ে একটি নিবন্ধে একটি ছোট সংখ্যা রাখতে পারেন। মিথ্যা নির্ভরতার সাথে কেবল শূন্যের অনুমতি দেওয়া পাগল হবে। (সাধারণ এমআইপিএস এর সাথে শূন্য-মান তৈরি করে addiu $dst, $zero, 1234বা oriতাই, আপনার "বিদ্যুতের ব্যয়" যুক্তিটি ভেঙে যায় you তাত্ক্ষণিক শূন্য সহ।)
পিটার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.