Bahasa Himpunan & Pengaturcaraan Sistem Aras Rendah x86 · Pelajaran

Mod Pengalamatan Memori

Terokai pelbagai cara mengakses lokasi memori menggunakan mod pengalamatan seperti terus, tak langsung, asas, indeks dan indeks berskala.

Pelajaran 2 daripada 411 langkah

Mod Pengalamatan Memori ialah pelajaran Bahasa Himpunan & Pengaturcaraan Sistem Aras Rendah x86 percuma di CoddyKit. Ini ialah pelajaran 2 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Bahasa Himpunan & Pengaturcaraan Sistem Aras Rendah x86, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Bahasa Himpunan & Pengaturcaraan Sistem Aras Rendah x86 merangkumi sejumlah 4 pelajaran.

Pelbagai Laluan Memori

Selamat datang! Hari ini, kita akan mempelajari cara CPU mencari data dalam memori. Hal ini penting untuk memahami cara program berfungsi pada aras rendah.

Mod pengalamatan memori ialah pelbagai cara CPU mengira alamat memori berkesan bagi satu operan.

  • Mod ini membolehkan capaian data yang fleksibel.
  • Mod ini penting untuk tatasusunan, struktur dan data dinamik.

Pengalamatan Terus: Lokasi Tetap

Pengalamatan terus ialah cara paling mudah untuk mengakses memori. Anda memberikan alamat tepat dan tetap bagi data yang dikehendaki.

Bayangkan anda pergi ke nombor rumah tertentu di sebuah jalan. Cara ini mudah, tetapi tidak begitu fleksibel jika anda perlu mengakses rumah yang berbeza secara dinamik.

Cuba jalankan contoh ini:

section .data
  ; Define a word (2-byte) variable at a specific label
  my_data dw 0x1234

section .text
  global _start

_start:
  ; Move the content of 'my_data' into the AX register
  ; The CPU directly accesses the address associated with 'my_data'
  mov ax, [my_data]

  ; Exit program (Linux specific syscall)
  mov eax, 1    ; syscall number for exit
  xor ebx, ebx  ; exit code 0
  int 0x80      ; call kernel

Tidak Terus melalui Daftar: Penuding Fleksibel

Pengalamatan tidak terus melalui daftar menggunakan daftar tujuan umum (seperti EBX, ESI atau EDI) untuk menyimpan alamat memori.

Daripada menggunakan alamat tetap, daftar itu bertindak sebagai 'penuding' kepada data. Cara ini jauh lebih fleksibel kerana anda boleh mengubah nilai daftar untuk menunjuk kepada lokasi memori yang berbeza.

Berikut ialah contohnya:

section .data
  ; Define some data in memory
  value1 dw 0xAABB
  value2 dw 0xCCDD

section .text
  global _start

_start:
  ; Load the address of 'value1' into EBX
  mov ebx, value1
  ; Move the content pointed to by EBX into AX
  mov ax, [ebx] ; AX now holds 0xAABB

  ; Change EBX to point to 'value2'
  mov ebx, value2
  ; Move the content pointed to by EBX into DX
  mov dx, [ebx] ; DX now holds 0xCCDD

  ; Exit program
  mov eax, 1
  xor ebx, ebx
  int 0x80

Pengalamatan Asas: Capaian Berstruktur

Pengalamatan asas menggabungkan daftar asas (selalunya EBX atau EBP) dengan anjakan berangka tetap (ofset).

Kaedah ini amat berguna untuk mengakses medan dalam struktur data atau unsur tatasusunan apabila alamat asas struktur atau tatasusunan itu berada dalam daftar.

Contoh:

section .data
  ; A 'structure' with two word members
  my_struct:
    member1 dw 0x1111
    member2 dw 0x2222

section .text
  global _start

_start:
  ; Load the base address of 'my_struct' into EBX
  mov ebx, my_struct

  ; Access 'member1' (offset 0 from base)
  mov ax, [ebx + 0] ; AX now holds 0x1111

  ; Access 'member2' (offset 2 bytes from base, as words are 2 bytes)
  mov dx, [ebx + 2] ; DX now holds 0x2222

  ; Exit program
  mov eax, 1
  xor ebx, ebx
  int 0x80

Pengalamatan Indeks: Lelaran Tatasusunan

Pengalamatan indeks menggunakan daftar indeks (seperti ESI atau EDI) bersama anjakan.

Mod ini amat sesuai untuk mengulangi unsur tatasusunan, dengan anjakan sebagai alamat permulaan tatasusunan dan daftar indeks menyimpan ofset unsur semasa.

Perhatikan contoh ini:

section .data
  ; An array of words
  my_array dw 10h, 20h, 30h, 40h

section .text
  global _start

_start:
  ; Set ESI to 0 (first element offset)
  mov esi, 0
  ; Access first element: my_array[0]
  mov ax, [my_array + esi] ; AX = 10h

  ; Increment ESI to point to the next word (2 bytes)
  add esi, 2
  ; Access second element: my_array[1]
  mov bx, [my_array + esi] ; BX = 20h

  ; Exit program
  mov eax, 1
  xor ebx, ebx
  int 0x80

Asas-Indeks: Tatasusunan 2D dan Banyak Lagi

Pengalamatan asas-indeks menggabungkan daftar asas dan daftar indeks (dengan anjakan pilihan).

Kaedah ini berkuasa untuk mengakses unsur dalam tatasusunan dua dimensi atau tatasusunan struktur. Daftar asas mungkin menyimpan permulaan satu baris, manakala daftar indeks menyimpan ofset lajur.

Bentuknya ialah [base + index] atau [displacement + base + index].

section .data
  ; A 2x2 array of words (each row is 4 bytes: 2 words * 2 bytes/word)
  matrix dw 1, 2   ; Row 0
         dw 3, 4   ; Row 1

section .text
  global _start

_start:
  ; EBX holds the base address of the matrix
  mov ebx, matrix

  ; Access element [0][0]: (EBX + ESI)
  mov esi, 0 ; Index for column 0
  mov ax, [ebx + esi] ; AX = 1

  ; Access element [0][1]: (EBX + ESI)
  mov esi, 2 ; Index for column 1 (1 word * 2 bytes/word)
  mov bx, [ebx + esi] ; BX = 2

  ; Access element [1][0]: (EBX + displacement for row 1 + ESI)
  ; Row 1 starts 4 bytes after row 0
  mov esi, 0
  mov cx, [ebx + 4 + esi] ; CX = 3

  ; Exit program
  mov eax, 1
  xor ebx, ebx
  int 0x80

Indeks Berskala: Mesra Jenis Data

Pengalamatan indeks berskala ialah lanjutan pengalamatan asas-indeks yang membolehkan Anda mendarab daftar indeks dengan faktor skala (1, 2, 4 atau 8).

Kaedah ini amat berguna apabila bekerja dengan tatasusunan yang mempunyai saiz data berbeza (bait, WORD, DWORD, QWORD) kerana CPU mengira ofset yang betul secara automatik.

Format: [base + index*scale + displacement]

section .data
  ; An array of double words (4 bytes each)
  d_array dd 100h, 200h, 300h

section .text
  global _start

_start:
  ; EBX holds the base address of the array
  mov ebx, d_array

  ; Access d_array[0] (index 0, scale 4 for dword)
  mov esi, 0
  mov eax, [ebx + esi*4] ; EAX = 100h

  ; Access d_array[1] (index 1, scale 4 for dword)
  mov esi, 1
  mov ebx, [ebx + esi*4] ; EBX = 200h

  ; Access d_array[2] (index 2, scale 4 for dword)
  mov esi, 2
  mov ecx, [ebx + esi*4] ; ECX = 300h

  ; Exit program
  mov eax, 1
  xor ebx, ebx
  int 0x80

Pemalar: Anjakan

Anda telah melihat istilah 'anjakan' muncul dalam beberapa mod. Anjakan ialah nilai malar bertanda 8-bit, 16-bit atau 32-bit yang ditambah pada alamat yang dikira.

  • Ia menyediakan ofset tetap daripada asas atau indeks.
  • Ia sering digunakan untuk mengakses ahli tertentu dalam struktur atau melompat ke titik tertentu dalam tatasusunan.
  • Nilainya boleh positif atau negatif.

Ia bertindak seperti nombor rumah tetap yang dianjak daripada titik permulaan yang diketahui.

Memilih Mod Pengalamatan Anda

Mod manakah yang patut Anda gunakan?

  • Terus: Untuk lokasi memori tetap yang diketahui (contohnya, pemboleh ubah global).
  • Tidak Langsung Daftar: Untuk penuding dan akses memori dinamik.
  • Asas/Indeks: Untuk lelaran tatasusunan dan mengakses ahli struktur.
  • Indeks Berskala: Terbaik untuk tatasusunan dengan jenis data yang berlainan saiz, sambil membolehkan CPU mengendalikan penskalaan.

Memahami mod ini memberikan Anda kawalan yang berkuasa terhadap memori!

Cabaran Mod Pengalamatan

Uji pengetahuan Anda tentang mod pengalamatan memori!

Laluan Memori Dikuasai

Syabas! Anda telah meneroka mod pengalamatan memori x86 yang asas:

  • Terus: Alamat tetap.
  • Tidak Langsung Daftar: Daftar sebagai penuding.
  • Asas: Daftar asas + anjakan.
  • Indeks: Daftar indeks + anjakan.
  • Asas-Indeks: Asas + indeks + anjakan pilihan.
  • Indeks Berskala: Asas + indeks * skala + anjakan pilihan.

Mod ini ialah asas kepada cara atur cara Anda berinteraksi dengan data dalam memori. Teruskan berlatih!

Percuma untuk bermula

Pelajari Assembly dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
12
Pelajaran
48

Soalan Lazim

Adakah pelajaran “Mod Pengalamatan Memori” percuma?

Ya — teks penuh “Mod Pengalamatan Memori” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Bahasa Himpunan & Pengaturcaraan Sistem Aras Rendah x86, tingkat taraf kepada CoddyKit PRO. Kursus Bahasa Himpunan & Pengaturcaraan Sistem Aras Rendah x86 merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Mod Pengalamatan Memori”?

Terokai pelbagai cara mengakses lokasi memori menggunakan mod pengalamatan seperti terus, tak langsung, asas, indeks dan indeks berskala. Anda berlatih Bahasa Himpunan & Pengaturcaraan Sistem Aras Rendah x86 menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Bahasa Himpunan & Pengaturcaraan Sistem Aras Rendah x86?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Bahasa Himpunan & Pengaturcaraan Sistem Aras Rendah x86 di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 2 daripada 4.

Berapa lamakah pelajaran “Mod Pengalamatan Memori” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Bahasa Himpunan & Pengaturcaraan Sistem Aras Rendah x86 ini?

Ya. Setiap pelajaran Bahasa Himpunan & Pengaturcaraan Sistem Aras Rendah x86 menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Menyingkap Daftar x86
  2. Mod Pengalamatan Memori
  3. Perwakilan dan Jenis Data
  4. Daftar FLAGS dan Bit Status
← Kembali ke Bahasa Himpunan & Pengaturcaraan Sistem Aras Rendah x86