Presentation is loading. Please wait.

Presentation is loading. Please wait.

Program Control Instructions

Similar presentations


Presentation on theme: "Program Control Instructions"— Presentation transcript:

1 Program Control Instructions
A Course in Microprocessor Electrical Engineering Dept. University of Indonesia

2 The Jump Group Unconditional Jump (fig.6.1) Short Jump
Jump (JMP) allows the programmer to skip sections of a program and branch to any part of the memory for the next instruction A Conditional Jump allows the programmer to make decisions based upon numerical test Unconditional Jump (fig.6.1) Short Jump a 2-byte instruction that allows jumps or branches to memory locations within +127 and -128 bytes from the address following the jump is called relative jump

3 The Jump Group (cont’d)
the jump address is not stored with the opcode but a distance or displacement follows the opcode See fig.6.2 and study example 6.1 Near Jump It passes control to an instruction in the current code segment located within 32K bytes from the near jump The near jump is relocatable known as relative jump See fig.6.3 and study example 6.2 Far Jump It obtains new segment and offset address to accomplish the jump (fig.6.4 and example 6.3)

4 The Jump Group (cont’d)
Jumps with Register Operands known as indirect jump the address of the jump is in the register specified by the jump instruction (i.e., the contents of the register are transferred directly into the instruction pointer) Study example 6.4 Indirect Jump Using an Index It uses the [] form of addressing to directly access the jump table The JMP Table [SI] instruction (example 6.5) points to a jump address stored at the code segment offset loction addressed by SI

5 The Jump Group (cont’d)
Conditional Jump and Conditional Sets The conditional jump instructions test the following flag bits: sign (S), zero (Z), carry (C), parity (P), and overflow (O) --- see Table 6.1 if the condition under test is true, a branch to the label associated with the jump instruction occurs Otherwise, the next sequential step in the program executes The conditional jump instructions all test flag bits, except for the JCXZ (jump if CX=0) and JECXZ (study the example 6.6) See also Table 6.2 for the conditional set instruction

6 The Jump Group (cont’d)
Loop It is a combination of a decrement CX and JNZ conditional jump Example 6.7 shows how to add data in a block of memory with data in another block of memory Conditional Loops LOOPE (loop while equal) jumps if CX <> 0 while an equal condition exists LOOPNE (loop while not equal) jumps if CX <> 0 while a not-equal condition exists

7 Controlling the Flow of an Assembly Language Program
It is much easier to use the assembly language statements .IF., .ELSE., .ELSEIF., and .ENDIF. (study ex. 6.8, 6.9, 6.10 and Table 6.3) DO-WHILE Loops Pair: .WHILE and .ENDW Study example 6.11, 6.12, and 6.13 REPEAT-UNTIL Loops Pair: .REPEAT and .UNTIL Study Example 6.14 and 6.15

8 Procedures CALL CALLs with Register Operands
A procedure is a group of instructions that usually performs one task reusable - takes small amount of time use stack - can be NEAR or FAR Pair: PROC - ENDP (study example 6.16) CALL It transfers the flow of the program to the procedure CALLs with Register Operands E.g., CALL BX (example 6.17)

9 Procedures (cont’d) CALLs with Indirect Memory Address RET
useful whenever different subroutines need to be chosen from a program (see Example 6.18) RET It removes either a 16-bit (or 32-bit) number from the stack and places it into IP (and CS) the new location (IP and CS:IP) is the address of the next instruction that immediately follows the most recent CALL to a procedure (Fig. 6.8) Study Example 6.19

10 Introduction to Interrupt
An Interrupt is either a hardware-generated CALL (externally derived from a hardware signal) or a software-generated CALL(internally derived of the execution of an instruction or by some other internal event) Interrupt Vectors An interrupt vector is a 4-byte number stored in the first 1,024 bytes of memory (in the real mode) The vector table is replaced by an interrupt descriptor table that uses 8-byte descriptors to describe each of the interrupts There are 256 different interrupt vectors; each vector contains an address of an interrupt service procedure

11 Introduction to Interrupt (cont’d)
Interrupt Instructions INT, INTO, and INT 3 INTs 256 software interrupt (INT) available Whenever a software interrupt executes, it: pushes the flags onto the stack clears the T and I flag bits pushes CS onto the stack fetches the new value for IP/EIP from the vector jump to the new leocation (CS:IP/EIP)

12 Introduction to Interrupt (cont’d)
IRET/IRETD Used only with software or hardware interrupt service procedure The IRET instruction will: pop stack data back into the IP pop stack data back into CS pop stack data back into the flag register INT 3 A special software interrupt designed to be used as a breakpoint It is common to insert an INT 3 instruction in software to interrupt or break the flow of the software

13 Introduction to Interrupt (cont’d)
INTO Interrupt on overflow is a conditional software interrupt that tests the overflow flag (O) if O = 0 the INTO instruction performs no operation if O = 1 an INTO instruction executes It appears in software that adds or subtracts signed binary numbers --> INTO detects the overflow condition An Interrupt Service Procedure (Ex. 6.20) The main difference between this procedure and a normal far procedure is that it ends with the IRET instruction instead of the RET instruction, and the contents of the flag register are saved on the stack

14 Introduction to Interrupt (cont’d)
Interrupt Control The set interrupt flag instruction (STI) enables the INTR pin The clear interrupt flag instruction (CLI) disables the INTR pin Interrupts in the Personal Computer See Table 6.5

15 Machine Control and Miscellanous Instructions
These instructions provide control of the carry bit, sample the BUSY/TEST pin, and perform various other functions Controlling the Carry Flag Bit There are three instructions that control the contents of the carry flag: STC (set carry), CLC (clear carry) and CMC (complement carry) WAIT The WAIT instruction monitors the hardware BUSY/TEST pins

16 Machine Control and Miscellanous Instructions (cont’d)
HLT The halt instruction that stops the execution of software Three ways of to exit a halt: by an interrupt, by a hardware reset, or during DMA operation NOP It performs no operation (useful for delaying the operation)

17

18

19

20 Example 6.1 Example 6.2 0000 33 DB XOR BX,BX
B START: MOV AX,1 C ADD AX,BX EB JMP SHORT NEXT B D NEXT : MOV BX,AX E8 DE JMP START Example 6.2 DB XOR BX,BX B START: MOV AX,1 C ADD AX,BX E R JMP NEXT B D NEXT : MOV BX,AX E R JMP START

21 Example 6.3 0000 33 DB XOR BX,BX 0002 B8 0001 START: MOV AX,1
EXTRN UP : FAR DB XOR BX,BX B START: MOV AX,1 C ADD AX,BX E R JMP NEXT B D NEXT : MOV BX,AX E R JMP FAR PTR START EA E JMP UP

22 Example 6.4 ;A program that reads 1, 2 or 3 from the keyboard
;A program that reads 1, 2 or 3 from the keyboard ;if 1, 2 or 3 is typed , a 1, 2 or 3 is displayed ; .MODEL SMALL ;select small model DATA start of data segment R TABLE DW ONE ;define lookup table R DW TWO R DW THREE CODE start code segment STARTUP ;start of program 0017 TOP: 0017 B MOV AH,1 ;read key into AL 0019 CD INT 21H 001B 2C SUB AL,31H ;convert to biner 001D 72 F8 JB TOP ;if below ‘1’ typed 001F 3C CMP AL,2 F4 JA TOP ;if above ‘3’ typed 0023 B MOV AH,00H ;double to 0, 2 or 4 C0 ADD AX,AX 0027 BE 0000 R MOV SI,OFFSET TABLE ;address lookup table 002A 03 F0 ADD SI,AX ;form lookup address 002C 8B MOV AX,[SI] ;get ONE, TWO or THREE 002E FF E0 JMP AX ;jump address 0030 ONE: 0030 B MOV DL,’1’ ;load ‘1’ for display 0032 EB JMP BOT ;go display ‘1’ 0034 TWO: 0034 B MOV DL,’2’ ;load ‘2’ for display 0036 EB JMP BOT ;go display ‘2’ 0038 THREE: 0038 B MOV DL,’3’ ;load ‘3’ for display 003A BOT: 003A B MOV AH,2 ;display number 003C CD INT 21H .EXIT ;exit to DOS END ;end of file Example 6.4

23 Example 6.5 .MODEL SMALL ;select small model
.MODEL SMALL ;select small model DATA ;start of data segment R TABLE DW ONE ;define lookup table R DW TWO R DW THREE CODE ;start code segment .STARTUP ;start of program 0017 TOP: 0017 B MOV AH,1 ;read key into AL 0019 CD INT 21H 001B 2C SUB AL,31H ;convert to biner 001D 72 F8 JB TOP ;if below ‘1’ typed 001F 3C CMP AL,2 F4 JA TOP ;if above ‘3’ typed 0023 B MOV AH,0 ;calculate table address C0 ADD AX,AX F0 ADD SI,AX 0029 FF A R JMP TABLE [SI] ;jump to ONE, TWO or THREE 002D ONE: 002D B MOV DL,’1’ ;load DL with ‘1’ 002F EB JMP BOT 0031 TWO: 0031 B MOV DL,’2’ ;load DL with ‘2’ 0033 EB JMP BOT 0035 THREE: 0035 B MOV DL,’3’ ;load DL with‘3’ 0037 BOT: 0037 B MOV AH,2 ;display ONE, Two or THREE 0039 CD INT 21H .EXIT ;exit to DOS END ;end of file

24 Example 6.6 ;through the SI register ; 0017 SCAN PROC NEAR
;A procedure that searches a table of 100 bytes for 0AH ;The address, TABLE, is transferred to the procedure ;through the SI register ; 0017 SCAN PROC NEAR 0017 B MOV CX,100 ;load count of 100 001A B0 0A MOV AL,0AH ;load AL wiyh 0AH 001C FC CLD ;select increment 001D F2/AE REPNE JMP NEXT ;test 100 bytes fir 0AH 001F F9 STC ;set carry for not found 0020 F3 01 JCXZ NOT_FOUND ;if not found 0022 F8 CLC ;clear carry if found 0023 NOT_FOUND: 0023 C3 RET ;return from procedure SCAN ENDP

25 Example 6.7 0025 L1: ;and stores the result over top of data in BLOCK2
;A program that sums the contens of BLOCK1 and BLOCK2 ;and stores the result over top of data in BLOCK2 ;through the SI register ; .MODEL SMALL ;select small model DATA ;start of data segment [ BLOCK1 DW DUP (?) ;100 bytes for BLOCK1 0000 ] 00C [ BLOCK2 DW DUP (?) ;100 bytes for BLOCK2 CODE ;start of code segment .STARTUP ;start of program 0017 8C D8 MOV AX,DS ;overlap DS and ES 0019 8E C0 MOV ES,AX 001B FC CLD ;select increment 001C B MOV CX,100 ;load count 100 001F BE 0000 R MOV SI,OFFSET BLOCK1 ;address BLOCK1 0022 BF 0000 R MOV DI,OFFSET BLOCK2 ;address BLOCK2 L1: 0025 AD LODSW ;load AX with BLOCK1 : ADD AX,ES:[DI] ;add BLOCK2 data to AX 0029 AB STOSW ;store sum in BLOCK2 002A E2 F9 LOOP L1 ;repeat 100 times .EXIT ;exit to DOS END ;end file

26 Example 6.8(a) Example 6.8(b) MOV AH,30H INT 21 H
; Inti Program Sequence MOV AH,30H INT 21 H .IF AL<3 && AH<30 MOV AH,4CH INT 21H .ENDIF Example 6.8(b) ; Diagram file bahasa Mesin pada contoh 6.8 (a) ; 0000 B MOV AH,30H 0002 CD 21 INT 21H .IF AL<3 && AH<30 0004 3C 03 * CMP AL,003H * JAE @c0001 FC 1E* CMP AH,01EH 000B * 000D B4 4C MOV AH,4CH 000F CD 21 INT 21H .ENDIF 0011

27 Example 6.9  [c2]

28 Example 6.10 ; Program yang membaca sebuah key dan menyimpan dalam Hexadecimal ; Nilai pada memori lokasdi TEMP. .Mode Small : Pilih model SMALL Data : Memulai data segmen TEMP DB? : Define TEMP CODE : Awal Code segment STARTUP : Start program 0017 B MOV AH, : Pembacaan key 0019 CD INT 21H . IF AL>=’a’ && AL<=’f’ : Bila dibagian sisi bawah C SUB AL,57H .ELSEIF AL>=’A’ && AL<=’F’ : bila bagian sisi atas 002F 2C ELSE : Hal lain C SUB AL,30H .ENDIF A R MOV TEMP, AL .EXIT : Keluar DOS END : Akhir file

29

30

31

32

33


Download ppt "Program Control Instructions"

Similar presentations


Ads by Google