250 likes | 372 Vues
CEN 226 : Computer Organization & Assembly Language : CSC 225 (Lec#5). By Dr. Syed Noman. Flag Register. Flag is a bit of special information usually implemented with flip flop Total 9 Flags 6 Status Flags: C, A, S, Z, P, O 3 Control flags: I, T, D.
E N D
CEN 226: Computer Organization & Assembly Language :CSC 225(Lec#5) By Dr. Syed Noman
Flag Register • Flag is a bit of special information usually implemented with flip flop • Total 9 Flags • 6 Status Flags: C, A, S, Z, P, O • 3 Control flags: I, T, D
Status Flags • Sign(SF) – set when the most significant bit is a one. • Zero(ZF) – set when the result of an arithmetic or logical operation is zero. • Carry (CF)– set when the result of an unsigned arithmetic operation produces a carryout. • Overflow(OF) – set when the result of a signed arithmetic operation is in error. • Auxilary(AF) – set when carry is generated from bit 3 to 4 in addition or borrow is taken during subtraction from bit 4 to 3. • Parity(PF) – set when number of 1’s are odd in the answer.
Problem • What are the flag settings of the result of the following 8-bit HEX addition? • D7h + CAh • D7h + CAh= A1h • Zero (0) • Negative(1) • Carryout (1) • Overflow (0) • Auxiliary Carry (1) • Parity (1)
Problem • What are the flag settings of the result of the following 8-bit HEX addition? • 38h + C8h • 38h + C8h = 00h • Zero (1) • Negative(0) • Carryout (1) • Overflow (0) • Auxiliary Carry (1) • Parity (0)
Overflow flag • A negative result out of positive operands (or vice versa) is an overflow • if we add 127 and 127 using 8-bit registers. 127+127 is 254, but using 8-bit arithmetics the result would be 1111 1110 binary, which is -2 in two's complement, and thus negative.
Program Control Instructions • Instructions that direct the flow of a program and allow the flow to change. • Unconditional Jump (jmp) • Conditional Jumps
The Compare Command • Compares the destination operand to the source operand • Nondestructive subtraction of source from destination (destination operand is not changed) • Syntax: CMP destination, source • Example: destination == source
Example: destination < source mov al,4 cmp al,5 ; Carry flag set CMP Instruction (1 of 3) mov al,5 cmp al,5 ; Zero flag set
CMP Instruction (2 of 3) • Example: destination > source mov al,6 cmp al,5 ; ZF = 0, CF = 0 (both the Zero and Carry flags are clear)
Example: destination < source mov al,-1 cmp al,5 ; Sign flag != Overflow flag CMP Instruction (3 of 3) The comparisons shown here are performed with signed integers. • Example: destination > source mov al,5 cmp al,-2 ; Sign flag == Overflow flag
Difference In Interpretation Of Signed And Unsigned Numbers .MODEL SMALL .STACK 100H .DATA MSG1 DB 13,10,"YES JUMP HAPPENS IN SING$" MSG2 DB 13,10,"JUMP HAPPENED FOR UNSIGNED$" .CODE START: MOV AX,@DATA MOV DS,AX MOV BH,10000000B ;CMP BH,11111111B CMP BH,01111111B JG SIGNM JA UNSIGN SIGNM: MOV AH,9 LEA DX,MSG1 INT 21H JMP TERM UNSIGN: MOV AH,9 LEA DX,MSG2 INT 21H TERM: MOV AX,4C00H INT 21H END START END
Example-1 • Example : Using the jz instruction. mov ax, 2 ; ax = 2 sub ax, bx ; ax = 2 - bx jznextl ; jump if (ax-bx) == 0 incax ; ax = ax + 1 nextl: inc bx • The above is equivalent to: ax = 2; if ( ax != bx ) { ax = ax + 1 ; } bx = bx + 1 ;
Example-2 • C version if ( i == 10 ) { i = i + 5 ; j = j + 5 ; } /* Rest of program */ • Assembly version cmpi, 10 jne rest ; if i != 10 goto rest add i, 5 ; otherwise do action part add j, 5 rest: ; rest of program
Practice Program in class • Write a program that inputs a character and prints whether it is uppercase or lowercase English alphabet.
Practice Program solution .model small .stack 100h .data msg0 db 13,10, "Enter a character:: $" msg1 db 13,10,"it is an uppercase letter.$" msg2 db 13,10,"it is a lowercase letter.$" msg3 db 13,10,"it is NOT a letter!$" .code start: mov ax, @data movds, ax mov ah,9 lea dx,msg0 int 21h mov ah,1 int 21h movbh, al cmpbh,'A' jbnot_a_letter cmpbh,'Z' jbe uppercase cmpbh,'a' jbnot_a_letter; means between 91 - 96 included cmpbh,'z' jbe lowercase not_a_letter: mov ah,9 lea dx,msg3 int 21h jmp finish uppercase: mov ah,9 lea dx, msg1 int 21h jmp finish lowercase: mov ah,9 lea dx, msg2 int 21h finish: mov ax,4c00h int 21h end start
Assignment 2a • Write a program that inputs a character and prints it is a digit, or uppercase/lowercase English alphabet or some other character.