Arithmetic Instruction — sonli operandlar ustida qo‘shish, ayirish, ko‘paytirish, bo‘lish yoki ishorani o‘zgartirish kabi matematik amalni bajaradigan mashina buyrug‘i. U operandlarni registrdan, immediate maydondan yoki ayrim ISAlarda xotiradan oladi va natijani registrga yoki belgilangan manzilga yozadi.
Son ko‘rinishi
Bir xil bit naqshi signed yoki unsigned son sifatida turlicha talqin qilinishi mumkin. Qo‘shishning past bitli natijasi ko‘pincha ikkala talqinda bir xil, ammo overflow va taqqoslash ma’nosi farq qiladi. Ikki to‘ldiruvchi ko‘rinishda manfiy butun sonlar modul arifmetika orqali ifodalanadi.
Operand kengligi 8, 16, 32, 64 bit yoki vektor elementi bo‘lishi mumkin. Natija belgilangan kenglikdan oshsa yuqori bitlar tashlanishi, holat bayrog‘i o‘rnatilishi yoki trap yuz berishi arxitekturaga bog‘liq. Dasturlash tilidagi overflow qoidasi ham ISA bayrog‘idan farq qilishi mumkin; kompilyator ikkalasini moslashtiradi.
Bayroqlar va istisnolar
Ko‘p arxitekturalar nol, manfiy, carry va signed overflow holatlarini qayd etadi. Keyingi branch shu bayroqlardan foydalanadi. Boshqa arxitekturalar bayroqsiz natija ishlab, taqqoslashni alohida registr yoki bevosita branch orqali bajaradi. Bayroq yozish yashirin bog‘liqlik keltirgani sabab ayrim buyruqlarda uni yangilamaslik varianti mavjud.
Butun sonni nolga bo‘lish odatda istisno yoki spetsifikatsiyada belgilangan maxsus natija beradi. Eng kichik signed sonni -1ga bo‘lish ham natija sig‘maydigan chegaraviy holatdir. Ko‘paytirishning keng varianti natijaning yuqori va past qismlarini alohida registrlarga chiqarishi mumkin.
Mikroarxitektura
Oddiy qo‘shish ALUda qisqa kechikish bilan bajariladi. Ko‘paytirish ko‘proq bosqichli, bo‘lish esa iterativ va ma’lumotga bog‘liq davomiylikka ega bo‘lishi mumkin. Mustaqil arifmetik buyruqlar parallel portlarda issue qilinadi; ketma-ket natijaga bog‘liq zanjir esa latency bilan cheklanadi.
Constant folding kompilyatsiya paytida ma’lum ifodani oldindan hisoblaydi. Kuchni kamaytirish optimallashtirishi doimiyga ko‘paytirishni siljitish va qo‘shishga aylantirishi mumkin, ammo signed overflow va til semantikasi saqlanishi kerak.
Aniqlik
Integer arifmetika belgilangan modul doirasida aniq. Floating-point arithmetic esa yaxlitlash, NaN va cheksizlik qoidalariga ega bo‘lib, odatda maxsus FPU buyruqlarida bajariladi. Saturating arifmetika overflowda o‘ralish o‘rniga minimal yoki maksimal qiymatda to‘xtaydi; u audio, tasvir va signal ishlovida foydali.
Kriptografik kodda ayrim arifmetik amallarning bajarilish vaqti operandga bog‘liq bo‘lsa, yon kanal paydo bo‘lishi mumkin. Doimiy vaqt talabi buyruq tanlovi, jadval murojaati va branchlarni birgalikda ko‘rib chiqadi.
Ko‘p aniqlikli hisob
Registr kengligidan katta butun son bir nechta so‘zda saqlanadi. Past so‘zni qo‘shishdan chiqqan carry keyingi yuqori so‘zga uzatiladi. ISA add-with-carry va subtract-with-borrow buyruqlarini bersa, katta integer kutubxonasi samarali ketma-ketlik quradi. Ko‘paytirishda operandlarning qisman ko‘paytmalari yuqori va past natija bilan jamlanadi.
Division qimmat bo‘lgani uchun kompilyator ma’lum musbat doimiyga bo‘lishni “magic” ko‘paytiruvchi va shiftga aylantirishi mumkin. Bu transformatsiya barcha chegara qiymatlarida aynan bir xil quotient va remainder berishi isbotlanadi. Signed son, nolga yaqin yaxlitlash va eng kichik manfiy qiymat uchun oddiy algebraik taxmin yetarli emas.
Arifmetik buyruqning energiya narxi ham turlicha: qo‘shish, keng ko‘paytirish va bo‘lish bir xil resurs talab qilmaydi. Quvvatga cheklangan chip murakkab unitni faqat talab qilinganda uyg‘otadi; ketma-ket foydalanish uyg‘onish xarajatini amortizatsiyalaydi.
Bog‘liq tushunchalar
ALU, integer arithmetic, overflow, condition code, multiplication, floating-point instruction