Sistem Tertanam - Mode Pengalamatan

Sebuah addressing modemengacu pada bagaimana Anda menangani lokasi memori tertentu. Ada lima cara berbeda atau lima mode pengalamatan untuk menjalankan instruksi ini yaitu sebagai berikut -

  • Mode pengalamatan langsung
  • Mode pengalamatan langsung
  • Daftarkan mode pengalamatan langsung
  • Daftarkan mode pengalamatan tidak langsung
  • Mode pengalamatan yang diindeks

Mode Pengalamatan Segera

Mari kita mulai dengan sebuah contoh.

MOV A, #6AH

Secara umum, kita bisa menulis,

MOV A, #data

Ini disebut sebagai immediate karena data 8-bit segera ditransfer ke akumulator (operan tujuan).

Ilustrasi berikut menjelaskan instruksi di atas dan pelaksanaannya. Opcode 74H disimpan di alamat 0202. Data 6AH disimpan di alamat 0203 di memori program. Setelah membaca opcode 74H, data pada alamat memori program selanjutnya ditransfer ke akumulator A (E0H adalah alamat akumulator). Karena instruksinya adalah 2-byte dan dijalankan dalam satu siklus, penghitung program akan bertambah 2 dan akan menunjuk ke 0204 dari memori program.

Note- Simbol '#' sebelum 6AH menunjukkan bahwa operannya adalah data (8 bit). Jika tidak ada '#', bilangan heksadesimal akan dianggap sebagai alamat.

Mode Pengalamatan Langsung

Ini adalah cara lain untuk memanggil operan. Di sini, alamat data (sumber data) diberikan sebagai operan. Mari kita ambil contoh.

MOV A, 04H

Bank register # 0 (register ke-4) beralamat 04H. Ketika instruksi MOV dijalankan, data yang disimpan dalam register 04H dipindahkan ke akumulator. Karena register 04H menyimpan data 1FH, 1FH dipindahkan ke akumulator.

Note- Kami belum menggunakan '#' dalam mode pengalamatan langsung, tidak seperti mode langsung. Jika kita menggunakan '#', nilai data 04H akan ditransfer ke akumulator, bukan 1FH.

Sekarang, perhatikan ilustrasi berikut. Ini menunjukkan bagaimana instruksi dijalankan.

Seperti yang ditunjukkan pada ilustrasi di atas, ini adalah instruksi 2-byte yang membutuhkan 1 siklus untuk diselesaikan. PC akan bertambah 2 dan akan menunjuk ke 0204. Opcode untuk instruksi MOV A, alamatnya E5H. Ketika instruksi pada 0202 dijalankan (E5H), akumulator menjadi aktif dan siap menerima data. Kemudian PC menuju ke alamat berikutnya sebagai 0203 dan mencari alamat lokasi 04H dimana data sumber (untuk ditransfer ke akumulator) berada. Pada 04H, kontrol menemukan data 1F dan mentransfernya ke akumulator dan karenanya eksekusi selesai.

Daftarkan Mode Pengalamatan Langsung

Dalam mode pengalamatan ini, kami menggunakan nama register secara langsung (sebagai operan sumber). Mari kita coba memahami dengan bantuan sebuah contoh.

MOV A, R4

Pada suatu waktu, register dapat mengambil nilai dari R0 hingga R7. Ada 32 register seperti itu. Untuk menggunakan 32 register dengan hanya 8 variabel ke register alamat, bank register digunakan. Ada 4 bank register yang diberi nama dari 0 sampai 3. Setiap bank terdiri dari 8 register dengan nama dari R0 sampai R7.

Pada suatu waktu, satu bank register dapat dipilih. Pemilihan bank register dimungkinkan melalui aSpecial Function Register (SFR) bernama Processor Status Word(PSW). PSW adalah SFR 8-bit di mana setiap bit dapat diprogram sesuai kebutuhan. Bit ditetapkan dari PSW.0 ke PSW.7. PSW.3 dan PSW.4 digunakan untuk memilih bank register.

Sekarang, perhatikan ilustrasi berikut untuk mendapatkan pemahaman yang jelas tentang cara kerjanya.

Opcode EC digunakan untuk MOV A, R4. Opcode disimpan di alamat 0202 dan ketika dijalankan, kontrol langsung menuju ke R4 dari bank register yang bersangkutan (yang dipilih di PSW). Jika bank register # 0 dipilih, maka data dari R4 bank register # 0 akan dipindahkan ke akumulator. Di sini 2F disimpan pada 04H. 04H mewakili alamat R4 bank register # 0.

Pergerakan Data (2F) ditandai dengan huruf tebal. 2F ditransfer ke akumulator dari lokasi memori data 0C H dan ditampilkan sebagai garis putus-putus. 0CH adalah lokasi alamat Register 4 (R4) bank register # 1. Instruksi di atas adalah 1 byte dan membutuhkan 1 siklus untuk eksekusi lengkap. Artinya, Anda dapat menghemat memori program dengan menggunakan mode pengalamatan langsung register.

Daftarkan Mode Pengalamatan Tidak Langsung

Dalam mode pengalamatan ini, alamat data disimpan di register sebagai operan.

MOV A, @R0

Di sini nilai di dalam R0 dianggap sebagai alamat, yang menyimpan data yang akan ditransfer ke akumulator. Example: Jika R0 bernilai 20H, dan data 2FH disimpan pada alamat 20H, maka nilai 2FH akan ditransfer ke akumulator setelah menjalankan instruksi ini. Lihat ilustrasi berikut.

Jadi opcode untuk MOV A, @R0adalah E6H. Dengan asumsi bahwa bank register # 0 dipilih, R0 dari bank register # 0 menyimpan data 20H. Kontrol program bergerak ke 20H di mana ia menempatkan data 2FH dan mentransfer 2FH ke akumulator. Ini adalah instruksi 1-byte dan penghitung program bertambah 1 dan bergerak ke 0203 dari memori program.

Note- Hanya R0 dan R1 yang diizinkan untuk membentuk instruksi pengalamatan tidak langsung register. Dengan kata lain, programmer dapat membuat instruksi menggunakan @ R0 atau @ R1. Semua bank register diperbolehkan.

Mode Pengalamatan Terindeks

Kami akan mengambil dua contoh untuk memahami konsep mode pengalamatan yang diindeks. Lihat instruksi berikut -

MOVC A, @A+DPTR

dan

MOVC A, @A+PC

dimana DPTR adalah penunjuk data dan PC adalah penghitung program (keduanya adalah register 16-bit). Perhatikan contoh pertama.

MOVC A, @A+DPTR

Operand sumber adalah @ A + DPTR. Ini berisi data sumber dari lokasi ini. Di sini kami menambahkan konten DPTR dengan konten akumulator saat ini. Penambahan ini akan memberikan alamat baru yaitu alamat sumber data. Data yang ditunjukkan oleh alamat ini kemudian ditransfer ke akumulator.

Opcode-nya adalah 93H. DPTR memiliki nilai 01FE, dimana 01 berada di DPH (lebih tinggi 8 bit) dan FE berada di DPL (lebih rendah 8 bit). Akumulator memiliki nilai 02H. Kemudian dilakukan penambahan 16-bit dan 01FE H + 02H menghasilkan 0200 H. Data di lokasi 0200H akan ditransfer ke akumulator. Nilai sebelumnya di dalam akumulator (02H) akan diganti dengan data baru dari 0200H. Data baru di akumulator disorot dalam ilustrasi.

Ini adalah instruksi 1-byte dengan 2 siklus yang diperlukan untuk eksekusi dan waktu eksekusi yang diperlukan untuk instruksi ini lebih tinggi dibandingkan dengan instruksi sebelumnya (yang semuanya masing-masing 1 siklus).

Contoh lainnya MOVC A, @A+PCbekerja dengan cara yang sama seperti contoh di atas. Alih-alih menambahkan DPTR dengan akumulator, di sini data di dalam penghitung program (PC) ditambahkan dengan akumulator untuk mendapatkan alamat target.