Chapter 4: Data Movement Instructions (Instruksi Pemindahan Data)
Chapter 4
Data Movement Instructions
-
Memindahkan data antar register, memori, dan port I/O.
-
Mengelola stack.
-
Mengakses alamat efektif.
-
Menangani string data (urutan byte/word).
-
Menyediakan instruksi khusus untuk kebutuhan tertentu seperti pertukaran data atau ekspansi tanda (sign extension).
4.1 MOV Revisited
Instruksi MOV adalah instruksi paling dasar yang digunakan untuk memindahkan data dari satu lokasi ke lokasi lain. Instruksi ini bekerja dengan menyalin isi operand sumber ke operand tujuan, tanpa mengubah isi operand sumber. Operand sumber bisa berupa register, memori, atau immediate (konstanta), sedangkan operand tujuan bisa berupa register atau memori. Namun, aturan pentingnya adalah tidak boleh langsung memindahkan data dari memori ke memori; salah satu operand harus berupa register. Instruksi MOV adalah instruksi yang berfungsi untuk menyalin data dari operand sumber (source) ke operand tujuan (destination). Penting dicatat bahwa MOV tidak menghapus atau memindahkan data dari sumber, melainkan menyalinnya.
0 berarti operasi 8-bit (byte) dan nilai 1 berarti operasi 16-bit (word). Dengan kombinasi ketiga bagian ini, prosesor dapat mengenali jenis instruksi, arah perpindahan data, serta ukuran data yang terlibat dalam operasi.Tabel di atas menjelaskan fungsi dari field MOD pada mode instruksi 16-bit dalam arsitektur x86. Field MOD ini merupakan bagian dari byte opcode yang menentukan cara alamat memori dihitung atau apakah operand adalah register. Berikut penjelasan untuk setiap nilai MOD:
-
00: Tidak ada displacement (offset) tambahan, alamat langsung menggunakan register/memori tanpa penambahan nilai offset.
-
01: Displacement 8-bit yang diperluas tanda (sign-extended), artinya ada offset kecil yang bisa positif atau negatif ditambahkan ke alamat dasar.
-
10: Displacement 16-bit yang diperluas tanda, offset yang lebih besar ditambahkan ke alamat dasar.
-
11: Operand adalah register, bukan alamat memori, sehingga tidak ada penghitungan alamat atau displacement.
Tabel ini menunjukkan kode 3-bit yang digunakan untuk memilih register dalam instruksi x86 saat MOD = 11 (operand adalah register). Berdasarkan nilai W, register yang dipilih bisa berukuran 8-bit (byte), 16-bit (word), atau 32-bit (doubleword). Misalnya, kode
000 merepresentasikan register AL (8-bit), AX (16-bit), atau EAX (32-bit), sedangkan kode 001 merepresentasikan CL, CX, atau ECX, dan seterusnya. Tabel ini membantu CPU menentukan register mana yang digunakan sesuai ukuran data dalam instruksi.MOV, bit D = 1 berarti data dipindahkan ke register yang ditentukan oleh field REG, dan bit W = 1 menandakan operasi word (16-bit). Byte kedua berisi field MOD-REG-R/M, di mana MOD = 11 berarti operand berada pada register, bukan memori, REG = 101 menunjukkan register tujuan BP, dan R/M = 100 menunjukkan register sumber SP. Dengan demikian, instruksi biner 10001011 1100100 (atau 8BEC dalam heksadesimal) diterjemahkan menjadi perintah assembly MOV BP, SP.Aturan dasar instruksi MOV:
-
Operand tujuan bisa berupa register atau memori.
-
Operand sumber bisa berupa register, memori, atau immediate (konstanta).
-
Tidak boleh memori ke memori langsung (harus lewat register).
-
Ukuran operand harus sama (byte ↔ byte, word ↔ word, dll).
-
Dalam mode 64-bit, instruksi ini bisa memindahkan data hingga ukuran quadword (64 bit).
Instruksi MOV adalah instruksi yang paling sering digunakan dalam assembly, karena hampir semua program membutuhkan pemindahan data dari satu lokasi ke lokasi lain sebelum dilakukan perhitungan atau pengolahan. Instruksi MOV mendukung pemindahan data dalam berbagai ukuran, mulai dari byte, word, doubleword, hingga quadword pada prosesor modern. Pada mode 64-bit, MOV diperluas untuk menangani register 64-bit penuh sehingga memungkinkan pengolahan data dalam kapasitas yang lebih besar. Dalam implementasinya, MOV memiliki berbagai kode mesin (opcode) tergantung kombinasi operand yang digunakan. Karena itu, instruksi ini sangat penting dan hampir selalu muncul dalam setiap program assembly.
4.2 PUSH / POP
Instruksi PUSH dan POP digunakan untuk bekerja dengan stack, yaitu struktur data yang bersifat Last In First Out (LIFO). Instruksi PUSH berfungsi untuk menyimpan data sementara ke dalam stack. Ketika PUSH dijalankan, pointer stack (SP/ESP/RSP) berkurang, lalu operand yang dipilih disimpan ke alamat stack. Sebaliknya, instruksi POP mengambil data dari stack dan menaruhnya ke operand tujuan, lalu pointer stack bertambah. Kedua instruksi ini penting dalam pemrograman, terutama untuk menyimpan sementara isi register sebelum digunakan, mengembalikan isi register setelah prosedur, serta mengelola alamat kembali saat pemanggilan subrutin. Selain itu, terdapat varian seperti PUSHF dan POPF yang digunakan untuk menyimpan serta mengembalikan isi register flag. Namun, agar dapat digunakan, stack harus diinisialisasi terlebih dahulu dengan mengatur register SS (stack segment) dan SP (stack pointer). Oleh karena itu, instruksi ini menjadi tulang punggung manajemen fungsi, prosedur, dan interupsi dalam pemrograman assembly. Instruksi PUSH dan POP digunakan untuk bekerja dengan stack (tumpukan), yaitu area memori khusus yang bersifat LIFO (Last In, First Out). Artinya, data yang terakhir dimasukkan ke stack akan menjadi data pertama yang diambil kembali.
6AB3h) disalin ke stack, dengan byte rendah B3h disimpan pada alamat lebih rendah (037FEh) dan byte tinggi 6Ah pada alamat berikutnya (037FFh), sesuai mekanisme little-endian. Setelah penyimpanan, pointer stack (ESP) otomatis berkurang sebesar 2 untuk menunjukkan posisi teratas stack yang baru, yaitu 037FEh. Register SS (Stack Segment) bernilai 3000h kemudian digabungkan dengan offset ESP (07FEh) menghasilkan alamat fisik 037FEh, yang sesuai dengan lokasi penyimpanan data. Dengan demikian, gambar ini menggambarkan bagaimana instruksi PUSH menyimpan data dari register ke stack dan mengupdate ESP.menunjukkan urutan penyimpanan register 16-bit pada stack setelah instruksi PUSHA (Push All) dijalankan dalam arsitektur x86 (mode 16-bit). Instruksi PUSHA digunakan untuk menyimpan isi dari delapan register general-purpose (AX, CX, DX, BX, SP, BP, SI, dan DI) ke dalam stack. Urutan penyimpanan dimulai dari register AX di bagian atas hingga DI di bagian bawah stack.
Tabel 4–8 yang menjelaskan berbagai bentuk instruksi PUSH pada arsitektur prosesor Intel. Instruksi PUSH digunakan untuk menyimpan (mendorong) data ke dalam stack, dan dapat digunakan pada berbagai jenis operand.
-
PUSH reg16 atau PUSH reg32 → mendorong isi register 16-bit (contoh BX) atau 32-bit (contoh EDX) ke stack.
-
PUSH mem16, mem32, mem64 → mendorong isi memori ke stack, bisa berupa pointer 16-bit, 32-bit, atau 64-bit (contoh
PUSH WORD PTR [BX]). -
PUSH seg → mendorong isi register segmen, misalnya DS.
-
PUSH imm8, imm16, imm32 → mendorong nilai immediate (konstanta) ke stack, baik 8-bit (contoh
'R'), 16-bit (1000H), maupun 32-bit (20). -
PUSHA / PUSHAD → menyimpan seluruh register umum sekaligus, PUSHA untuk 16-bit register, PUSHAD untuk 32-bit register.
-
PUSHF / PUSHFD → menyimpan isi flag register, PUSHF untuk 16-bit flags, PUSHFD untuk 32-bit EFLAGS.
-
Menyimpan data dari register, memori, immediate, atau segment register ke stack.
-
Pada prosesor 8086–80286, selalu menyimpan 2 byte (word).
-
Pada 80386 dan di atasnya, bisa menyimpan 2 byte (word) atau 4 byte (doubleword).
-
Pada mode 64-bit, PUSH menggunakan 8 byte (quadword).
-
Setelah data disimpan, Stack Pointer (SP/ESP/RSP) berkurang sesuai ukuran data.
Mengambil data dari stack ke register, memori, atau segment register (kecuali CS).
-
Ukuran data yang diambil sama seperti saat PUSH.
-
Setelah data diambil, SP/ESP/RSP bertambah sesuai ukuran data.
cara kerja PUSH:
SP dikurangi (misalnya
SP = SP - 2pada mode 16-bit).-
Data disalin ke alamat
[SS:SP].
-
Data dibaca dari
[SS:SP]. -
SP ditambah (misalnya
SP = SP + 2pada mode 16-bit).
Gambar tersebut menunjukkan proses push nilai dari register EBX (392Fh) ke stack dalam arsitektur x86. Stack tumbuh ke bawah, sehingga ESP berkurang dari 01008h ke 01006h. Nilai
392Fh disimpan dalam format little-endian, yaitu 2F di alamat 01006h dan 39 di 01007h. Alamat fisik stack dihitung dari SS:ESP, di mana SS = 0000h, sehingga alamat fisiknya tetap 01006h. Gambar ini menunjukkan cara kerja stack dan segmentasi memori secara ringkas.4.3 Load Effective Address (LEA)
Instruksi LEA (Load Effective Address) digunakan untuk menghitung alamat efektif suatu operand memori, kemudian menyimpannya ke dalam sebuah register. Berbeda dengan MOV yang mengambil isi dari alamat memori, LEA hanya mengambil alamat itu sendiri. Instruksi ini sangat berguna ketika programmer ingin menggunakan alamat sebagai data, misalnya dalam operasi pointer, penghitungan offset, atau manipulasi array. “Load-effective address” adalah keluarga instruksi yang memuat alamat efektif (offset) ke register tanpa membaca/menulis isi memori tersebut. Anggotanya:
-
LEA: memuat offset yang dihitung dari suatu operand bertipe memori ke register tujuan (16-/32-bit).
-
LDS/LES (8086+): memuat offset ke sebuah register dan memuat DS/ES dari memori (mengambil far pointer).
-
LFS/LGS/LSS (80386+): mirip LDS/LES, tetapi untuk FS/GS/SS dan mendukung register 32-bit.
Pada mode 64-bit Pentium 4, LDS/LES tidak valid karena model memori datar tidak memakai segmentasi klasik.
LEA memuat offset dari operand memori ke register tanpa mengakses memori tersebut. Misal, LEA AX, NUMB akan menaruh alamat (offset) label NUMB ke AX, bukan isi memori di NUMB.
Perbandingan LEA vs MOV (memori):
-
LEA BX, [DI]→ menyalin offset yang ada di DI ke BX. -
MOV BX, [DI]→ membaca isi memori pada alamat DS:DI ke BX.
Untuk operand sederhana (hanya label), MOV reg, OFFSET label menghasilkan hal yang sama dengan LEA reg, label, namun lebih efisien karena nilai offset dihitung oleh assembler, bukan CPU. Contoh: MOV BX, OFFSET LIST ≡ LEA BX, LIST, dan di 80486, LEA BX, LIST butuh ±2 siklus, sementara MOV BX, OFFSET LIST hanya ±1 siklus (karena assemble-time immediate). Keduanya berukuran 3 byte untuk kasus ini.
Selain LEA, terdapat instruksi lain seperti LDS, LES, LFS, LGS, dan LSS, yang memungkinkan pemuatan data pointer dari memori ke dalam register general-purpose sekaligus mengisi register segmen yang sesuai. Dengan demikian, instruksi-instruksi ini sangat membantu dalam penanganan struktur data kompleks atau ketika data tersebar di berbagai segmen memori. Kelima instruksi ini mengambil pasangan (offset, segment) dari memori lalu:
-
Memuat offset ke register tujuan (16-/32-bit),
-
Memuat segment ke salah satu DS/ES/FS/GS/SS sesuai mnemonik.
Data di memori tersimpan sebagai offset dahulu, lalu segment (urutan offset→segment). Versi 32-bit memuat offset 32-bit + segment 16-bit (total 48 bit).
4.4 String Data Transfers
Instruksi pemindahan string digunakan untuk memindahkan data dalam bentuk urutan byte atau word di memori. Instruksi string adalah instruksi khusus untuk memproses blok data (string/array) secara otomatis. Ada lima instruksi utama: LODS, STOS, MOVS, INS, OUTS. Masing-masing bisa bekerja pada ukuran byte/word/doubleword (dan di mode 64-bit juga quadword). Instruksi string biasa dipakai untuk: menyalin blok memori, mengisi blok memori, membaca/menulis blok dari/ke I/O device, dan memproses buffer secara cepat. Instruksi ini memanfaatkan register SI (Source Index) untuk menunjuk data sumber dan DI (Destination Index) untuk menunjuk tujuan. Arah perpindahan data ditentukan oleh Direction Flag (DF): jika DF=0 maka indeks bertambah (transfer maju, kiri ke kanan), sedangkan jika DF=1 maka indeks berkurang (transfer mundur, kanan ke kiri). Instruksi yang termasuk kategori ini adalah: LODS (memuat data dari [SI] ke AL/AX), STOS (menyimpan isi AL/AX ke [DI]), MOVS (menyalin data dari [SI] ke [DI]), INS (membaca data dari port ke memori di [DI]), dan OUTS (mengirim data dari memori di [SI] ke port). Instruksi string biasanya digunakan bersama dengan prefix REP, REPE, atau REPNE untuk melakukan operasi berulang secara otomatis dalam jumlah tertentu atau sampai kondisi tertentu terpenuhi. Dengan instruksi ini, pemrosesan array dan string menjadi jauh lebih efisien.
Direction Flag (DF) — arah auto-update indeks
-
Bit D (direction flag) di EFLAGS menentukan apakah register indeks akan bertambah (DF=0) atau berkurang (DF=1) selama eksekusi instruksi string.
-
Untuk mengatur:
CLD→ DF = 0 (auto-increment),STD→ DF = 1 (auto-decrement). -
Perubahan indeks bergantung pada ukuran transfer: +1/−1 untuk byte, +2/−2 untuk word, +4/−4 untuk doubleword, +8/−8 untuk quadword di mode 64-bit.
DI / SI (dan EDI / ESI / RDI / RSI) & segmen
-
SI (source index) menunjuk sumber di DS (data segment) secara default. Segment override dapat mengubah segment sumber.
-
DI (destination index) menunjuk tujuan di ES (extra segment) — DI selalu menggunakan ES untuk instruksi string; destination segment tidak bisa diubah kecuali dengan trik tertentu (pop/push DS→ES). Tujuan ini memungkinkan MOVS memindahkan sampai 64K dari satu segmen ke segmen lain.
-
Di 32-bit: gunakan ESI / EDI. Di 64-bit: RSI / RDI dan RCX digunakan untuk count ketika memakai REP.
LODS — load from memory into accumulator
Fungsi: memuat data dari memori (DS:SI) ke accumulator:
-
LODSB→ AL ← byte [DS:SI] -
LODSW→ AX ← word [DS:SI] -
LODSD→ EAX ← dword [DS:SI] (80386+) -
LODSQ→ RAX ← qword [RSI] (64-bit)
Setelah load, SI ditambah atau dikurangkan sesuai ukuran (1/2/4/8) sesuai DF. LODS jarang dipakai dengan REP (tidak logis untuk ulang memuat ke AL/EAX).
STOS (store accumulator to memory)
Fungsi: menyimpan accumulator ke ES:DI:
-
STOSB→ ES:[DI] ← AL -
STOSW→ ES:[DI] ← AX -
STOSD→ ES:[DI] ← EAX
Setelah store, DI berubah ±1/2/4 sesuai ukuran dan DF. STOS sering dipakai untuk mengisi buffer (mis. clear memory).
MOVS — memory → memory (satu-satunya mem→mem)
Fungsi: satu-satunya instruksi yang secara langsung memindahkan memori → memori:
-
MOVSB→ ES:[DI] ← DS:[SI]; SI ±=1; DI ±=1 -
MOVSW→ ES:[DI] ← DS:[SI]; SI ±=2; DI ±=2 -
MOVSD→ ES:[DI] ← DS:[SI]; SI ±=4; DI ±=4 (80386+) -
MOVSQ→ ES:[RDI] ← [RSI] (64-bit)
INS / OUTS — I/O string transfer
-
INS: membaca dari I/O port (alamat di DX) ke memori ES:[DI]. Tersedia INSB/INSW/INSD. Setelah transfer DI ±1/2/4. (Tidak ada di 8086/8088).
-
OUTS: mengirim dari memori DS:[SI] ke I/O port DX. OUTSB/OUTSW/OUTSD tersedia, DI/ SI bertambah sesuai ukuran. (OUTS tidak ada di 8086/8088).
REP prefix & register counter
-
REPmelingkupi string instruction (kecuali LODS tidak logis dipakai). REP membuat instruksi string diulang sebanyak nilai CX/ECX/RCX (16/32/64-bit mode). Setelah tiap iterasi CX decrement sampai nol; ketika CX=0, eksekusi lanjut. Di 64-bit RCX dipakai.
4.5 Miscellaneous Data Transfer Instructions
Selain MOV dan instruksi string, terdapat pula instruksi lain dengan fungsi khusus. Instruksi XCHG digunakan untuk menukar isi dua operand, misalnya XCHG AX, BX akan menukar isi kedua register. Instruksi LAHF dan SAHF digunakan untuk memindahkan sebagian bit flag ke dalam register AH atau sebaliknya, sehingga bermanfaat dalam operasi kondisi. Instruksi XLAT digunakan untuk translasi data berdasarkan tabel lookup; AL berisi indeks, dan data dari tabel diambil berdasarkan indeks itu. Instruksi IN dan OUT digunakan untuk komunikasi langsung dengan perangkat I/O, misalnya membaca data dari port atau mengirimkan data ke port. Instruksi MOVSX dan MOVZX digunakan untuk memindahkan data dengan menyesuaikan ukurannya: MOVSX memperluas data dengan memperhitungkan tanda (sign extension), sedangkan MOVZX memperluas dengan menambahkan nol (zero extension). Instruksi BSWAP membalik urutan byte dalam register 32-bit atau 64-bit, sedangkan CMOVcc (conditional move) memungkinkan pemindahan data hanya jika kondisi tertentu terpenuhi (misalnya lebih besar, sama, atau nol). Instruksi-instruksi ini menyediakan fleksibilitas tambahan untuk berbagai kebutuhan pemrograman.
1) XCHG — Exchange (pertukaran isi)
Fungsi: bertukar (exchange) isi dua operand (register ↔ register atau register ↔ memori).
Bentuk umum: XCHG r, r / XCHG r, mem / XCHG mem, r. (Tidak memperbolehkan segment↔segment atau mem↔mem langsung.)
Ciri penting & batasan
-
Ukuran: byte / word / doubleword (dan 64-bit pada mode 64-bit).
-
Kasus istimewa:
XCHG AX, reg16(atauXCHG EAX, reg32) mempunyai encoding paling pendek — untuk 16-bitXCHG AX,reghanya 1 byte (opcode 90h + reg), sehingga sering dipakai karena efisien. XCHG dengan memori memerlukan opcode tambahan (lebih panjang).
-
Efek pada flag: XCHG tidak mengubah flag (umumnya dipakai untuk swap tanpa mempengaruhi status aritmetika). (prinsip umum arsitektur; buku menekankan efisiensi XCHG AX).
2) LAHF dan SAHF — Load/Store AH ⇄ Flags
Fungsi singkat: memindahkan byte bagian kanan (low 8 bit) dari flag register ke AH (LAHF) atau sebaliknya AH → flags (SAHF). Instruksi ini berasal dari kompatibilitas dengan CPU lama (8085) sehingga jarang dipakai hari ini.
Ciri & catatan
-
Keduanya legacy; jarang digunakan di kode modern.
-
LAHFmenaruh bit-bit flag (SF/ZF/AF/CF/… tergantung arsitektur) ke AH sehingga program dapat memeriksa flag lewat register.SAHFmenulis AH kembali ke flag. -
Berguna pada interaksi dengan coprocessor: mis.
FSTSW AX→SAHFuntuk memindahkan status coprocessor ke flag CPU. Tidak valid di 64-bit mode (legacy saja).
3) XLAT — Table translate (lookup tabel)
Deskripsi: XLAT melakukan lookup tabel: ia menjumlahkan BX + (uint8)AL untuk membentuk alamat di DS, lalu menaruh byte dari alamat itu ke AL. Dengan kata lain AL ← DS[(BX) + AL]. Ini memudahkan konversi cepat (contoh: BCD→seven-segment, BCD→ASCII, dll.).
Ciri & batasan
-
Hanya bekerja dengan AL (8-bit) sebagai indeks, dan BX sebagai base.
-
Hanya mengakses DS:BX+AL sebagai sumber. (hanya sumber yang memakai DS; BX harus diatur sebagai base).
-
Sederhana, efisien untuk tabel kecil yang terletak di DS.
4) IN / OUT — I/O port transfers
Fungsi: IN membaca data dari port I/O ke AL/AX/EAX; OUT menulis AL/AX/EAX ke port I/O. Ada dua bentuk pengalamatan port: immediate (8-bit port fixed) atau variable via DX (port number ada di DX). Instruksi ini adalah jembatan ke perangkat eksternal (keyboard controller, sound card, dll.).
Ciri & batasan
-
Ukuran transfer: byte (AL), word (AX), dword (EAX pada 32-bit).
-
IN/OUTtidak menyentuh memori — cuma CPU ↔ I/O device. -
INS/OUTSadalah varian string (bisaREPuntuk banyak transfer), namunINS/OUTStak tersedia pada 8086/8088 lama; tersedia pada 80386+. -
Perangkat harus siap; penggunaan
REP INSBatauREP OUTSBmengasumsikan device bisa menerima/menyediakan data—jika tidak, software harus cek status device sebelumREP.
5) BSWAP — Byte swap (endianness utility)
Fungsi: menukar urutan byte dalam register 32-bit (EAX etc.). Pada register 32-bit: byte0↔byte3, byte1↔byte2. (Dalam 64-bit mode, BSWAP dapat membalik 8 byte pada register 64-bit jika encoding mendukung REX; buku menyebut implementasi 64-bit membalik 8 byte).
6) MOVSX / MOVZX — Move with sign / zero extend
Fungsi: memindahkan sumber yang lebih kecil (byte/word) ke register lebih besar sambil memperluas nilainya:
-
MOVSX = sign-extend (isi tanda dipropagasi ke bit tinggi), cocok untuk bilangan bertanda.
-
MOVZX = zero-extend (isi bits tinggi diisi nol), cocok untuk bilangan tak bertanda.
Ciri & batasan
-
Tersedia sejak 80386 ke atas (instruksi 32-bit).
-
Bentuk:
MOVSX reg32, r/m8atauMOVSX reg32, r/m16dsb.;MOVZXserupa. -
Tidak mengubah flags.
Fungsi: memindahkan sumber → register tujuan hanya jika kondisi tertentu terpenuhi (didasarkan pada flags). cc adalah kondisi (Z, NZ, C, NC, G, L, GE, LE, S, NS, O, NO, P, NP, dsb.). Tersedia pada Pentium Pro (fam .686) dan Core2 dan seterusnya.
Ciri & batasan
-
Hanya memindahkan ke register tujuan (16/32-bit pada arsitektur yang dijelaskan) — destination harus register, source dapat register atau memori. Buku menyatakan destination dibatasi ke register 16/32 bit.
CMOV tidak mengubah flags.
-
Kegunaan utama: menghindari cabang (branchless code) untuk mengurangi branch misprediction dan biaya cabang di CPU modern.
4.6 Segment Override Prefix
Secara default, CPU menggunakan register segmen tertentu untuk mengakses memori, seperti DS untuk data, SS untuk stack, dan CS untuk kode. Namun, ada kalanya programmer perlu mengakses data dari segmen lain. Dalam kasus ini, digunakan segment override prefix untuk memaksa CPU menggunakan register segmen yang berbeda dari default. Misalnya, sebuah instruksi dapat dipaksa untuk menggunakan ES, FS, atau GS meskipun secara default ia menggunakan DS. Hal ini sangat berguna dalam pemrograman yang melibatkan banyak segmen memori, seperti sistem operasi atau aplikasi yang mengatur data dalam berbagai blok memori terpisah. Dengan demikian, segment override prefix memberikan fleksibilitas tambahan dalam pengelolaan memori.
4.7 Assembler Detail
Bagian ini membahas detail implementasi pemrograman assembler terkait instruksi pemindahan data. Salah satunya adalah penggunaan directives, yaitu perintah untuk assembler (bukan untuk CPU), seperti .DATA, .CODE, DB, dan DW yang digunakan untuk mendefinisikan data dan mengatur struktur program. Bagian ini juga menjelaskan tentang memory organization, yaitu bagaimana data disusun dalam segmen memori, baik berupa variabel, array, maupun string. Selain itu, disajikan pula contoh program sederhana yang menunjukkan bagaimana instruksi pemindahan data digunakan dalam praktik, mulai dari pemindahan nilai, pengolahan string, hingga pemanggilan prosedur dengan stack. Dengan memahami bagian ini, programmer dapat menulis program assembly yang lebih terstruktur dan efisien.
Komentar
Posting Komentar