140 likes | 266 Vues
Microprocessor. MA Rahim Khan Computer Engineering and Networks Department. Flag Register.
E N D
Microprocessor MA Rahim Khan Computer Engineering and Networks Department
Flag Register • Carry Flag (CF) - this flag is set to 1 when there is an unsigned overflow. For example when you add bytes 255 + 1 (result is not in range 0...255). When there is no overflow this flag is set to 0. • Zero Flag (ZF) - set to 1 when result is zero. For none zero result this flag is set to 0. • Sign Flag (SF) - set to 1 when result is negative. When result is positive it is set to 0. Actually this flag take the value of the most significant bit. Overflow Flag (OF) - set to 1 when there is a signed overflow. For example, when you add bytes 100 + 50 (result is not in range -128...127).
Flag Register Cont…. Parity Flag (PF) - this flag is set to 1 when there is even number of one bits in result, and to 0 when there is odd number of one bits. Even if result is a word only 8 low bits are analyzed! Auxiliary Flag (AF) - set to 1 when there is an unsigned overflow for low nibble (4 bits). Interrupt enable Flag (IF) - when this flag is set to 1 CPU reacts to interrupts from external devices. Direction Flag (DF) - this flag is used by some instructions to process data chains, when this flag is set to 0 - the processing is done forward, when this flag is set to 1 the processing is done backward.
Carry Flag • include 'emu8086.inc' • ORG 100h • MOV AL, 255 • ADD AL, 1 • JC label1 • PRINT 'no carry.' • JMP exit • label1: • PRINT 'has carry.' • exit: • RET
Jump if CX Register is Zero • include 'emu8086.inc' • ORG 100h • MOV CX, 0 • JCXZ label1 • PRINT 'CX is not zero.' • JMP exit • label1: • PRINT 'CX is zero.' • exit: • RET
Jump if Parity Even • include 'emu8086.inc' • #make_com# • ORG 100h • MOV AL, 00000101b ; AL = 5 • AND AL, 11111111B ; just set flags. • JP label1 • PRINT 'parity odd.' • JMP exit • label1: • PRINT 'parity even.' • exit: • RET
Jump if Parity Even • include 'emu8086.inc' • ORG 100h • MOV AL, 00000101b ; AL = 5 • OR AL, 0 ; just set flags. • JPE label1 • PRINT 'parity odd.' • JMP exit • label1: • PRINT 'parity even.' • exit: • RET
Jump if Parity Odd. • include 'emu8086.inc' • ORG 100h • MOV AL, 00000111b ; AL = 7 • OR AL, 0 ; just set flags. • JPO label1 • PRINT 'parity even.' • JMP exit • label1: • PRINT 'parity odd.' • exit: • RET
Jump if Signed • include 'emu8086.inc' • ORG 100h • MOV AL, 10000000b ; AL = -128 • OR AL, 0 ; just set flags. • JS label1 • PRINT 'not signed.' • JMP exit • label1: • PRINT 'signed.' • exit: • RET
Jump if Not Signed • ORG 100h • MOV AL, 00000111b ; AL = 7 • OR AL, 0 ; just set flags. • JNS label1 • PRINT 'signed.' • JMP exit • label1: • PRINT 'not signed.' • exit: • RET
Complement Carry flag(CMC) • if CF = 1 then CF = 0if CF = 0 then CF = 1 • No operands
Clear Carry flag(CLC) • Clear Carry flag. Algorithm: CF = 0 • No operands
Signed divide.(IDIV) • Signed divide. Algorithm:when operand is a byte:AL = AX / operandAH = remainder (modulus)when operand is a word:AX = (DX AX) / operandDX = remainder (modulus) • Example: • MOV AX, -203 • ; AX = 0FF35h • MOV BL, 4 • IDIV BL • ; AL = -50 (0CEh), AH = -3 (0FDh) • RET
Signed Multiply • when operand is a byte:AX = AL * operand. when operand is a word:(DX AX) = AX * operand. • Example: • MOV AL, -2 • MOV BL, -4 • IMUL BL ; AX = 8 • RET