Chapter 6 Program Control Instruction Introduction program control instruction : direct the flow of a program, allow the flow to change jumps, calls, returns, interrupts, machine control instructions change in flow : CMP, TEST followed by conditional jump relational assembly language statements : .IF, .ELSE, .ELSEIF, .WHILE, .ENDW, .REPEAT, . UNTIL MASM, TASM Ver.6X ~ allow to develop control flow portions of program with C/C++ language efficiency Ch.6 Program Control Instructions 2 6-1 The Jump Group JMP(jump) : allow to skip sections of a program and blanch to any part of memory for next instruction unconditional jump, conditional jump three type unconditional jump : Fig. 6-1 3 Unconditional Jump(JMP) intrasegment jump : short, near jump Short jump(2-byte): 1 byte disp.(within +127~-128 byte) Near jump(3-byte) : 2 byte disp.(within 32K bytes or anywhere in current code segment) segments : cyclic in nature intersegment, far jump(5-byte) : any memory location within the real memory system 80386~ (in protected mode) Near(5-byte) : 4 byte displacement(within 2G bytes) Far(7-byte) : 4 byte(EIP), 2 byte(CS) Ch.6 Program Control Instructions 4 Short Jump short jump : relative jump distance or displacement : follow the opcode one-byte signed number(+127~-128) : sign-extended and added to IP/EIP to generate the jump address within current code segment EX. 6-1 : label : symbolic name for memory address SHORT directive : force a short jump most assembler : choose best form of jump instruction JMP START : assemble as a short jump Ch.6 Program Control Instructions 5 Short Jump 1st jump : 0020H – 0009H = 0017(disp. = 17H) 2nd jump : 0002H – 0024H = FFDEH(disp. = DEH) Ch.6 Program Control Instructions 6 Fig. 6-2 Fig. 6-2 Ch.6 Program Control Instructions 7 Near, Far Jump near jump : relocatable because relative jump signed displacement : added to IP/EIP to generate the jump address 2 byte : 32K bytes in current code segment 4-byte(386~ in protected mode) : 2G bytes far jump : 5(7, 80386~) byte instruction new offset address(IP/EIP) : byte 2,3(2~5) new segment address(CS) : byte 4,5(6,7) 80286~ in protected mode : CS access a descriptor that contain base address of far jump segment Ch.6 Program Control Instructions 8 Fig. 6-3 Fig. 6-3 Ch.6 Program Control Instructions 9 EX. 6-2 : Near Jump E9 0200 R JMP NEXT : only list file R : denote a relocatable jump address of 0200H actual machine code : E9 F6 01 0200H - 000AH = 01F6H Ch.6 Program Control Instructions 10 Fig. 6-4 Fig. 6-4 Ch.6 Program Control Instructions 11 EX. 6-3 far jump : FAR PTR directive, far label far label : external to current code segment EXTRN UP:FAR directive a global label as a double colon(LABEL::) ----E : external. filled in by linker when links program files 12 Indirect Jump jump with 16-, 32-bit reg. operand : indirect jump contents of reg. : transferred directly into IP/EIP JMP AX : IP ← AX, JMP EAX : EIP ← EAX EX. 6-4 : how JMP AX access jump table read a key, converted ASCII to binary, doubled jump table : 16-bit offset address Indirect Jumps using Index : double-indirect jump [ ] form of addressing to directly access jump table near jump JMP TABLE[SI] : IP ← [SI+TABLE] far jump JMP FAR PTR [SI], JMP TABLE [SI] with TABLE data defined DD directive Ch.6 Program Control Instructions 13 EX. 6-4 EX. 6-4 14 EX. 6-5 EX. 6-5 15 Conditional Jumps conditional jump : short jump ~ 80286(short jump) : +127 ~ -128 80386 ~(short, near jump) : 1, 4 bytes test one flag bit or some more : S, Z, C, P, O if condition under test is true : branch to the label if condition is false : next sequential instruction relative magnitude comparisons : require more complicated conditional jump instructions that test more than one flag bit Table 6-1 : conditional jump instructions Ch.6 Program Control Instructions 16 Table 6-1 Table 6-1 17 Fig. 6-5 Fig. 6-5 : order of signed, unsigned 8-bit no.s Ch.6 Program Control Instructions 18 Conditional Jumps unsigned : FFH is above 00H, above, below, equal signed : FFH less than 00H, greater, less, zero alternate form : JE = JZ JA(if above) = JNBE(if not below or equal) JCXZ(jump if CX = 0), JECXZ(jump if ECX=0) if CX/ECX = 0 : jump occur if CX/ECX <> 0 : no jump occur EX. 6-6 : search table for 0AH using SANSB, JCXZ Ch.6 Program Control Instructions 19 EX. 6-6 EX. 6-6 Ch.6 Program Control Instructions 20 Conditional Set Instructions conditional set instructions : 80386~ set a byte to either a 01H or clear a byte to 00H useful where a condition must be tested at a point much later in the program SETNC MEM : places a 01H into memory location MEM if carry is cleared and a 00H into MEM if carry is set Table 6-2 : Ch.6 Program Control Instructions 21 Table 6-2 Table 6-2 22 LOOP, Conditional LOOP LOOP : combination of decrement CX and JNZ ~ 80286 : DEC CX ; if CX <> 0, jump to label CX = 0, execute next sequential instruction 80386 ~ : CX/ECX depending on instruction mode if LOOPE(loop while equal, LOOPZ) : jump if CX <> 0 while equal condition exist exit the loop if CX = 0 or condition is not equal LOOPNE(loop while not equal, LOOPNZ) : jump if CX <> 0 while not-equal condition exist exit the loop if CX = 0 or condition is equal LOOPEW/LOOPED,LOOPNEW/LOOPNED:override mode Ch.6 Program Control Instructions 23 EX. 6-7 EX. 6-7 : 24 6-2 Controlling the Flow of an Assembly Language Program relational statements .IF, .ELSE, .ELSEIF, ENDIF, .REPEAT.UNTIL, .WHILE-.ENDW : easier to control the flow than conditional jump EX. 6-8 : testing system for version of DOS DOS INT 21H, function no. 30H : read DOS ver. (a) : source program, (b) fully expended assembled * : assembler-generated and -inserted statements && : logical AND Table 6-3 : relational operator Ch.6 Program Control Instructions 25 Table 6-3 Table 6-3 Ch.6 Program Control Instructions 26 EX. 6-10 EX. 6-10 : read a key, convert to hexadecimal `a`(61H), `A`(41H) : 61H(41H)-57H(37H)=0AH 27 DO-WHILE Loops .WHILE statement : used with a condition to begin the loop EX. 6-11 : read a key, store into array called BUF until enter key(0DH) is typed DOS 21H, fn no. 09H Ch.6 Program Control Instructions 28 EX. 6-11 EX. 6-11 29 REPEAT-UNTIL Loops .REPEAT : defined start of loop .UNTIL : defined end of loop, contained condition EX. 6-14 : EX. 6-11,12 Ch.6 Program Control Instructions 30 EX. 6-14 EX. 6-14 31 6-3 Procedures Procedure : a group of instructions that usually performs one task a reusable section of the software that is stored in memory once, but used as often as necessary advantage : save memory space make it easier to develop software disadvantage : take the computer a small amount of time to link to procedure and return from it CALL/RET : link to/return from the procedure Ch.6 Program Control Instructions 32 Procedure CALL : push the address of instruction following CALL(return address) on stack RET : remove an address from stack so the program return to instruction following CALL specific rules for storing procedure begin with PROC, end with ENDP directive each directive : appear with name of procedure PROC : followed by type of procedure : NEAR,FAR type :can be followed by the USES statement USES statement : allow any no. of reg. to be automatically pushed and popped within procedure Ch.6 Program Control Instructions 33 EX. 6-16 EX. 6-16 Ch.6 Program Control Instructions 34 CALL near return(C3H) : remove 16-bit no. from stack, place it into IP to return from procedure in current segment far return(CBH) : remove 32-bit no. from stack, place it into both IP, CS to return from procedure to any memory location far procedure : global, used by all software near procedure : local, used by a given task CALL : differ from jump instruction because a CALL save a return address on stack Ch.6 Program Control Instructions 35 Near CALL near CALL : 3(5, 80386~ in protected mode)-byte instruction 1st byte : opcode 2nd, 3rd byte : displacement(distance) of 32K 2nd~5th byte : 32-bit displacement of 2G bytes near CALL execute : push offset address of next instruction(IP/EIP) on stack add displacement from byte 2,3(2~5) to IP/EIP to transfer control to the procedure CALLN(near CALL) Fig. 6-6 : Ch.6 Program Control Instructions 36 Fig. 6-6 Fig. 6-6 Ch.6 Program Control Instructions 37 Far CALL far CALL : 5(7, 80386~ in protected mode)-byte instruction 1st byte : opcode 2nd 3rd byte : new IP, 4th 5th byte : new CS 2nd~5th byte : new EIP, 6th 7th byte : new CS far CALL execute : push IP/EIP, CS on stack place byte 2,3(2~5) to IP/EIP and byte 4,5(6,7) to CS to call a procedure located anywhere in memory system CALLF(far CALL) Fig. 6-7 Ch.6 Program Control Instructions 38 Fig. 6-7 Fig. 6-7 Ch.6 Program Control Instructions 39 CALLs with Register, indirect address CALL with register operand : like jump, also contain a register operand CALL BX : push IP, jump to offset address located in BX(IP ← BX) in current code segment CALL with indirect memory address : useful whenever different subroutines need to be chosen CALL : also reference far pointers CALL FAR PTR [SI] or CALL TABLE[SI] data in table : defined as doubleword data with DD retrieve a 32-bit address from data segment addressed by SI, use it as address of a far procedure Ch.6 Program Control Instructions 40 EX. 6-17 EX. 6-17 : display ‘OK’ 41 RET RET : real mode(80386~ in protected mode) near RET: remove 16-bit(32-bit), place it into IP/EIT far : remove 32-bit(6 bytes), place it into IP/EIP, CS near, far return : defined in procedure’s PROC other form : RET n n(bytes) : add n to contents of SP after return address is removed from stack push passing parameters on stack before calling procedure if these parameters are to be discarded upon return, RET contains a no. that represents the no. of bytes pushed to stack as parameters Ch.6 Program Control Instructions 42 Fig. 6-8 : near return Fig 6-8 Ch.6 Program Control Instructions 43 EX. 6-19 EX. 6-19 Ch.6 Program Control Instructions 44 RET RETN : CALLN RETF : CALLF passing parameters to a procedure : 1. to use one of the CPU register : MOV CX, TI 2. to use a memory location : MOV TEMP, TI 3. to pass the address of memory location : MOV SI, OFFSET TI 4. to pass the parameters on the stack : (EX. 6-19) MOV DX, TI, PUSH DX 5. to use stack frame : ENTER, LEAVE(p.211) Ch.6 Program Control Instructions 45 6-4 Introduction to Interrupt 1. hardware-generated CALL : external interrupt externally derived from a hardware signal 2. software-generated CALL : internal, exception internally derived from the execution of an instruction or by some other internal event() interrupt : interrupts the program by calling an interrupt service procedure or interrupt handler interrupt vector : in real : 4-byte no. stored in 1st 1024 bytes(~0003FFH) 256(00H~FFH) 4byte = 1024byte protected : replaced by interrupt descriptor table Ch.6 Program Control Instructions 46 Interrupt Vectors Table 6-4 : 256 different interrupt vectors in real each contain address of an interrupt service procedure for IP, CS Intel reserve the 1st 32 interrupt vector(~1FH) : for present , future µ remaining : available for user some of reserved : for error that occur during execution of software, such as divide error interrupt some of reserved : for coprocessor others : occur for normal events in the system vectors 1-6,7,9,17 : function in real, protected mode remaining : only in protected mode Ch.6 Program Control Instructions 47 Table 6-4 Table 6-4 Ch.6 Program Control Instructions 48 Interrupt Instructions software interrupt instruction : special type of CALL INT, INTO, INT3 each of these instruction : 1. in real, fetches vector from interrupt vector table 1. in protected, fetches an interrupt descriptor from interrupt descriptor table 2. calls the interrupt service procedure interrupt call : similar to far CALL instruction because placed return address(IP/EIP, CS) on stack different : pushed flags, then pushed return address fetched new value IP/EIP, CS from vector Ch.6 Program Control Instructions 49 INTs INT n : 256 different software interrupt instruction type no. n : 0 ~ 255(00H ~ FFH) INT 100 : uses interrupt vector no. 100(64H) memory address in IVT : 190H~193H 0110 0100(64H) → shift left 2 → 01 1001 0000(190H) address of interrupt vector in real : multiplying type no. times 4(each vector : 4 bytes) address of interrupt descriptor in protected : multiplying type no. times 8(each descriptor : 8 byte) INT : 2-byte long(1st:opcode, 2nd:vector type no.) INT 3: 1-byte special software interrupt for breakpoints Ch.6 Program Control Instructions 50 INTs software interrupt instruction execute : (1) push flags (2) clear T, I flag bits (3) push CS (4) fetch new value for CS from interrupt vector (5) push IP/EIP (6) fetch new value for IP/EIP from vector (7) jump new location addressed by CS, IP/EIP INT : perform PUSHF, followed by far CALL I flag : control external hardware interrupt input pin, INTR(maskable interrupt request) I = 0 : disable the INTR pin T flag : trap, single step interrupt T = 0 : disable the single step interrupt Ch.6 Program Control Instructions 51 INTs software interrupt : most commonly used to call system procedure because address of system function need not be known system procedure(function) : common to all system, application software software interrupt : often control printers, video displays, disk drives relieving the program from remembering address of system call INT(2-byte long) : used to replace a far CALL(5-byte) Ch.6 Program Control Instructions 52 IRET/IRETD IRET : used only with software or hardware interrupt service procedures IRET : perform POPF, followed by far RET (1) pop stack data back into IP/EIP (2) pop into CS (3) pop into flag register IRETD : 80386~ in protected mode differ from IRET, pop 32-bit EIP from stack RET 3 : 1-byte instruction special software interrupt designed to function breakpoint interrupt or break the flow of software breakpoint : help to debug faulty software Ch.6 Program Control Instructions 53 Interrupt INTO(interrupt on overflow) : conditional software interrupt that test overflow flag(O) if O = 1 : interrupt vector no. 4 occur appear in software that add, subtract signed binary no. interrupt service procedure : same as far procedure different : ends with IRET, saved and restored flag register interrupt control STI(set interrupt flag) : I ← 1, enable INTR pin CLI(clear interrupt flag) : I ← 0, disable INTR pin Ch.6 Program Control Instructions 54 EX. 6-20 EX. 6-20 : add DI, SI, BP, BX, save sum in AX Ch.6 Program Control Instructions 55 Interrupts in the Personal Computer Interrupts found in the personal computer o nly contained Intel-specified interrupts 0–4. Access to protected mode interrupt structur e in use by Windows is accomplished throu gh kernel functions Microsoft provides. and cannot be directly addressed Protected mode interrupts use an interrupt descriptor table. Ch.6 Program Control Instructions 56 Figure 6–9 Interrupts in a typical personal computer . Figure 6–9 Interrupts in a typical personal computer. Ch.6 Program Control Instructions 57 6-5 Machine Control and Miscellaneous Instructions carry flag(C) : carry(addition), borrow(subtraction) STI(set carry) CLC(clear carry) CMC(complement carry) indicate error in procedure(ex. reads data from a disk memory file) : successful or file-not-found error WAIT : monitor BUSY’(286,386)/TEST’(8086/88) input pin BUSY’ pin : connected to BUSY’ pin of coprocessor BUSY’ = 1 : nothing happen, next instruction execute BUSY’ = 0 : µ wait for BUSY’ pin return to logic 1, µ wait until coprocessor finishes a task Ch.6 Program Control Instructions 58 HLT, NOP HLT(halt) : stop the execution of soft ware three ways to exit a halt : by an interrupt, by hardware reset, during a DMA operation normally appears in a program to wait for an interrupt NOP(no operation) take a short time to execute no operation also used in time delays to waste time : not very accurate(cache, pipeline in modern µ) often used to pad software with space for future machine language Ch.6 Program Control Instructions 59 LOCK prefix, ESC LOCK prefix : cause LOCK’ output pin to activate(logic 0) for duration of a locked instruction LOCK’ pin : often disables external bus masters or other system components ex. : LOCK:MOV AL,[SI] ESC(escape) : pass information to numeric coprocessor 6 bits of the ESC instruction : provide the opcode to coprocessor and begin executing an instruction ESC opcode : never appear code prefixed in coprocessor instruction(FLD,FST..) Ch.6 Program Control Instructions 60 BOUND BOUND : 80186~ compare contents of any 16- or 32-bit reg. against contents of two word or doubleword of memory: a lower and an upper boundary if value of reg. is not within the boundary : type 5 interrupt if within the boundary : next instruction execute ex. BOUND SI, DATA word-sized location DATA : lower boundary word-sized location DATA+2 : upper boundary if SI WORD PTR [DATA] or WORD PTR [DATA+2] SI : type 5 interrupt return address : point to BOUND instruction Ch.6 Program Control Instructions 61 ENTER and LEAVE ENTER(two operand) : create stack frame by pushing BP onto stack and loading BP with uppermost address of stack frame stack frame variables : accessed through BP 1st operand : no of byte to reserve for variables on stack frame, 2nd : level of procedure stack frame : mechanism used to pass parameters to a procedure through the stack memory LEAVE : reverse ENTER by reloading SP, BP with their prior values ENTER 8,0 : reserve 8 bytes for stack frame(Fig6-9) Ch.6 Program Control Instructions 62 Fig. 6-9 Fig. 6-9 Ch.6 Program Control Instructions 63 EX. 6-21 EX. 6-21 : create a stack frame so that two 16-bit parameters are passed to a system level procedure 64 EX. 6-21 EX. 6-21 : Ch.6 Program Control Instructions 65