B. Mode dan Fotmat Pengalamatan
Kekuatan utama dari setiap komputer
terletak pada kemampuannya dalam mengakses memori. Mode pengalamatan dari CPU
menyediakan kemampuan ini. Mode pengalamatan mempunyai pengertian bagaimana
suatu instruksi akan mendpatkan data yang diperlukannya dalam eksekusi. Karena
ada beberap a macam mode pengalamatan
yang berbeda, suatu instruksi dapat mengakses operan dalam satu atau beberapa
cara yang berbeda. Setiap variasi mode pengalamatan dari suatu instruksi harus
memiliki kode operasi (op-code) yang unik, sehingga 62 instruksi dasar
mikrokontroler M68HC05 membutuhkan setidaknya 210 kode operasi dari
instruksi-instruksinya.
CPU
M68HC05 menggunakan enam mode pengalamatan. Mode pengalamatan ini adalah
inherent, immediate, extended, direct, indexed, dan relative. Dalam
mikrokontroler M68HC05 yang terkecil, semua variabel program dan register I/O
cukup dalam area $0000 sampai $00FF di memori sehingga mode pengalamatan yang
digunakan adalah direct addressing mode.
Informasi
yang disediakan dalam listing program menggunakan beberapa simbol untuk
menentukan tipe dari numerik yang digunakan. Simbol khusus ini adalah:
1.
Tanpa simbol
mengindikasikan numerik desimal. Angka ini akan diterjemahkan menjadi nilai
biner sebelum disimpan dalam memori dan digunakan oleh CPU.
2.
Simbol $ mengindikasikan
numerik heksadesimal, seperti $24 adalah 2416 dalam heksadesimal
yang bernilai sama dengan 36 desimal.
3.
Simbol @ mengindikasikan
numerik oktal, seperti @10 bernilai sama dengan 8 desimal.
4.
Simbol % mengindikasikan
numerik biner, seperti 0100 bernilai sama dengan 8 desimal.
5.
Simbol ‘ (apostrof)
mengindikasikan karakter ASCII tunggal.
6.
Simbol # mengindikasikan
operand langsung (immediate) dan angka ditemui langsung dalam lokasi
memori yang mengikuti kode operasi. Beberapa macam simbol dan ekspresi dapat
mengikuti simbol # ini.
Mode
pengalamatan yang dikenal oleh mikrokontroler keluarga 6805 ada beberapa macam
sebagaimana tercantum di bawah ini:
B.1 Inhernt
Mode Pengalamatan INHERENT
Dalam
mode pengalamatan inherent, semua informasi yang dibutuhkan untuk
operasi telah diketahui otomatis oleh CPU, dan tidak dibutuhkan operan
eksternal dari memori atau dari program. Operan yang digunakan hanyalah
register internal dari CPU atau data dalam stack. Karena itu
operasi ini hanyalah terdiri dari satu byte instruksi. Contoh:
0200
4C INCA ; increment akumulator
Pertama
CPU membaca kode operasi $4C yang menginstruksikan CPU untuk menambah harga
dari isi akumulator. Kemudian CPU akan menyimpan harga baru ke dalam akumulator
dan mengeset bitflag jika dibutuhkan. Tabel 5.2 menampilkan semua
instruksi M68HC05 yang dapat menggunakan mode pengalamatan inherent.
Instruksi-instruksi Mode Pengalamatan INHERENT
Instruksi
|
Mnemonic
|
Arithmetic Shift Left
Arithmetic Shift Right Clear Carry Bit Clear Interrupt Mask Bit |
ASLA, ASLX
ASRA, ASRX CLC CLI |
Clear
Complement (invert all bits) Decrement Increment |
CLRA, CLRX
COMA, COMX DECA, DECX INCA, INCX |
Logical Shift Left
Logical Shift Right Multiply Negate (two’s complement) |
LSLA, LSLX
LSRA, LSRX MUL NEGA, NEGX |
No Operation
Rotate Left thru Carry Rotate Right thru Carry Reset Stack Pointer |
NOP
ROLA, ROLX RORA, RORX RSP |
Return from Interrupt
Return from Subroutine Set Carry Bit Set Interrupt Mask Bit |
RTI
RTS SEC SEI |
Enable IRQ, STOP Oscillator
Software Interrupt Transfer Accumulator to Index Register Test for Negative Zero |
STOP
SWI TAX TSTA, TSTX |
Transfer Index Register to Accumulator
Wait for Interrupt |
TXA
WAIT |
B.2 Immediate
Dalam mode pengalamatan immediate,
operan terkandung di dalam byte yang langsung mengikuti kode operasi. Mode ini
digunakan saat suatu harga atau konstanta diketahui saat program dibuat dan
tidak akan dirubah selama eksekusi program. Operasi dengan mode ini membutuhkan
dua byte instruksi, satu untuk kode operasi dan satu lagi untuk data byte.
Contoh:
0200
A6 02 LDA #$02 ; Load konstanta ke akumulator
Pertama
CPU akan membaca kode operasi $A6 yang menginstruksikan CPU untuk me-load
akumulator dengan nilai immediate yang mengikuti kode operasi. Kemudian CPU
akan membaca dataimmediate $02 dari lokasi memori dengan alamat $0201 ke dalam
akumulator. Tabel 5.1 menampilkan semua instruksi keluarga M68HC05 ang dapat
menggunakan mode pengalamatan immediate ini.
Instruksi-instruksi Mode Pengalamatan
IMMEDIATE
Instruksi
|
Mnemonic
|
Add with Carry
Add (without carry) Logical AND Bit Test Memory with Accumulator |
ADC
ADD AND BIT |
Compare Accumulator with Memory
Compare Index Register with Memory Exclusive OR Memory with Accumulator Load Accumulator from Memory |
CMP
CPX EOR LDA |
Load Index Register from Memory
Inclusive OR Substract with Carry Substract (without borrow) |
LDX
ORA SBC SUB |
B.3 Direction
Mode pengalamatan direct mirip dengan mode
pengalamatan extended kecuali bahwa upper byte dari alamat operan selalu
dianggap $00. Karena itu, hanya lower-byte dari operan yang diperlukan untuk
dimasukkan dalam instruksi. Pengalamatan direct menyebabkan efisiensi alamat
dalam 256 byte pertama dalam memori. Area ini dinamakan dengan direct page dan
mengandung on-chip RAM dan register I/O. Pengalamatan direct ini efisien bagi
memori program dan waktu eksekusi. Dalam mode ini instruksi terdiri dari dua
byte, satu untuk kode operasi dan satu lagi untuk alamat operan. Contoh: 0200
B6 E0 LDA $E0
Pertama CPU akan membaca kode operasi $B6
yang menginstruksikan CPU untuk menggunakan mode pengalamatan direct. Kemudian
CPU membaca $E0 dari lokasi memori dengan alamat $0201. Harga $E0 ini
diterjemahkan sebagai low-order dari alamat dalam direct
page ($0000 sampai $00FF). Setelah itu CPU menyusun alamat lengkap
$00E0 dengan menganggap high-order byte alamat sebagai $00.
Alamat lengkap $00E0 ini kemudian diletakkan dalam bus alamat dan kemudian
proses pembacaan data pun dikerjakan. Tabel 5.4 menampilkan semua instrusi yang
bisa dikerjakan dengan mode pengalamatan direct ini.
C.
Instruksi-instruksi Mode
Pengalamatan DIRECT
Instruksi
|
Mnemonic
|
Add with Carry
Add (without carry) Logical AND Arithmetic Shift Left |
ADC
ADD AND ASL |
Arithmetic Shift Right
Clear Bit in Memory Bit Test Memory with Accumulator Branch if Bit n is Clear |
ASR
BCLR BIT BRCLR |
Branch if Bit n is Set
Set Bit in Memory Clear Compare Accumulator with Memory |
BRSET
BSET CLR CMP |
Complement (invert all bits)
Compare Index Register with Memory Decrement Exclusive OR Memory with Accumulator |
COM
CPX DEC EOR |
Increment
Jump Jump to Subroutine Load Accumulator from Memory |
INC
JMP JSR LDA |
Load Index Register from Memory
Logical Shift Left Logical Shift Right Negate (two’s complement) |
LDX
LSL LSR NEG |
Inclusive OR
Rotate Left thru Carry Rotate Right thru Carry Substract with Carry |
ORA
ROL ROR SBC |
Store Acuumulator in Memory
Strore Index Register in Memory Substract (without borrow) Test for Negative or Zero |
STA
STX SUB TST |
B.4 Extended
Dalam mode
pengalamatan extended, alamat dari operan terkandung dalam dua byte
yang mengikuti kode operasi. Pengalamatan extended ini dapat digunakan untuk
mengakses semua lokasi dalam memori mikrokontroler termasuk I/O, RAM, ROM, dan
EPROM. Karena itu operasi ini membutuhkan tiga byte, satu untuk kode operasi,
dan dua untuk alamat dari operan.
0200 C6 03 65 LDA $0365
Pertama CPU akan membaca kode
operasi C6 yang menginstruksikan akumulator untuk menggunakan mode pengalamatan
extended. Kemudian CPU akan membaca $03 dari lokasi memori $0201dan
diterjemahkan sebagai alamat high-order. Setelah itu CPU membaca
$65 dari lokasi $0202 dan diterjemahkan sebagai low-order dari
alamat. Terakhir, CPU membangun alamat lengkap $0365 dan meletakkannya dalam
bus alamat dan kemudian melakukan operasi read sehingga isi memori dengan
alamat $0365 akan tersedia dalam bus data. Tabel 5.3 di bawah ini akam
memperlihatkan semua instruksi yang dapat digunakan dalam mode pengalamatan
extended.
Instruksi-instruksi
Mode Pengalamatan EXTENDED
Instruksi
|
Mnemonic
|
Add with Carry
Add (without carry) Logical AND Bit Test Memory with Accumulator |
ADC
ADD AND BIT |
Compare Accumulator with Memory
Compare Index Register with Memory Exclusive OR Memory with Accumulator Jump |
CMP
CPX EOR JMP |
Jump to Subroutine
Load Accumulator from Memory Exclusive OR Memory with Accumulator Jump |
JSR
LDA LDX ORA |
Substract with Carry
Store Accumulator in Memory Store Index Register in Memory Substract (without borrow) |
SBC
STA STX SUB |
B.5 Indexed
Dalam mode
pengalamatan indexed, alamat efektif adalah variabel dan tergantung
pada dua faktor: 1) isi index register saat itu dan 2) nilai offset yang terkandung
dari byte yang mengikuti kode operasi. Terdapat tiga jenis pengalamatan indexed
yang didukung oleh CPU keluarga M68HC05, yaitu: no-offset, 8-bit offset, dan
16-bit offset. Dalam mode pengalamatan indexed-no offset,
alamat efektif dari operan terkandung dalam index register 8-bit. Karena itu,
mode pengalamatan ini dapat mengakses 256 lokasi memori (dari $0000 sampai
$00FF). Instruksi mode ini membutuhkan satu byte instruksi. Contoh: 0200 F6 LDA
0,X
Pertama CPU akan membaca
kode operasi $F6 yang menginstruksikan CPU untuk menggunakan mode
pengalamatan indexed-no offset. Kemudian CPU menyusun alamat
lengkap dengan menjumlahkan $0000 ke isi dari index register 8-bit (X). Alamat
ini kemudian diletakkan dalam bus alamat dan setelah itu dilakukan proses pembacaan
data. Tabel 5.5 menampilkan semua instruksi yang dapat menggunakan mode
pengalamatan ini.
INDEXED-NO
OFFSET dan INDEXED-8 BIT OFFSET
Instruksi
|
Mnemonic
|
Add with Carry
Add (without carry) Logical AND Arithmetic Shift Left |
ADC
ADD AND ASL |
Arithmetic Shift Right
Bit Test Memory with Accumulator Clear Compare Accumulator with Memory |
ASR
BIT CLR CMP |
Complement (invert all bits)
Compare Index Register with Memory Decrement Exclusive OR Memory with Accumulator |
COM
CPX DEC EOR |
Increment
Jump Jump to Subroutine Load Accumulator from Memory |
INC
JMP JSR LDA |
Load Index Register from Memory
Logical Shift Left Logical Shift Right Negate (two’s complement) |
LDX
LSL LSR NEG |
Inclusive OR
Rotate Left thru Carry Rotate Right thru Carry Substract with Carry |
ORA
ROL ROR SBC |
Store Acuumulator in Memory
Strore Index Register in Memory Substract (without borrow) Test for Negative or Zero |
STA
STX SUB TST |
Dalam
mode pengalamatan indexed-8 bit offset, alamat efektif
dicapai dengan menambahkan data byte yang mengikuti kode operasi dengan isi
dari index register. Harga byte offset yang disediakan dalam instruksi adalah
integer tak bertanda 8-bit. Karena itu operasi ini adalah dua byte instruksi di
mana offset terkandung dalam byte yang mengikuti kode operasi. Isi dari index
register tidak akan dirubah. Contoh: 0200 E6 05 LDA 5,X
Pertama
CPU akan membaca kode operasi $E6 yang menginstruksikan CPU menggunakan mode
pengalamatan indexed 8-bit offset. Kemudian CPU akan membaca
8-bit offset ($05) dari alamat $0201. CPU akan menyusun alamat lengkap dengan
menambahkan nilai offset $05 ke isi dari index register 8-bit (X). Setelah itu,
alamat diletakkan dalam bus alamat dan opersi pembacaan data ke akumulator
dikerjakan. Tabel 5.5 menunjukkan semua instruksi yang mampu menggunakan mode
pengalamatan ini. Dalam mode pengalamatan indexed-16 bit offset,
alamat efektif dari operan suatu instruksi adalah hasil penjumlahan antara isi
dari index register 8-bit dengan dua byte alamat yang mengikuti kode operasi.
Isi dari kode operasi tidak dirubah. Instruksi ini memakan tiga byte, satu
untuk kode operasi dan dua byte untuk offset 16-bit. Contoh: 0200 D6 03 77 LDA
$377,X
Pertama
CPU akan membaca kode operasi $D6 yang menginstruksikan CPU untuk menggunakan
mode pengalamatan indexed –16 bit offset. Kemudian CPU akan
membaca high order alamat ($03) dari alamat memori $0201 dan
membaca low order alamat ($77) dari alamat $0202. CPU akan
menyusun alamat lengkap dengan menambahkan isi dari index register 8-bit dengan
16-bit alamat yang baru saja dibaca. Alamat ini diletakkkan dalam bus alamat
dan kemudian operasi pembacaan data dilakukan.
Instruksi-instruksi Mode
Pengalamatan INDEXED-16 BIT OFFSET
Instruksi
|
Mnemonic
|
Add with Carry
Add (without carry) Logical AND Bit Test Memory with Accumulator |
ADC
ADD AND BIT |
Compare Accumulator with Memory
Compare Index Register with Memory Exclusive OR Memory with Accumulator Jump |
CMP
CPX EOR JMP |
Jump to Subroutine
Load Accumulator from Memory Exclusive OR Memory with Accumulator Jump |
JSR
LDA LDX ORA |
Substract with Carry
Store Accumulator in Memory Store Index Register in Memory Substract (without borrow) |
SBC
STA STX SUB |
Tidak ada komentar:
Posting Komentar