آموزش صفر تا صد اسمبلی با 12 درس رایگان (فیلم+PDF)

رتبه: 5 ار 4 رای SSSSS
اسمبلی

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

۱-مفاهیم و نکات اولیه (یادگیری این توضیحات، نصف راه هست)

Assembly یا زبان اسمبلی یک زبان برنامه‌نویسی سطح پایین است که به دستورهای واقعی پردازنده بسیار نزدیک است. در زبان‌هایی مانند پایتون یا سی شارپ می‌نویسیم:

result = a + b

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

مسیر مناسب یادگیری برای یک مبتدی:

Binary و Hex → CPU → Register → Memory → Instruction → Stack → Compare/Jump → Loop → Function → Calling Convention → Debugging

اگر این زنجیره را خوب بفهمید، تا حد زیادی با منطق اسمبلی آشنا شده‌اید.

زبان اسمبلی دقیقاً چیست؟

پردازنده مستقیماً زبان اسمبلی را نمی‌فهمد. CPU در نهایت مجموعه‌ای از صفر و یک‌ها یا Machine Code را اجرا می‌کند. مثلاً یک دستور اسمبلی ممکن است چنین باشد:

mov eax, 5

Assembler این دستور را به Machine Code متناظر تبدیل می‌کند. پس سه مفهوم را از هم جدا کنید:

  • Assembly Language زبانی که برنامه‌نویس می‌نویسد.
  • Assembler برنامه‌ای که Assembly را به Machine Code تبدیل می‌کند.
  • Machine Code دستورهای باینری که CPU واقعاً اجرا می‌کند.

ابزارهایی مانند NASM و MASM نمونه‌هایی از Assembler هستند.

اسمبلی یک زبان واحد نیست

این نکته بسیار مهم است. Assembler وابسته به معماری پردازنده است. مثلاً:

  • x86
  • x86-64
  • ARM
  • RISC-V

هر معماری Registerها و Instructionهای مخصوص خودش را دارد. حتی برای x86 نیز Syntaxهای متفاوتی مانند Intel Syntax و AT&T Syntax وجود دارند.

برای یک مبتدی بهتر است ابتدا فقط یک معماری و Syntax را انتخاب کند. یک انتخاب مناسب x86-64 + Intel Syntax است.

CPU را بشناسید

CPU یا پردازنده دستورهای برنامه را اجرا می‌کند. به‌صورت بسیار ساده:

دستور را دریافت می‌کند → Decode می‌کند → اجرا می‌کند → سراغ دستور بعدی می‌رود

پردازنده بخش‌هایی مانند:

  • Registers
  • ALU
  • Control Unit
  • Cache

دارد. برای برنامه‌نویس اسمبلی، Registerها اهمیت بسیار زیادی دارند.

Register چیست؟

Register حافظه بسیار کوچک و بسیار سریعی داخل CPU است. پردازنده معمولاً عملیات اصلی را روی Registerها انجام می‌دهد. در معماری x86-64 با Registerهایی مانند این‌ها مواجه می‌شوید:

RAX
RBX
RCX
RDX
RSI
RDI
RSP
RBP
R8
R9
...
R15

مثلاً:

mov rax, 10
mov rbx, 20
add rax, rbx

ابتدا:

RAX = 10

و:

RBX = 20

سپس بعد از add:

RAX = 30

می‌شود. در اسمبلی باید بدانید اطلاعات در کدام Register قرار دارد.
2

اندازه رجیسترها

در x86-64 یک Register را می‌توان با اندازه‌های مختلف مشاهده کرد. مثلاً خانواده RAX:

RAX   64 bit
EAX   32 bit
AX    16 bit
AL     8 bit

بنابراین:

mov rax, 100

با:

mov eax, 100

کاملاً یکسان نیست. یکی از مهم‌ترین مهارت‌های اسمبلی شناخت اندازه داده‌هاست:

  • Byte = 8 bits
  • Word = 16 bits
  • Double Word = 32 bits
  • Quad Word = 64 bits

Binary را در حد کاربردی یاد بگیرید

Assembly ارتباط نزدیکی با نمایش دودویی دارد. مثلاً:

Decimal 10
Binary  1010

لازم نیست تبدیل اعداد بسیار بزرگ را ذهنی انجام دهید، اما باید مفهوم Bit را بفهمید. هر Bit فقط می‌تواند:

0

یا:

1

باشد. Bitها در اسمبلی برای:

  • Flagها
  • ماسک‌ها
  • شیفت
  • عملیات منطقی
  • کنترل سخت‌افزار

اهمیت زیادی دارند.

Hexadecimal چرا مهم است؟

برنامه‌نویسان سطح پایین زیاد از مبنای 16 یا Hexadecimal استفاده می‌کنند. مثلاً:

Decimal: 255
Hex:     FF

اعداد Hex معمولاً با چیزی مانند:

0xFF

نمایش داده می‌شوند. Hex برای نمایش:

  • آدرس حافظه
  • Machine Code
  • Bit Mask
  • مقادیر Register

بسیار مناسب‌تر از Binary طولانی است. پس قبل از اسمبلی، تبدیل ساده بین Decimal، Binary و Hex را تمرین کنید.

دستور MOV

یکی از پرکاربردترین Instructionها MOV  است. مثلاً:

mov rax, 10

یعنی مقدار 10 را داخل RAX قرار بده. یا:

mov rbx, rax

یعنی مقدار RAX را در RBX کپی کن.

نکته مهم: mov معمولاً منبع را حذف نمی‌کند. یعنی بعد از:

mov rbx, rax

هر دو Register می‌توانند همان مقدار را داشته باشند.

عملیات ریاضی

چند دستور ساده:

add rax, rbx
sub rax, rbx
inc rax
dec rax

ADD جمع.

SUB تفریق.

INC یک واحد افزایش.

DEC یک واحد کاهش.

مثلاً:

mov rax, 20
sub rax, 5

نتیجه:

RAX = 15

ضرب و تقسیم کمی پیچیده‌تر هستند و بسته به معماری و اندازه Operand می‌توانند از Registerهای مشخصی استفاده کنند.

برای شروع ابتدا MOV، ADD و SUB را کاملاً یاد بگیرید.

Operand چیست؟

در دستورadd rax, rbx

rax و rbx را Operand می‌گوییم.

Instruction همان add است. در Intel Syntax معمولاً شکل کلی دستور چنین است:

Instruction Destination, Source

مثلاً:

mov rax, 20

یعنی 20 را در مقصد یعنی RAX قرار بده.

حافظه RAM و آدرس

تمام داده‌ها داخل Register جا نمی‌شوند. بخش بزرگی از اطلاعات در RAM قرار دارد. هر قسمت حافظه دارای یک Address یا آدرس است. مثلاً فرض کنید داده‌ای در آدرس:

0x1000

قرار داشته باشد. پردازنده می‌تواند با استفاده از آدرس به آن دسترسی پیدا کند. در اسمبلی تفاوت میان خود مقدار و آدرس مقدار بسیار مهم است. این مفهوم بعداً در Pointerهای زبان C نیز اهمیت زیادی دارد.

Dereference چیست؟

فرض کنید Register دارای یک Address باشد. ممکن است:

RAX = 0x1000

باشد. این یعنی RAX خودش شاید عدد موردنظر ما را نگه نمی‌دارد؛ بلکه آدرس محل قرارگیری عدد را نگه می‌دارد. وقتی می‌خواهیم مقدار موجود در آن آدرس را بخوانیم، در Intel Syntax معمولاً از:

mov rbx, [rax]

استفاده می‌کنیم. براکت:

[ ]

یعنی به حافظه‌ای که این آدرس نشان می‌دهد مراجعه کن. این یکی از مهم‌ترین مفاهیم سطح پایین است.

Stack چیست؟

Stack یا پشته بخش بسیار مهمی از حافظه است. رفتار آن معمولاً به روش Last In, First Out است. یعنی آخرین چیزی که وارد شده، اولین چیزی است که خارج می‌شود. مانند قرار دادن بشقاب‌ها روی یکدیگر. اگر:

A
B
C

را به ترتیب روی Stack قرار دهیم، ابتدا C خارج می‌شود. در اسمبلی با دستورهایی مانند:

push rax
pop rax

مواجه می‌شوید. PUSH مقدار را روی Stack قرار می‌دهد. POP آخرین مقدار را از Stack برمی‌دارد.

RSP چیست؟

در x86-64 Register:

RSP

یا Stack Pointer، محل فعلی بالای Stack را نشان می‌دهد. به همین دلیل نباید بدون دلیل مقدار RSP را تغییر دهید.

اشتباه در Stack Pointer می‌تواند باعث خراب شدن اجرای Functionها یا Crash برنامه شود. در سطح مقدماتی فقط این نکته را خوب بفهمید:

Stack برای نگهداری موقت اطلاعات و مدیریت Function Callها بسیار مهم است.

Flag Register چیست؟

پردازنده علاوه بر Registerهای معمول، وضعیت برخی عملیات را در Flagها نگهداری می‌کند. Flagهای معروف Zero Flag آیا نتیجه صفر شده است؟

Carry Flag آیا Carry رخ داده است؟

Sign Flag نتیجه منفی است؟

Overflow Flag آیا Overflow عدد علامت‌دار رخ داده است؟

این Flagها مخصوصاً برای شرط‌ها اهمیت دارند.

CMP چیست؟

در زبان سطح بالا ممکن است بنویسیم:

if a == b

در اسمبلی معمولاً از CMP استفاده می‌شود. مثلاً:

cmp rax, rbx

این دستور نتیجه را معمولاً در RAX ذخیره نمی‌کند؛ بلکه Flagهای پردازنده را براساس مقایسه تغییر می‌دهد. بعد از آن از Jump استفاده می‌کنیم.

Jump چیست؟

اجرای CPU معمولاً دستوربه‌دستور جلو می‌رود. Jump مسیر اجرا را تغییر می‌دهد. مثلاً:

jmp target

یعنی مستقیماً به Label به نام target برو. Jumpهای شرطی نیز داریم:

JE   Jump if Equal
JNE  Jump if Not Equal
JG   Jump if Greater
JL   Jump if Less

مثلاً:

cmp rax, rbx
je equal

اگر دو مقدار برابر باشند، برنامه به Label به نام equal می‌رود.

if در اسمبلی چگونه ساخته می‌شود؟

مثلاً منطق:

if x == 10
    result = 1
else
    result = 0

می‌تواند مفهومی شبیه این داشته باشد:

cmp rax, 10
je is_equal

mov rbx, 0
jmp done

is_equal:
    mov rbx, 1

done:

می‌بینید که ساختار if در اصل از Compare + Conditional Jump ساخته می‌شود. این موضوع کمک می‌کند بهتر بفهمید زبان‌های سطح بالا پشت صحنه چگونه اجرا می‌شوند.

Loop چگونه ساخته می‌شود؟

فرض کنید می‌خواهیم پنج بار کاری را انجام دهیم.

mov rcx, 5

loop_start:
    ; دستورات

    dec rcx
    cmp rcx, 0
    jne loop_start

منطق آن:

  1. RCX برابر 5 است.
  2. دستورات اجرا می‌شوند.
  3. RCX یک واحد کم می‌شود.
  4. اگر هنوز صفر نشده، به ابتدای حلقه برگرد.

بنابراین حلقه نیز اساساً با Label + Compare + Jump ساخته می‌شود.

Function در اسمبلی

Function یا Procedure مجموعه‌ای از دستورات قابل استفاده مجدد است. در x86 با دستورهایی مانند:

call my_function

و:

ret

مواجه می‌شوید.CALL به Function می‌رود و اطلاعات لازم برای بازگشت را ذخیره می‌کند. RET به محل قبلی برنامه برمی‌گردد. اما برای درک واقعی Functionها باید مفهوم Calling Convention را نیز یاد بگیرید.
1

Calling Convention چیست؟

وقتی Function صدا زده می‌شود باید مشخص باشد:

  • ورودی‌ها کجا قرار بگیرند؟
  • نتیجه کجا برگردد؟
  • چه Registerهایی باید حفظ شوند؟
  • Stack چگونه مدیریت شود؟

این قوانین Calling Convention نام دارند. مثلاً در سیستم‌های مختلف x86-64 ممکن است آرگومان‌های Function در Registerهای متفاوتی قرار بگیرند. به همین دلیل Assembly نوشته‌شده برای Windows و Linux ممکن است در بخش Function Callها متفاوت باشد. این موضوع را بعد از اصول اولیه جدی‌تر یاد بگیرید.

Syscall چیست؟

برنامه اسمبلی نمی‌تواند هر کاری را مستقیماً انجام دهد. مثلاً برای:

  • نوشتن روی صفحه
  • خواندن فایل
  • ایجاد Process

معمولاً باید از خدمات سیستم‌عامل استفاده کند. ارتباط سطح پایین با Kernel می‌تواند از طریق System Call انجام شود. به همین دلیل برنامه اسمبلی ساده‌ای که متن Hello World چاپ می‌کند، معمولاً از نمونه مشابه در Python بسیار طولانی‌تر است.

بخش Data و Code

برنامه‌های اسمبلی معمولاً قسمت‌هایی برای داده و کد دارند. مثلاً در NASM ممکن است ساختاری شبیه این ببینید:

section .data
    message db "Hello", 0

section .text
    global _start

_start:
    ; code

.data

برای داده‌های مقداردهی‌شده.

.text

برای دستورهای اجرایی برنامه. ممکن است بخش‌های دیگری نیز وجود داشته باشند. در شروع فقط مفهوم جدایی داده و دستور را درک کنید.

Little Endian چیست؟

موضوع مهم دیگری که در سطح پایین می‌بینید Endianness است. پردازنده‌های x86 از Little Endian استفاده می‌کنند. یعنی هنگام ذخیره اعداد چندبایتی در حافظه، کم‌ارزش‌ترین Byte در آدرس پایین‌تر قرار می‌گیرد. مثلاً اگر عددی مانند:

0x12345678

در حافظه قرار گیرد، ترتیب Byteها ممکن است به شکل:

78 56 34 12

دیده شود. این موضوع هنگام Debugging حافظه بسیار مهم است.

Signed و Unsigned

همان Bitها می‌توانند به روش‌های مختلف تفسیر شوند. مثلاً یک مقدار 8 بیتی ممکن است Unsigned  از 0 تا 255 باشد. یا Signed تقریباً از -128 تا 127. در اعداد Signed معمولاً از نمایش Two's Complement استفاده می‌شود.

برای همین دستورهای مقایسه Signed و Unsigned در اسمبلی می‌توانند متفاوت باشند. این موضوع در ابتدا کمی دشوار است، اما بسیار مهم است.

Bitwise Operations

Assembly ارتباط زیادی با عملیات Bitwise دارد. دستورهایی مانند:

AND
OR
XOR
NOT
SHL
SHR

برای کار مستقیم با Bitها استفاده می‌شوند. مثلاً:

xor rax, rax

یک روش معروف برای صفر کردن RAX است. عملیات Bitwise در:

  • سیستم‌های Embedded
  • Driverها
  • رمزنگاری
  • Flagها
  • بهینه‌سازی
  • پردازش سخت‌افزار

زیاد دیده می‌شوند.

Debugger مهم‌تر از حفظ دستورهاست

یادگیری Assembly فقط با خواندن کد بسیار دشوار است. باید برنامه را Step by Step اجرا کنید. Debugger به شما اجازه می‌دهد:

  • Registerها را مشاهده کنید
  • Memory را ببینید
  • Breakpoint بگذارید
  • Instructionها را تک‌تک اجرا کنید
  • Stack را بررسی کنید

ابزارهایی مانند GDB و Debuggerهای محیط‌های توسعه برای این کار استفاده می‌شوند. بهترین روش یادگیری اسمبلی این است که بعد از هر Instruction ببینید دقیقاً چه چیزی در CPU تغییر کرده است.

Assembly و C ارتباط بسیار خوبی دارند

اگر هدف شما یادگیری عمیق Assembly است، زبان C همراه بسیار خوبی است. مثلاً برنامه ساده C:

int add(int a, int b)
{
    return a + b;
}

را Compile کنید و Assembly تولیدشده را بررسی کنید. این کار نشان می‌دهد:

  • Variable چگونه مدیریت می‌شود
  • Function Call چگونه انجام می‌شود
  • Loop چگونه تبدیل می‌شود
  • if چگونه به Jump تبدیل می‌شود

برای همین ترکیب C + Assembly یکی از بهترین روش‌های یادگیری معماری کامپیوتر است.

۲-موارد آموزش داده شده در این پکیج رایگان

  • اسمبلی چیست؟
  • کاربردها و مبانی اصلی اسمبلی
  • دستورهای SUB و MUL و DIV
  • دستورهای AND ,OR ,XOR
  • دستورهای SHL و SHR, ROR, ROL, RCR, RCL
  • دستور CMP
  • پیاده سازی IF و SWITCH
  • پیاده سازی FOR و WHILE
  • و …

۳- نمونه آموزش

 

۴-دانلود آموزش رایگان

 دانلود فیلم های این پکیج

دانلود جزوه PDF

 حجم: ۹۸۰ مگابایت

 سطح: از صفر تا صد

 نسخه آموزش داده شده: مناسب برای همه نسخه های برنامه

download time

به دنبال یادگیری سریع تر، حرفه ای تر، کامل تر و با کیفیت فول اچ دی هستید؟

اسمبلی امروز بعد از ورود هوش مصنوعی کجا استفاده می‌شود؟

امروزه بیشتر نرم‌افزارهای عادی کاملاً با Assembly نوشته نمی‌شوند. Assembly بیشتر در بخش‌هایی مانند:

  • سیستم‌عامل
  • Kernel
  • Embedded Systems
  • Firmware
  • Bootloader
  • Driver
  • Reverse Engineering
  • Cybersecurity
  • Compiler
  • High-performance Code
  • Debugging سطح پایین

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

اشتباهات رایج مبتدیان

از این موارد دوری کنید:

  • حفظ Instructionها بدون فهم CPU
  • شروع با برنامه‌های بزرگ
  • بی‌توجهی به اندازه داده
  • اشتباه گرفتن Address با Value
  • خراب کردن Stack Pointer
  • بی‌توجهی به Calling Convention
  • یادگیری هم‌زمان ARM و x86
  • شروع مستقیم Reverse Engineering بدون مبانی
  • کپی کردن کد اسمبلی بدون Step کردن آن
  • نخواندن Registerها در Debugger

در Assembly باید دائماً از خود بپرسید الان هر Register چه مقداری دارد؟ Stack چه وضعیتی دارد؟ Instruction بعدی کدام است؟

پروژه‌های مناسب برای شروع

پروژه اول  

دو عدد را در Register قرار دهید و جمع، تفریق و ضرب را تمرین کنید.
پروژه دوم دو عدد را مقایسه کنید و بزرگ‌تر را انتخاب کنید. مفاهیم: CMP + Jump
پروژه سوم اعداد 1 تا 10 را با Loop پردازش کنید. مفاهیم: Counter + Label + Jump
پروژه چهارم  یک Function ساده برای جمع دو عدد بنویسید. مفاهیم: CALL + RET + Register + Stack
پروژه پنجم یک برنامه کوچک C بنویسید و Assembly تولیدشده توسط Compiler را تحلیل کنید. 

این تمرین یکی از بهترین راه‌ها برای رفتن از سطح مبتدی به متوسط است.

مسیر پیشنهادی یادگیری اسمبلی

بهتر است با این ترتیب جلو بروید:

مرحله ۱  Binary، Hex و Bit.

مرحله ۲  CPU، Memory و Register.

مرحله ۳  x86-64 و Intel Syntax.

مرحله ۴  MOV، ADD، SUB و Operandها.

مرحله ۵  Memory Addressing و Pointer.

مرحله ۶  CMP، Flag و Jump.

مرحله ۷  Loop.

مرحله ۸  Stack، PUSH و POP.

مرحله ۹  CALL، RET و Function.

مرحله ۱۰  Calling Convention.

مرحله ۱۱  System Calls.

مرحله ۱۲  Debugger و Disassembly.

بعد از این مرحله می‌توانید وارد مباحث پیشرفته‌تر مانند:

Reverse Engineering، SIMD، SSE/AVX، Operating Systems، Exploit Development، Embedded Programming و Compiler Design

شوید.

جمع‌بندی

برای یادگیری Assembly از صفر، هدف اصلی نباید حفظ صدها Instruction باشد. ابتدا باید بفهمید پردازنده چگونه برنامه را اجرا می‌کند. هسته اصلی اسمبلی را می‌توان چنین خلاصه کرد:

CPU → Register → Memory → Instruction → Flag → Jump → Stack → Function → System Call

اگر بتوانید برنامه‌ای کوچک را Instruction به Instruction دنبال کنید و توضیح دهید هر دستور چه تغییری در Register، Memory یا Flagها ایجاد کرده است، بخش بزرگی از پایه Assembly را یاد گرفته‌اید.

مهم‌ترین تفاوت Assembly با زبان‌های سطح بالا این است که بسیاری از جزئیاتی که Python، C# یا Java از شما پنهان می‌کنند، اینجا مستقیماً دیده می‌شوند.

به همین دلیل Assembly ممکن است در ابتدا سخت‌تر باشد، اما بعد از یادگیری آن مفاهیمی مانند Pointer، Stack، Function Call، Memory، Compiler و سیستم‌عامل برایتان بسیار ملموس‌تر می‌شوند.

برای شروع عملی، ترکیب x86-64 + Intel Syntax + NASM + Debugger + کمی زبان C مسیر بسیار مناسبی است.

profile name
سریع آسان

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

مطالب پیشنهادی برای شما

محصولات مرتبط

مشاهده همه

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

1 2 3 4 5

4 نظر درباره «آموزش صفر تا صد اسمبلی با 12 درس رایگان (فیلم+PDF)»

  • محمد
    محمد آیا این دیدگاه مفید بود ؟

    سلام - زبان آموزش هم pdf و هم ویدئو ها فارسیه؟

    پاسخ
  • علی
    علی آیا این دیدگاه مفید بود ؟

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

    پاسخ
  • ناشناس
    ناشناس آیا این دیدگاه مفید بود ؟

    با سلام
    وقدردانی از فایلهای رایگان اسمبلی و سایر موارد
    جزوات ،
    اموزش های کلیدی خوبی هستند . در سایر کشورها هزینه این مسایل زیاد است
    با تشکر فراوان . پ.م ۱۹ ابان ۱۴۰۴

    پاسخ
  • ناشناس
    ناشناس آیا این دیدگاه مفید بود ؟

    باسلام
    میخواستم بدونم این دوره اسمبلی همین ۹ قسمت هستش؟

    پاسخ
مشاهده همه نظرات
سبد خرید
سبد خرید شما خالی است
× جهت نصب روی دکمه زیر در گوشی کلیک نمائید
آی او اس
سپس در مرحله بعد برروی دکمه "Add To Home Screen" کلیک نمائید