bne

bne

تجميع RISC-V مرجع

يغطي lyszt.net bne وتعليمات RISC-V الأخرى بمزيد من التفصيل.

تنسيق الترميز

R
31–25funct7
24–20rs2
19–15rs1
14–12funct3
11–7rd
6–0opcode
I
31–20imm[11:0]
19–15rs1
14–12funct3
11–7rd
6–0opcode
S
31–25imm[11:5]
24–20rs2
19–15rs1
14–12funct3
11–7imm[4:0]
6–0opcode
B
31–25imm[12,10:5]
24–20rs2
19–15rs1
14–12funct3
11–7imm[4:1,11]
6–0opcode
U
31–12imm[31:12]
11–7rd
6–0opcode
J
31–12imm[20,10:1,11,19:12]
11–7rd
6–0opcode

الوصف

يعني bne الفرع إذا لم يتساوَ، وهو النظير لـ beq. يقارن سجلين وينتقل إلى الموضع المُعنون عندما يختلفان. وعندما يتطابقان، يستمر التنفيذ بالتعليمة التالية. الشكل موضح أدناه. تُشرح الفروع والعناوين والانتقال بناءً على شرط في صفحة beq.

bne rs1, rs2, label

معًا، يتولى beq وbne كل قرار تساوٍ وعدم تساوٍ. غالبًا ما تصوغ لغة التجميع الشرط بصيغة معكوسة. لتشغيل كتلة من التعليمات البرمجية فقط عندما تتساوى قيمتان، تفرّع حول تلك الكتلة باستخدام bne. تتخطى التعليمات البرمجية الكتلة عندما تختلف القيم وتدخلها عندما تتطابق.

كما يُبقي bne حلقة مستمرة ما دام شرط ما قائمًا. الحلقة التي تستمر حتى تبلغ قيمة ما هدفًا تنتهي بـ bne يقفز عائدًا إلى الأعلى. تتبع قراءة النص هذا النمط، حيث تستمر الحلقة ما دام المحرف الحالي ليس البايت الصفري الذي يعلّم النهاية.

يقول دليل RISC-V إن beq وbne يأخذان الفرع عندما يكون السجلان rs1 وrs2 متساويين أو غير متساويين. الإزاحة قيمة من 12 بت تُعد بمضاعفات 2 بايت، لذا يبلغ الفرع نحو 4 KiB في أي من الاتجاهين، حيث KiB واحدة تساوي 1024 بايت.

bnez هي الصيغة المختصرة للمقارنة مع الصفر، أي السؤال عما إذا كانت قيمة ما ليست صفرًا. المقارنة في bne، كما في beq، هي تساوٍ بسيط للبتات، لذا لا يهمّان القراءتان الموقّعة وغير الموقّعة.

مثال

li t0, 1
li t1, 2
bne t0, t1, done   # t0 != t1, so jump to 'done'