Mengenal Kode Aritmatika Dan Flag Microcomputer
Setiap arahan aritmatika dan budi kuat pada register status pada prosesor atau yang disebut dengan istilah flag.
Carry Flag (CF), flag ini bernilai 1 kalau ada unsigned overflow. Contoh ketika menambah byte 255 + 1, jadinya tidak di jangkauan. Saat tidak ada overflow flag ini bernilai 0.
Zero Flag (ZF), bernilai 1 kalau jadinya zero. Untuk hasil selain zero, bernilai 0.
Sign Flag (SF), bernilai 1 kalau jadinya negative. Saat jadinya positive bernilai 0. Sebenarnya flag ini mengambil nilai dari MSB (Most Significant Bit).
Overflow Flag (OF), bernilai 1 ketika ada signed overflow. Contohnya, kalau menambah byte 100 + 50, jadinya diluar nilai -128 dan 127.
Parity Flag (PF), bernilai 1 kalau ada angka genap dari satu bit dalam jadinya , dan di set ke 0 kalau ada angka ganjil. Jika jadinya berupa word hanya 8 low bit yang diperiksa.
Auxiliary Flag (AF), bernilai 1 kalau ada unsigned overflow untuk low nibble, 4 bit.
Interrupt Enable Flag (IF), kalau flag bernilai 1 CPU mendapat interrupt dari device eksternal.
Direction Flag (DF), flag ini dipakai oleh beberapa arahan untuk memproses rantai data, kalau flag bernilai 0, maka proses diselesaikan ke depan. Jika flag bernilai 1, maka proses diselesaikan ke belakang.
Ada 3 kelompok instruksi.
Kelompok pertama: ADD, SUB, CMP, AND, TEST, OR, XOR
Tipe operand yang mendukungnya register to memory, memory to register, register to register, immediate to register, dan immediate to memory.
Register: AX, BX, CX, DX, AH, AL, BL, BH, CH, CL, DH, DL, DI, SI, BP, SP.
Memory: [BX], [BX+SI+7], variable, dan lain sebagainya.
Immediate: 5, -24, 3Fh, 10001101b, dan lain sebagainya.
Setelah operasi antar operand, jadinya selalu disimpan di operand pertama. Instruksi CMP dan TEST berakibat hanya pada flag dan tidak menyimpan hasilnya, arahan tersebut dipakai utnuk menciptakan keputusan selama sanksi program. Instruksi-instruksi yang kuat hanya pada flag: CF, ZF, SF, OF, PF, AF.
Kelompok Kedua: MUL, IMUL, DIV, IDIV
Tipe operand yang mendukungnya memory to register.
Register: AX, BX, CX, DX, AH, AL, BL, BH, CH, CL, DH, DL, DI, SI, BP, SP.
Memory: [BX], [BX+SI+7], variable, dan lain sebagainya.
Instruksi MUL dan IMUL menghipnotis hanya flag CF dan OF
Jika jadinya diatas ukuran operand flag diubah menjadi bernilai 1, kalau tidak 0. Untuk flag DIV dan IDIV tidak didefinisikan.
MUL - perkalian unsigned, bilangan tidak bertanda minus.
Kelompok ketiga: INC, DEC, NOT, NEG
Tipe operand yang mendukung memory to register.
Register: AX, BX, CX, DX, AH, AL, BL, BH, CH, CL, DH, DL, DI, SI, BP, SP.
Memory: [BX], [BX+SI+7], variabel, dan lain sebagainya.
Instruksi NOT tidak menghipnotis flag apapun.
Instruksi INC, DEC menghipnotis flag ZF, SF, OF, PF, dan AF.
Instruksi NEG menghipnotis flag CF, ZF, SF, OF, PF, dan AF.
Carry Flag (CF), flag ini bernilai 1 kalau ada unsigned overflow. Contoh ketika menambah byte 255 + 1, jadinya tidak di jangkauan. Saat tidak ada overflow flag ini bernilai 0.
Zero Flag (ZF), bernilai 1 kalau jadinya zero. Untuk hasil selain zero, bernilai 0.
Sign Flag (SF), bernilai 1 kalau jadinya negative. Saat jadinya positive bernilai 0. Sebenarnya flag ini mengambil nilai dari MSB (Most Significant Bit).
Overflow Flag (OF), bernilai 1 ketika ada signed overflow. Contohnya, kalau menambah byte 100 + 50, jadinya diluar nilai -128 dan 127.
Parity Flag (PF), bernilai 1 kalau ada angka genap dari satu bit dalam jadinya , dan di set ke 0 kalau ada angka ganjil. Jika jadinya berupa word hanya 8 low bit yang diperiksa.
Auxiliary Flag (AF), bernilai 1 kalau ada unsigned overflow untuk low nibble, 4 bit.
Interrupt Enable Flag (IF), kalau flag bernilai 1 CPU mendapat interrupt dari device eksternal.
Direction Flag (DF), flag ini dipakai oleh beberapa arahan untuk memproses rantai data, kalau flag bernilai 0, maka proses diselesaikan ke depan. Jika flag bernilai 1, maka proses diselesaikan ke belakang.
Ada 3 kelompok instruksi.
Kelompok pertama: ADD, SUB, CMP, AND, TEST, OR, XOR
Tipe operand yang mendukungnya register to memory, memory to register, register to register, immediate to register, dan immediate to memory.
Register: AX, BX, CX, DX, AH, AL, BL, BH, CH, CL, DH, DL, DI, SI, BP, SP.
Memory: [BX], [BX+SI+7], variable, dan lain sebagainya.
Immediate: 5, -24, 3Fh, 10001101b, dan lain sebagainya.
Setelah operasi antar operand, jadinya selalu disimpan di operand pertama. Instruksi CMP dan TEST berakibat hanya pada flag dan tidak menyimpan hasilnya, arahan tersebut dipakai utnuk menciptakan keputusan selama sanksi program. Instruksi-instruksi yang kuat hanya pada flag: CF, ZF, SF, OF, PF, AF.
- ADD - menambah operand ke dua ke operand pertama
- SUB - mengurangi operand kedua dari operand yang pertama
- CMP - mengurangi operand kedua dari operand pertama hanya flag saja
- AND - logical AND antara semua bit dari dua operand
- TEST - sama menyerupai AND tapi hanya untuk flag saja
- OR - logical OR antara semua bit dari dua operand
- XOR - logical XOR (exclusive OR) antara semua bit dari dua operand
Kelompok Kedua: MUL, IMUL, DIV, IDIV
Tipe operand yang mendukungnya memory to register.
Register: AX, BX, CX, DX, AH, AL, BL, BH, CH, CL, DH, DL, DI, SI, BP, SP.
Memory: [BX], [BX+SI+7], variable, dan lain sebagainya.
Instruksi MUL dan IMUL menghipnotis hanya flag CF dan OF
Jika jadinya diatas ukuran operand flag diubah menjadi bernilai 1, kalau tidak 0. Untuk flag DIV dan IDIV tidak didefinisikan.
MUL - perkalian unsigned, bilangan tidak bertanda minus.
- Jika operand-nya byte: AX = AL * operand
- Jika operand-nya word: (DX AX) = AX * operand
- Jika operand-nya byte: AX = AL * operand
- Jika operand-nya word: (DX AX) = AX * operand
- Jika operand-nya byte: AL = AX / operand dan AH = remainder (modulus)
- Jika operand-nya word: AX = (DX AX) / operand dan DX = remainder (modulus)
- Jika operandnya byte: AL = AX/operand dan AH = remainder (modulus)
- Jika operandnya word: AX = (DX AX)/operand dan DX = remainder (modulus)
Kelompok ketiga: INC, DEC, NOT, NEG
Tipe operand yang mendukung memory to register.
Register: AX, BX, CX, DX, AH, AL, BL, BH, CH, CL, DH, DL, DI, SI, BP, SP.
Memory: [BX], [BX+SI+7], variabel, dan lain sebagainya.
Instruksi NOT tidak menghipnotis flag apapun.
Instruksi INC, DEC menghipnotis flag ZF, SF, OF, PF, dan AF.
Instruksi NEG menghipnotis flag CF, ZF, SF, OF, PF, dan AF.
Komentar
Posting Komentar