sub
يغطي lyszt.net sub وتعليمات RISC-V الأخرى بمزيد من التفصيل.
تنسيق الترميز
الوصف
تقوم sub بطرح القيمة الموجودة في أحد السجلات من قيمة سجل آخر وتدوين النتيجة في سجل ثالث. وهي تعمل على السجلات، وهي فتحات تخزين صغيرة مرقمة داخل المعالج يحتوي كل منها على رقم واحد مكون من 32 بت.
يظهر شكل sub أدناه، والنتيجة هي rd = rs1 - rs2. rd هو السجل الوجهة، حيث تذهب النتيجة. rs1 و rs2 هما السجلان المصدران. الترتيب مهم، وعكسه خطأ شائع يرتكبه المبتدئون.
sub rd, rs1, rs2
السطر التالي يحسب t0 ناقص t1. المصدر الأيسر هو القيمة التي تُطرح منها.
sub t2, t0, t1
لا توجد تعليمة subi لطرح ثابت. تقبل تعليمة addi الثوابت السالبة، لذا فإن طرح عدد ثابت يعني إضافة سالبه. السطر التالي يقلل قيمة t0 بمقدار واحد.
addi t0, t0, -1
يحتوي RISC-V على سجل خاص يُسمى zero يحمل دائمًا القيمة 0. تؤدي طرح عدد من zero إلى عكس إشارته، لذا فإن السطر التالي يضع سالب t1 في t0. تعليمة neg هي اختصار لهذا.
sub t0, zero, t1
يُعرّف دليل RISC-V الأمر sub بأنه طرح rs2 من rs1. يتم تجاهل التجاوز (overflow)، ولا تُكتب في السجل rd سوى البتات المنخفضة من XLEN من النتيجة، حيث XLEN هو عرض السجل بالبتات، وهو 32 في هذه الحالة. يذكر الدليل أيضًا أن السجل x0، الذي يسميه هذا المحاكي zero، مبرمج بشكل ثابت على قيمة تكون جميع بتاتها 0.
في المثال، 10 ناقص 4 يساوي 6 في t2. وتبادل المصدرين يعطي -6، والذي يخزنه المعالج وفقًا لنظامه الخاص للأعداد السالبة.
مثال
li t0, 10 li t1, 4 sub t2, t0, t1 # t2 = 6
المصادر
- [1]RISC-V International. The RISC-V Instruction Set Manual, Volume I: Unprivileged Architecture. Version 20260120. Section 2.4.2, Integer Register-Register Instructions, page 29.
- [2]RISC-V International. The RISC-V Instruction Set Manual, Volume I: Unprivileged Architecture. Version 20260120. Section 2.1, Programmers' Model for Base Integer ISA, page 23.
- [3]RISC-V International. The RISC-V Instruction Set Manual, Volume I: Unprivileged Architecture. Version 20260120. Section 2.4, Integer Computational Instructions, page 27.
