برنامه نویسی

Instruction Set Architecture، زبان ماشین ها

برای برقراری ارتباط با یک کامپیوتر، باید به زبان آن صحبت کنیم، واژگان این “زبان” به عنوان شناخته شده است. مجموعه دستورالعمل. برای برنامه نویسان وظیفه می توان گفت که ISA سخت افزار رابط آن با نرم افزار یا به عبارت ساده API آن است.

من قبلاً در پست قبلی کمی در مورد نحوه کار رایانه ها و نحوه برقراری ارتباط بین زبان برنامه نویسی و سخت افزار ما توضیح داده ام، اما به طور خلاصه بازنویسی می کنم.

مانند اگر، fors ه vars آیا باینری‌هایی را دیده‌اید که کامپیوتر آنها را بفهمد؟

همانطور که قبلا گفته شد، کامپیوتر فقط می فهمد دستورالعمل ها، یعنی برای کار با کامپیوتر باید از ISA استفاده کنیم. به دستورالعمل ها آنها از دنباله ای از اعداد باینری تشکیل شده اند که برای کامپیوتر معنی دارند.

استفاده از اعداد باینری مستقیم برای برقراری ارتباط با کامپیوتر یک کار پیچیده و خسته کننده است، به عبارت دیگر، یک صفحه کامل برای یک برنامه نویس است تا این کار را ساده تر کند، بنابراین برنامه ای ساخته شد که به برنامه نویسی کمک می کند به نام assemblersکه زبان نوشته شده و درک شده توسط انسان را به زبان ماشین (دستورالعمل) ترجمه کرده است.

با وجود assembly در حال حاضر ساده سازی پوچ در مقایسه با دستورالعمل ها خام، هنوز هم بسیار شبیه طرز فکر و عمل ماشین بود و نه انسان، که به این ترتیب زبان های برنامه نویسی بالاترین سطح مانند C، C++، جاوا و امثال آن ایجاد شد.

اولین زبان ها به عنوان یک انتزاع در بالای لایه زبان عمل می کردند. assembly، جایی که برنامه ای داشتید که دستورات زبان را به دستورات تبدیل می کرد assembly ، به این برنامه کامپایلر می گویند.

کامپایلر ارتباط با رایانه را در دسترس قرار می دهد و به ما امکان می دهد آنچه را که دوست داریم ماشین با تفکر ما نزدیک تر عمل کند، مدل سازی کنیم.

// o seguinte programa em C só é possível de ser interpretado por conta dos compiladores

swap(size_t v[], size_t k) {
    size_t temp;
    temp = v[k];
    v[k] = v[k+1];
    v[k+1] = temp;
}

// traduzido para assembly pelo compilador
swap:
    slli x6, x11, 3
    add  x6, x10, x6
    lw   x5, 0(x6)
    lw   x7, 4(x6)
    sw   x7, 0(x6)
    sw   x5, 4(x6)
    jalr x0, 0(x1)

// traduzido para binários
00000000001101011001001100010011
00000000011001010000001100110011
00000000000000110011001010000011
00000000100000110011001110000011
00000000011100110011000000100011
00000000010100110011010000100011
00000000000000001000000001100111
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

عملیات حسابی

هر کامپیوتری باید بداند که چگونه با عملیات حسابی کار کند، بنابراین دستورالعمل های حسابی اساس هر ISA را تشکیل می دهند.

با تجزیه و تحلیل معماری RISC-V و زبان اسمبلی آن، ما 3 دستورالعمل حسابی داریم:

  • افزودن (جمع، از 3 ثبت استفاده می کند)
  • تفریق (تفریق، از 3 ثبات استفاده می کند)
  • افزودن فوری (با ثابت اضافه می کند، از 2 ثبات استفاده می کند)

عملیات حسابی در سخت افزار فقط در مکان های خاص اتفاق می افتد، به این مکان ها ثبات می گویند.

در ادامه معماری RISC-V، دارای 32 ثبات با اندازه 32 بیت است، این گروه بندی 32 بیتی آنقدر اتفاق می افتد که ما آن را می نامیم. کلمه.

عملیات حافظه

همانطور که دیدیم، معماری RISC-V دارای 32 رجیستر 32 بیتی است، اما از زبان های برنامه نویسی می دانیم که می توانیم انواع اندازه های متغیر یا حتی انواع ترکیبی مانند آرایه ها را داشته باشیم. با توجه به این نیاز، ما به دستورالعمل هایی نیاز داریم که بتواند داده ها را از ثبات ها به حافظه کامپیوتر منتقل کند و بالعکس.

دستورالعمل هایی که داده ها را بین ثبات ها و حافظه جابجا می کنند نامیده می شوند دستورالعمل های انتقال داده.

در RISC-V دو دستورالعمل انتقال داده داریم:

  • بارگذاری (یک کلمه را از یک آدرس حافظه خاص در یک ثبات کپی می کند)
  • ذخیره (یک کلمه را از یک ثبات در یک آدرس حافظه خاص کپی می کند)

حافظه کامپیوتر چیزی نیست جز یک آرایه بزرگ که در آن شاخص ها آدرس آنها هستند. در RISC-V، همانطور که ما عمدتاً با کلمات (گروه های 32 بیتی یا 4 بایتی) کار می کنیم، آدرس یک کلمه با آدرس یکی از بایت های آن منطبق است، کلماتی که همسایه هستند با 4 آدرس از هم جدا می شوند.

رایانه ها به رایانه هایی تقسیم می شوند که از سمت چپ ترین آدرس بایت (“big-endian”) و رایانه هایی که از سمت راست ترین آدرس بایت استفاده می کنند (“little-endian”) تقسیم می شوند. اندیانس. RISC-V از “liitle-endian” استفاده می کند، یعنی آدرس یک کلمه معادل آدرس سمت راست ترین بایت آن است.

نمایش دستورالعمل ها در رایانه

دستورالعمل های ISA در سخت افزار از طریق یک سری سیگنال های الکترونیکی ولتاژ پایین و بالا نگهداری می شوند، این سیگنال ها را می توان به صورت اعدادی مانند 0 و 1 یعنی بیت ها نشان داد.

هر جزء از یک دستورالعمل را می توان به عنوان یک عدد جداگانه در نظر گرفت، گروه بندی این اعداد در کنار هم نمایش دستورالعمل را نشان می دهد. ما این روش گروه بندی بیت ها را “فرمت دستورالعمل” می نامیم.

یک دستور جمع RISC-V را به عنوان مثال در نظر بگیرید:

add x9, x20, x21

Representação decimal:
0  21  20  0  9  51

Cada segmento é chamado de "field"
Os segmentos 1, 4 e 6 (contendo os números 0, 0 e 51) coletivamente dizem para 
o computador RISC-V que essa é uma instrução de soma.
O segmento 2 diz qual é o ultimo registrador da operação de soma (um dos "somandos")
O segmento 3 diz o outro registrador envolvido na soma
O segmento 5 contém o registrador que vai receber o resultado da operação

Representação binária:
|  0000000  |  10101  |  10100  |  000  |  01001  |  0110011  |
   7 bits     5 bits    5 bits   3 bits   5 bits     7 bits 
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

برای تشخیص نمایش عددی از زبان اسمبلی، آن را می نامیم زبان ماشین، دنباله ای از دستورالعمل ها نامیده می شود کد ماشین.

به پایان رساندن

با کاوش در نحوه نمایش دستورالعمل های ساده، مانند عملیات حسابی و انتقال داده ها، به صورت دودویی و اجرا شده توسط سخت افزار، می توانیم پیچیدگی و ظرافت سیستم های محاسباتی را درک کنیم. این درک نه تنها مهارت های ما را به عنوان برنامه نویس بهبود می بخشد، بلکه به ما این امکان را می دهد که کد خود را بهینه تر و کارآمدتر اشکال زدایی کنیم.

تکامل زبان‌های برنامه‌نویسی، از اسمبلی تا زبان‌های سطح بالا، نشان‌دهنده تلاش دائمی جامعه فناوری برای سهولت دسترسی بیشتر و شهودی‌تر کردن تعامل با رایانه‌ها است. با این حال، اساس همه این تکامل در ISA باقی می ماند، که همچنان پایه ای است که ما برنامه های خود را بر اساس آن ایجاد می کنیم.

با وجود همه اینها، برای تسلط عمیق بر این مفاهیم احساس فشار نکنید. ما برنامه نویسان مستقیماً با زبان های برنامه نویسی کار می کنیم که برای انتزاع این پیچیدگی و کمک به ما در بهره وری بیشتر ایجاد شده اند. من چندین برنامه نویس بزرگ را می شناسم که به این مفاهیم تسلط ندارند و در حرفه خود بسیار خوب عمل می کنند. عمیق‌تر شدن در ISA انتخابی است که می‌تواند درک و مهارت‌های فنی شما را تقویت کند، اما برای یک برنامه‌نویس عالی شرط لازم نیست.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا