Setiap instruksi artimatika dan logika berpengaruh pada flag register di prosesor. Dalam register 16bit, tiap bit flag disebut flag dan dapat bernilai 0 atau 1.
- CF/ Carry Flag – bernilai 1 jika ada unsigned overflow, kalo gak ada overflow, maka diset 0
- ZF/ Zero Flag – diset 1 jika hasilnya 0, hasil selain flag bernilai 0
- SG/ Sign Flag – diset 1 jika hasilnya negatif, saat hasilnya positif diset ke 0, flag ini mengambil dari nilai MSB (most significant byte)
- OF/ Overflow Flag – diset 1 kalo ada signed yg overflow
- PF/ Parity Flag – diset 1 kalo ada angka genap dari satu bit dalam hasilnya, bernilai 0 jika ada angka ganjil
- AF/ Auxillary Flag – bernilai 1 jika ada unsigned yg overflow untuk low nibble(4bit)
- IF/ Interrupt Enable Flag – diset 1 kalo CPU mendapatkan interupsi dari piranti eksternal
- DF/ Direction Flag – flag ini digunakan oleh beberapa instruksi untuk memproses rantai data, jika diset 0, proses diselesaikan kedepan, jika flagnya 1 proses diselesaikan kebelakang
3 kelompok instruksi:
kelompok pertama: ADD, SUB, CMP, AND, TEST, OR, XOR
Tipe operan yg didukung:
REG, memory
memory, REG
REG,REG
memory, immediate
REG, immediate
reg itu registry, memory itu variablenya atau addressnya, kalo immediate berarti nilainya dimasukin secara langsung
setelah operasi diantara operan, hasilnya selalu disimpan pada operan pertama. instruksi CMP dan TEST hanya berakibat pada flag register dan tidak menyimpan hhasilnya (instruksi ini digunakan untuk membuat keputusan selama eksekusi program).
instruksi – instruksi yg berpengaruh hanya pada flag:
CF,ZF,SF,OF,PF,AF
- ADD – Menambahkan operan kedua ke operan pertama
- SUB – mengurangi operan pertama dengan operan kedua
- CMP – Membandingkan kedua operan, dan hasilnya mempengaruhi register flag
- AND – logika AND antara semua bit dari kedua operan
- TEST – sama dengan AND cuma perubahan hanya terjadi pada register flag
- OR – Logika OR antara seua bit pada dua operan
- XOR – Logika XOR antara semua bit dari dua operan
kelompok ke dua: MUL, IMUL, DIV, IDIV
Tipe operan yg mendukung:
REG
memory
instruksi MUL dan IMUL hanya mempengarugi flag CF dan OF
Jika hasilnya diatas ukuran operan, flag diset 1, jika tidak flag diset 0. Untuk flag yg dipengaruhi operasi DIV dan IDIV tidak didefinisikan.
- MUL – Perkalian unsigned
- jika operannya byte:
- AX= AL * operan
- Jika operannya word:
- (DX AX)= AX * Operan
- IMUL – Perkalian Signed
- DIV – Pembagian Unsigned
- IDIV – pembagian signed
kelompok ketiga INC, DEC, NOT, NEG
TIPE operan yg mendukung
REG
memory
- instruksi INC, DEC, hanya mempengaruhi flag: ZF, CF, OF, PF, AF
- instruksi NOT tidak mempengaruhi flag apapun
- NOT = Kebalikan untuk setiap bit
- Instruksi NEG hanya mempengaruhi flag CF,ZF,SF,OF,PF,AF
- NEG: membuat operan menjadi negatif (bilangan komplemen 2). Sebenarnya dicadangkan untuk setiap bit operand dan ditambahkan 1, contoh 5 menjadi -5, dan 2 menjadi -2
CONTOH PROGRAM ARITMATIKA DAN LOGIKA
Compile dan Analisislah tiap perubahan pada flag dan registernya! Lihat apakah proses perhitungannya sesuai dengan yang tampil pada register!
org 100h ;Soal: operasikan ;AX = (2-512)^2/(10-8)(64x16) ;tanpa menggunakan variable ;Pengoperasian (10-8) mov AX,0Ah mov BX,08h sub AX,BX mov DI,AX ;simpan sementara hasilnya ke DI ;Pengoperasian (64x16) mov AX,10h mov BX,40h mul BX ;AX = AX x BX ;Pengoperasian (10-8)(64x16) mov BX,DI mul BX ;kalikan mov DI,AX ;simpan sementara hasilnya ke DI ;Pengoperasian (2-512)kuadrat mov AX,02h mov BX,200h sub AX,BX ;kurangi 2 - 512 mov BX,AX ;simpan ke BX imul BX ;kalikan ;Pengoperasian Hasil AX mov BX,DI ;masukkan kembali nilai BX dari DI idiv BX ;bagi hasil AX dengan BX ret
0 Responses
Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.