In this lecture, students will be able to understand: Bit Test Instruction, Conditional LOOP Instructions, LOOPZ and LOOPE, LOOPNZ and LOOPNE, block structures, Block-Structured IF Statements, Compound Expressions with AND, Compound Expressions with OR, WHILE Loops, REPEAT Loops. | CSC 221 Computer Organization and Assembly Language Lecture 20: Conditional and Block Structures Lecture 19: Review I/O Instructions StdIn proc lpszBuffer:DWORD,bLen:DWORD StdOut proc lpszText:DWORD invoke StdOut, addr message1 invoke StdIn, addr buffer, 100 Conditional Jumps Specific flags Equality Unsigned comparisons Signed Comparisons Lecture 19: Review Conditional Jumps JB, JC jump to a label if the Carry flag is set JE, JZ jump to a label if the Zero flag is set JS jumps to a label if the Sign flag is set JNE, JNZ jump to a label if the Zero flag is clear JECXZ jumps to a label if ECX equals 0 Assembly Examples (cont.) Lecture Outline Bit Test Instruction Conditional LOOP Instructions LOOPZ and LOOPE LOOPNZ and LOOPNE Block Structures Block-Structured IF Statements Compound Expressions with AND Compound Expressions with OR WHILE Loops REPEAT Loops BT (Bit Test) Instruction Copies bit n from an operand into the Carry flag Syntax: BT bitBase, n bitBase may be r/m16 or r/m32 n may | CSC 221 Computer Organization and Assembly Language Lecture 20: Conditional and Block Structures Lecture 19: Review I/O Instructions StdIn proc lpszBuffer:DWORD,bLen:DWORD StdOut proc lpszText:DWORD invoke StdOut, addr message1 invoke StdIn, addr buffer, 100 Conditional Jumps Specific flags Equality Unsigned comparisons Signed Comparisons Lecture 19: Review Conditional Jumps JB, JC jump to a label if the Carry flag is set JE, JZ jump to a label if the Zero flag is set JS jumps to a label if the Sign flag is set JNE, JNZ jump to a label if the Zero flag is clear JECXZ jumps to a label if ECX equals 0 Assembly Examples (cont.) Lecture Outline Bit Test Instruction Conditional LOOP Instructions LOOPZ and LOOPE LOOPNZ and LOOPNE Block Structures Block-Structured IF Statements Compound Expressions with AND Compound Expressions with OR WHILE Loops REPEAT Loops BT (Bit Test) Instruction Copies bit n from an operand into the Carry flag Syntax: BT bitBase, n bitBase may be r/m16 or r/m32 n may be r16, r32, or imm8 Example: jump to label L1 if bit 9 is set in the AX register: bt AX,9 ; CF = bit 9 jc L1 ; jump if Carry Conditional Loop Instructions LOOPZ and LOOPE LOOPNZ and LOOPNE LOOPZ and LOOPE Syntax: LOOPE destination LOOPZ destination Logic: ECX ECX – 1 if ECX > 0 and ZF=1, jump to destination Useful when scanning an array for the first element that does not match a given value. LOOPNZ and LOOPNE LOOPNZ (LOOPNE) is a conditional loop instruction Syntax: LOOPNZ destination LOOPNE destination Logic: ECX ECX – 1; if ECX > 0 and ZF=0, jump to destination Useful when scanning an array for the first element that matches a given value. LOOPNZ Example .data array SWORD -3,-6,-1,-10,10,30,40,4 sentinel SWORD 0 .code mov esi,OFFSET array mov ecx,LENGTHOF array next: test WORD PTR [esi],8000h ; test sign bit pushfd ; push flags on stack add esi,TYPE array popfd ; pop flags from stack loopnz next ; continue loop jnz quit ; none found sub esi,TYPE array ; ESI points to value .