Selected Pentium Instructions Chapter 12 S. Dandamudi Outline - - PowerPoint PPT Presentation

selected pentium instructions
SMART_READER_LITE
LIVE PREVIEW

Selected Pentium Instructions Chapter 12 S. Dandamudi Outline - - PowerPoint PPT Presentation

Selected Pentium Instructions Chapter 12 S. Dandamudi Outline Status flags Conditional execution Zero flag Indirect jumps Carry flag Conditional jumps Overflow flag Single flags Sign flag Unsigned


slide-1
SLIDE 1

Selected Pentium Instructions

Chapter 12

  • S. Dandamudi
slide-2
SLIDE 2

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 2

Outline

  • Status flags

∗ Zero flag ∗ Carry flag ∗ Overflow flag ∗ Sign flag ∗ Auxiliary flag ∗ Parity flag

  • Arithmetic instructions

∗ Multiplication instructions ∗ Division instructions

  • Application examples

∗ PutInt8 ∗ GetInt8

  • Conditional execution

∗ Indirect jumps

  • Conditional jumps

∗ Single flags ∗ Unsigned comparisons ∗ Signed comparisons

  • Implementing high-level

language decision structures

∗ Selection structures ∗ Iteration structures

slide-3
SLIDE 3

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 3

Outline (cont’d)

  • Logical expressions in

high-level languages

∗ Representation of Boolean data ∗ Logical expressions

  • Logical expression

evaluation

∗ Full evaluation ∗ Partial evaluation

  • Bit instructions

∗ Bit test and modify ∗ Bit scan

  • Illustrative examples
  • String representation
  • String instructions

∗ Repetition prefixes ∗ Direction flag ∗ String move instructions ∗ String compare instructions ∗ String scan instructions

  • Illustrative examples

∗ str_len ∗ str_mov

  • Indirect procedure call
slide-4
SLIDE 4

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 4

Status Flags

slide-5
SLIDE 5

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 5

Status Flags (cont’d)

  • Status flags are updated to indicate certain

properties of the result

∗ Example: If the result is zero, zero flag is set

  • Once a flag is set, it remains in that state until

another instruction that affects the flags is executed

  • Not all instructions affect all status flags

∗ add and sub affect all six flags ∗ inc and dec affect all but the carry flag ∗ mov, push, and pop do not affect any flags

slide-6
SLIDE 6

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 6

Status Flags (cont’d)

  • Example

; initially, assume ZF = 0 mov AL,55H ; ZF is still zero sub AL,55H ; result is 0 ; ZF is set (ZF = 1) push BX ; ZF remains 1 mov BX,AX ; ZF remains 1 pop DX ; ZF remains 1 mov CX,0 ; ZF remains 1 inc CX ; result is 1 ; ZF is cleared (ZF = 0)

slide-7
SLIDE 7

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 7

Status Flags (cont’d)

  • Zero Flag

∗ Indicates zero result

– If the result is zero, ZF = 1 – Otherwise, ZF = 0

∗ Zero can result in several ways (e.g. overflow)

mov AL,0FH mov AX,0FFFFH mov AX,1 add AL,0F1H inc AX dec AX » All three examples result in zero result and set ZF

∗ Related instructions

jz jump if zero (jump if ZF = 1) jnz jump if not zero (jump if ZF = 0)

slide-8
SLIDE 8

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 8

Status Flags (cont’d)

  • Uses of zero flag

∗ Two main uses of zero flag

» Testing equality – Often used with cmp instruction cmp char,’$’ ; ZF = 1 if char is $ cmp AX,BX » Counting to a preset value – Initialize a register with the count value – Decrement it using dec instruction – Use jz/jnz to transfer control

slide-9
SLIDE 9

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 9

Status Flags (cont’d)

  • Consider the following

code

sum := 0 for (i = 1 to M) for (j = 1 to N) sum := sum + 1 end for end for

  • Assembly code

sub AX,AX ; AX := 0 mov DX,M

  • uter_loop:

mov CX,N inner_loop: inc AX loop inner_loop dec DX jnz outer_loop exit_loops: mov sum,AX

slide-10
SLIDE 10

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 10

Status Flags (cont’d)

  • Two observations

∗ loop instruction is equivalent to

dec DX jnz outer_loop » This two instruction sequence is more efficient than the loop instruction (takes less time to execute) » loop instruction does not affect any flags!

∗ This two instruction sequence is better than initializing DX = 1 and executing

inc DX cmp DX,M jle inner_loop

slide-11
SLIDE 11

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 11

Status Flags (cont’d)

  • Carry Flag

∗ Records the fact that the result of an arithmetic

  • peration on unsigned numbers is out of range

∗ The carry flag is set in the following examples

mov AL,0FH mov AX,12AEH add AL,0F1H sub AX,12AFH

∗ Range of 8-, 16-, and 32-bit unsigned numbers

size range 8 bits 0 to 255 (28 − 1) 16 bits 0 to 65,535 (216 − 1) 32 bits 0 to 4,294,967,295 (232−1)

slide-12
SLIDE 12

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 12

Status Flags (cont’d)

∗ Carry flag is not set by inc and dec instructions

» The carry flag is not set in the following examples mov AL,0FFH mov AX,0 inc AL dec AX

∗ Related instructions

jc jump if carry (jump if CF = 1) jnc jump if no carry (jump if CF = 0)

∗ Carry flag can be manipulated directly using

stc set carry flag (set CF to 1) clc clear carry flag (clears CF to 0) cmc complement carry flag (inverts CF value)

slide-13
SLIDE 13

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 13

Status Flags (cont’d)

  • Uses of carry flag

∗ To propagate carry/borrow in multiword addition/subtraction

1 ← ← ← ← carry from lower 32 bits x = 3710 26A8 1257 9AE7H y = 489B A321 FE60 4213H 7FAB C9CA 10B7 DCFAH

∗ To detect overflow/underflow condition

» In the last example, carry out of leftmost bit indicates overflow

∗ To test a bit using the shift/rotate instructions

» Bit shifted/rotated out is captured in the carry flag » We can use jc/jnc to test whether this bit is 1 or 0

slide-14
SLIDE 14

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 14

Status Flags (cont’d)

  • Overflow flag

∗ Indicates out-of-range result on signed numbers

– Signed number counterpart of the carry flag

∗ The following code sets the overflow flag but not the carry flag

mov AL,72H ; 72H = 114D add AL,0EH ; 0EH = 14D

∗ Range of 8-, 16-, and 32-bit signed numbers

size range 8 bits − 128 to +127 27 to (27 − 1) 16 bits − 32,768 to +32,767 215 to (215 − 1) 32 bits −2,147,483,648 to +2,147,483,647 231 to (231 − 1)

slide-15
SLIDE 15

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 15

Status Flags (cont’d)

Unsigned interpretation mov AL,72H add AL,0EH jc overflow no_overflow: (no overflow code here) . . . .

  • verflow:

(overflow code here) . . . . Signed interpretation mov AL,72H add AL,0EH jo overflow no_overflow: (no overflow code here) . . . .

  • verflow:

(overflow code here) . . . .

  • Signed or unsigned: How does the system know?

∗ The processor does not know the interpretation ∗ It sets carry and overflow under each interpretation

slide-16
SLIDE 16

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 16

Status Flags (cont’d)

∗ Related instructions

jo jump if overflow (jump if OF = 1) jno jump if no overflow (jump if OF = 0)

∗ There is a special software interrupt instruction

into interrupt on overflow

Details on this instruction in Chapter 20

  • Uses of overflow flag

∗ Main use

» To detect out-of-range result on signed numbers

slide-17
SLIDE 17

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 17

Status Flags (cont’d)

  • Sign flag

∗ Indicates the sign of the result

– Useful only when dealing with signed numbers – Simply a copy of the most significant bit of the result

∗ Examples

mov AL,15 mov AL,15 add AL,97 sub AL,97 clears the sign flag as sets the sign flag as the result is 112 the result is −82 (or 0111000 in binary) (or 10101110 in binary)

∗ Related instructions

js jump if sign (jump if SF = 1) jns jump if no sign (jump if SF = 0)

slide-18
SLIDE 18

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 18

Status Flags (cont’d)

  • Consider the count down loop:

for (i = M downto 0) <loop body> end for

  • If we don’t use the jns, we

need cmp as shown below: cmp CX,0 jl for_loop The count down loop can be implemented as mov CX,M for_loop: <loop body> dec CX jns for_loop

  • Usage of sign flag

∗ To test the sign of the result ∗ Also useful to efficiently implement countdown loops

slide-19
SLIDE 19

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 19

Status Flags (cont’d)

  • Auxiliary flag

∗ Indicates whether an operation produced a carry or borrow in the low-order 4 bits (nibble) of 8-, 16-, or 32- bit operands (i.e. operand size doesn’t matter) ∗ Example

1 ← ← ← ← carry from lower 4 bits mov AL,43 43D = 0010 1011B add AL,94 94D = 0101 1110B 137D = 1000 1001B » As there is a carry from the lower nibble, auxiliary flag is set

slide-20
SLIDE 20

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 20

Status Flags (cont’d)

∗ Related instructions

» No conditional jump instructions with this flag » Arithmetic operations on BCD numbers use this flag aaa ASCII adjust for addition aas ASCII adjust for subtraction aam ASCII adjust for multiplication aad ASCII adjust for division daa Decimal adjust for addition das Decimal adjust for subtraction – Appendices I has more details on these instructions

∗ Usage

» Main use is in performing arithmetic operations on BCD numbers

slide-21
SLIDE 21

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 21

Status Flags (cont’d)

  • Parity flag

∗ Indicates even parity of the low 8 bits of the result

– PF is set if the lower 8 bits contain even number 1 bits – For 16- and 32-bit values, only the least significant 8 bits are considered for computing parity value

∗ Example

mov AL,53 53D = 0011 0101B add AL,89 89D = 0101 1001B 142D = 1000 1110B » As the result has even number of 1 bits, parity flag is set

∗ Related instructions

jp jump on even parity (jump if PF = 1) jnp jump on odd parity (jump if PF = 0)

slide-22
SLIDE 22

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 22

Status Flags (cont’d)

∗ Usage of parity flag

» Useful in writing data encoding programs » Example: Encodes the byte in AL (MSB is the parity bit) parity_encode PROC shl AL jp parity_zero stc ; CF = 1 jmp move_parity_bit parity_zero: clc ; CF = 0 move_parity_bit: rcr AL parity_encode ENDP

slide-23
SLIDE 23

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 23

Arithmetic Instructions

  • Pentium provides several arithmetic instructions

that operate on 8-, 16- and 32-bit operands

» Addition: add, adc, inc » Subtraction: sub, sbb, dec, neg, cmp » Multiplication: mul, imul » Division: div, idiv » Related instructions: cbw, cwd, cdq, cwde, movsx, movzx

∗ There are few other instructions such as aaa, aas, etc. that operate on decimal numbers

» See Appendix I for details

Discussed in Chapter 9

slide-24
SLIDE 24

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 24

Arithmetic Instructions (cont’d)

  • Multiplication

∗ More complicated than add/sub

» Produces double-length results – E.g. Multiplying two 8 bit numbers produces a 16-bit result » Cannot use a single multiply instruction for signed and unsigned numbers – add and sub instructions work both on signed and unsigned numbers – For multiplication, we need separate instructions mul for unsigned numbers imul for signed numbers

slide-25
SLIDE 25

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 25

Arithmetic Instructions (cont’d)

  • Unsigned multiplication

mul source

» Depending on the source operand size, the location of the

  • ther source operand and destination are selected
slide-26
SLIDE 26

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 26

Arithmetic Instructions (cont’d)

∗ Example

mov AL,10 mov DL,25 mul DL

produces 250D in AX register (result fits in AL)

  • The imul instruction can use the same syntax

» Also supports other formats

∗ Example

mov DL,0FFH ; DL = -1 mov AL,0BEH ; AL = -66 imul DL

produces 66D in AX register (again, result fits in AL)

slide-27
SLIDE 27

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 27

Arithmetic Instructions (cont’d)

  • Division instruction

∗ Even more complicated than multiplication

» Produces two results – Quotient – Remainder » In multiplication, using a double-length register, there will not be any overflow – In division, divide overflow is possible Pentium provides a special software interrupt when a divide overflow occurs

∗ Two instructions as in multiplication

div source for unsigned numbers idiv source for signed numbers

slide-28
SLIDE 28

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 28

Arithmetic Instructions (cont’d)

  • Dividend is twice the size of the divisor
  • Dividend is assumed to be in

∗ AX (8-bit divisor) ∗ DX:AX (16-bit divisor) ∗ EDX:EAX (32-bit divisor)

slide-29
SLIDE 29

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 29

Arithmetic Instructions (cont’d)

slide-30
SLIDE 30

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 30

Arithmetic Instructions (cont’d)

  • Example

mov AX,251 mov CL,12 div CL

produces 20D in AL and 11D as remainder in AH

  • Example

sub DX,DX ; clear DX mov AX,141BH ; AX = 5147D mov CX,012CH ; CX = 300D div CX

produces 17D in AX and 47D as remainder in DX

slide-31
SLIDE 31

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 31

Arithmetic Instructions (cont’d)

  • Signed division requires some help

» We extended an unsigned 16 bit number to 32 bits by placing zeros in the upper 16 bits » This will not work for signed numbers – To extend signed numbers, you have to copy the sign bit into those upper bit positions

∗ Pentium provides three instructions in aiding sign extension

» All three take no operands cbw converts byte to word (extends AL into AH) cwd converts word to doubleword (extends AX into DX) cdq converts doubleword to quadword (extends EAX into EDX)

slide-32
SLIDE 32

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 32

Arithmetic Instructions (cont’d)

∗ Some additional related instructions » Sign extension

cwde converts word to doubleword (extends AX into EAX)

» Two move instructions

movsx dest,src (move sign-extended src to dest) movzx dest,src (move zero-extended src to dest)

» For both move instructions, dest has to be a register » The src operand can be in a register or memory

– If src is 8-bits, dest must be either a 16- or 32-bit register – If src is 16-bits, dest must be a 32-bit register

slide-33
SLIDE 33

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 33

Arithmetic Instructions (cont’d)

  • Example

mov AL,-95 cbw ; AH = FFH mov CL,12 idiv CL

produces −7D in AL and −11D as remainder in AH

  • Example

mov AX,-5147 cwd ; DX := FFFFH mov CX,300 idiv CX

produces −17D in AX and −47D as remainder in DX

slide-34
SLIDE 34

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 34

Arithmetic Instructions (cont’d)

  • Use of Shifts for Multiplication and Division

∗ Shifts are more efficient ∗ Example: Multiply AX by 32 mov CX,32 imul CX takes 12 clock cycles ∗ Using sal AX,5 takes just one clock cycle

slide-35
SLIDE 35

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 35

Application Examples

  • PutInt8 procedure

∗ To display a number, repeatedly divide it by 10 and display the remainders obtained

quotient remainder 108/10 10 8 10/10 1 1/10 1

∗ To display digits, they must be converted to their character form » This means simply adding the ASCII code for zero line 24: add AH,’0’

slide-36
SLIDE 36

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 36

Application Examples (cont’d)

  • GetInt8 procedure

∗ To read a number, read each digit character

» Convert to its numeric equivalent » Multiply the running total by 10 and add this digit

Input digit Numeric value (N) Number := Number*10 + N Initial value

  • ‘1’

1 0 * 10 + 1 = 1 ‘5’ 5 1 * 10 + 5 = 15 ‘8’ 8 15 * 10 + 8 = 158

slide-37
SLIDE 37

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 37

Indirect Jumps

  • Direct jump

∗ Target address is encoded in the instruction itself

  • Indirect jump

∗ Introduces a level of indirection

» Address is specified either through memory of a general- purpose register

∗ Example jmp CX

jumps to the address in CX

∗ Address is absolute

» Not relative as in direct jumps

slide-38
SLIDE 38

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 38

Indirect Jumps (cont’d)

Switch (ch) { Case ’0’: count[0]++; break; Case ’1’: count[1]++; break; Case ’2’: count[2]++; break; Case ’3’: count[3]++; break; Default: count[3]++; }

slide-39
SLIDE 39

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 39

Indirect Jumps (cont’d)

Turbo C assembly code for the switch statement

_main PROC NEAR . . . mov AL,ch cbw sub AX,48 ; 48 = ASCII for 0 mov BX,AX cmp BX,3 ja default shl BX,1 ; BX = BX * 2 jmp WORD PTR CS:jump_table[BX]

Indirect jump

slide-40
SLIDE 40

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 40

Indirect Jumps (cont’d)

case_0: inc WORD PTR [BP-10] jmp SHORT end_switch case_1: inc WORD PTR [BP-8] jmp SHORT end_switch case_2: inc WORD PTR [BP-6] jmp SHORT end_switch case_3: inc WORD PTR [BP-4] jmp SHORT end_switch default: inc WORD PTR [BP-2] end_switch: . . . _main ENDP

slide-41
SLIDE 41

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 41

Indirect Jumps (cont’d)

jump_table LABEL WORD DW case_0 DW case_1 DW case_2 DW case_3 . . .

  • Indirect jump uses this table to jump to the appropriate

case routine

  • The indirect jump instruction uses segment override prefix

to refer to the jump_table in the CODE segment Jump table for the indirect jump

slide-42
SLIDE 42

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 42

Conditional Jumps

  • Three types of conditional jumps

∗ Jumps based on the value of a single flag

» Arithmetic flags such as zero, carry can be tested using these instructions

∗ Jumps based on unsigned comparisons

» Operands of cmp instruction are treated as unsigned numbers

∗ Jumps based on signed comparisons

» Operands of cmp instruction are treated as signed numbers

slide-43
SLIDE 43

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 43

Jumps Based on Single Flags

Testing for zero

jz jump if zero jumps if ZF = 1 je jump if equal jumps if ZF = 1 jnz jump if not zero jumps if ZF = 0 jne jump if not equal jumps if ZF = 0 jcxz jump if CX = 0 jumps if CX = 0 (Flags are not tested)

slide-44
SLIDE 44

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 44

Jumps Based on Single Flags (cont’d)

Testing for carry

jc jump if carry jumps if CF = 1 jnc jump if no carry jumps if CF = 0

Testing for overflow

jo jump if overflow jumps if OF = 1 jno jump if no overflow jumps if OF = 0

Testing for sign

js jump if negative jumps if SF = 1 jns jump if not negative jumps if SF = 0

slide-45
SLIDE 45

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 45

Jumps Based on Single Flags (cont’d)

Testing for parity

jp jump if parity jumps if PF = 1 jpe jump if parity jumps if PF = 1 is even jnp jump if not parity jumps if PF = 0 jpo jump if parity jumps if PF = 0 is odd

slide-46
SLIDE 46

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 46

Jumps Based on Unsigned Comparisons

Mnemonic Meaning Condition je jump if equal ZF = 1 jz jump if zero ZF = 1 jne jump if not equal ZF = 0 jnz jump if not zero ZF = 0 ja jump if above CF = ZF = 0 jnbe jump if not below CF = ZF = 0

  • r equal
slide-47
SLIDE 47

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 47

Jumps Based on Unsigned Comparisons

Mnemonic Meaning Condition jae jump if above CF = 0

  • r equal

jnb jump if not below CF = 0 jb jump if below CF = 1 jnae jump if not above CF = 1

  • r equal

jbe jump if below CF=1 or ZF=1

  • r equal

jna jump if not above CF=1 or ZF=1

slide-48
SLIDE 48

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 48

Jumps Based on Signed Comparisons

Mnemonic Meaning Condition je jump if equal ZF = 1 jz jump if zero ZF = 1 jne jump if not equal ZF = 0 jnz jump if not zero ZF = 0 jg jump if greater ZF=0 & SF=OF jnle jump if not less ZF=0 & SF=OF

  • r equal
slide-49
SLIDE 49

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 49

Jumps Based on Signed Comparisons (cont’d)

Mnemonic Meaning Condition jge jump if greater SF = OF

  • r equal

jnl jump if not less SF = OF jl jump if less SF ≠ OF jnge jump if not greater SF ≠ OF

  • r equal

jle jump if less ZF=1 or SF ≠ OF

  • r equal

jng jump if not greater ZF=1 or SF ≠ OF

slide-50
SLIDE 50

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 50

Implementing HLL Decision Structures

  • High-level language decision structures can be

implemented in a straightforward way

  • See Section 12.4 for examples that implement

∗ if-then-else ∗ if-then-else with a relational operator ∗ if-then-else with logical operator AND ∗ if-then-else with logical operator OR ∗ while loop ∗ repeat-until loop ∗ for loops

slide-51
SLIDE 51

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 51

Logical Expressions in HLLs

  • Representation of Boolean data

∗ Only a single bit is needed to represent Boolean data ∗ Usually a single byte is used

» For example, in C – All zero bits represents false – A non-zero value represents true

  • Logical expressions

∗ Logical instructions AND, OR, etc. are used

  • Bit manipulation

∗ Logical, shift, and rotate instructions are used

slide-52
SLIDE 52

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 52

Evaluation of Logical Expressions

  • Two basic ways

∗ Full evaluation

» Entire expression is evaluated before assigning a value » PASCAL uses full evaluation

∗ Partial evaluation

» Assigns as soon as the final outcome is known without blindly evaluating the entire logical expression » Two rules help: – cond1 AND cond2 If cond1 is false, no need to evaluate cond2 – cond1 OR cond2 If cond1 is true, no need to evaluate cond2

slide-53
SLIDE 53

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 53

Evaluation of Logical Expressions (cont’d)

  • Partial evaluation

∗ Used by C

  • Useful in certain cases to avoid run-time errors
  • Example

if ((X > 0) AND (Y/X > 100))

∗ If x is 0, full evaluation results in divide error ∗ Partial evaluation will not evaluate (Y/X > 100) if X = 0

  • Partial evaluation is used to test if a pointer value

is NULL before accessing the data it points to

slide-54
SLIDE 54

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 54

Bit Instructions

  • Bit Test and Modify Instructions

∗ Four bit test instructions ∗ Each takes the position of the bit to be tested Instruction Effect on the selected bit bt (Bit Test) No effect bts (Bit Test and Set) selected bit ← 1 btr (Bit Test and Reset) selected bit ← 0 btc selected bit ← NOT(selected bit)

(Bit Test and Complement)

slide-55
SLIDE 55

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 55

Bit Instructions (cont’d)

  • All four instructions have the same format
  • We use bt to illustrate the format

bt operand,bit_pos

∗ operand is word or doubleword » Can be in a register or memory ∗ bit_pos indicates the position of the bit to be tested » Can be an immediate value or in a 16/32-bit register

  • Instructions in this group affect only the carry flag

» Other five flags are undefined

slide-56
SLIDE 56

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 56

Bit Scan Instructions

  • These instructions scan the operand for a 1 bit

∗ return the bit position in a register

  • Two instructions

bsf dest_reg,operand ;bit scan forward bsr dest_reg,operand ;bit scan reverse » operand can be a word or doubleword in a register or memory » dest_reg receives the bit position – Must be a 16- or 32-bit register

∗ Only ZF is updated (other five flags undefined)

– ZF = 1 if all bits of operand are 0 – ZF = 0 otherwise (position of first 1 bit in dest_reg)

slide-57
SLIDE 57

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 57

Illustrative Examples

  • Example 1

∗ Linear search of an integer array

  • Example 2

∗ Selection sort on an integer array

  • Example 3

∗ Multiplication using shift and add operations

» Multiplies two unsigned 8-bit numbers – Uses a loop that iterates 8 times

  • Example 4

∗ Multiplication using bit instructions

slide-58
SLIDE 58

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 58

String Representation

  • Two types

∗ Fixed-length ∗ Variable-length

  • Fixed length strings

∗ Each string uses the same length

» Shorter strings are padded (e.g. by blank characters) » Longer strings are truncated

∗ Selection of string length is critical

» Too large ==> inefficient » Too small ==> truncation of larger strings

slide-59
SLIDE 59

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 59

String Representation (cont’d)

  • Variable-length strings

∗ Avoids the pitfalls associated with fixed-length strings

  • Two ways of representation

∗ Explicitly storing string length (used in PASCAL)

string DB ‘Error message’ str_len DW $-string – $ represents the current value of the location counter $ points to the byte after the last character of string

∗ Using a sentinel character (used in C)

» Uses NULL character – Such NULL-terminated strings are called ASCIIZ strings

slide-60
SLIDE 60

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 60

String Instructions

  • Five string instructions

LODS LOaD String source STOS STOre String destination MOVS MOVe String source & destination CMPS CoMPare String source & destination SCAS SCAn String destination

  • Specifying operands

∗ 32-bit segments:

DS:ESI = source operand ES:EDI = destination operand

∗ 16-bit segments:

DS:SI = source operand ES:DI = destination operand

slide-61
SLIDE 61

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 61

String Instructions (cont’d)

  • Each string instruction

∗ Can operate on 8-, 16-, or 32-bit operands ∗ Updates index register(s) automatically

» Byte operands: increment/decrement by 1 » Word operands: increment/decrement by 2 » Doubleword operands: increment/decrement by 4

  • Direction flag

∗ DF = 0: Forward direction (increments index registers) ∗ DF = 1: Backward direction (decrements index registers)

  • Two instructions to manipulate DF

std set direction flag (DF = 1) cld clear direction flag (DF = 0)

slide-62
SLIDE 62

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 62

Repetition Prefixes

  • String instructions can be repeated by using a

repetition prefix

  • Two types

∗ Unconditional repetition

rep REPeat

∗ Conditional repetition

repe/repz REPeat while Equal REPeat while Zero repne/repnz REPeat while Not Equal REPeat while Not Zero

slide-63
SLIDE 63

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 63

Repetition Prefixes (cont’d)

rep

while (CX ≠ 0) execute the string instruction CX := CX−1 end while

  • CX register is first checked

∗ If zero, string instruction is not executed at all ∗ More like the JCXZ instruction

slide-64
SLIDE 64

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 64

Repetition Prefixes (cont’d)

repe/repz

while (CX ≠ 0) execute the string instruction CX := CX−1 if (ZF = 0) then exit loop end if end while

  • Useful with cmps and scas string instructions
slide-65
SLIDE 65

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 65

Repetition Prefixes (cont’d)

repne/repnz

while (CX ≠ 0) execute the string instruction CX := CX−1 if (ZF = 1) then exit loop end if end while

slide-66
SLIDE 66

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 66

String Move Instructions

  • Three basic instructions

∗ movs, lods, and stos Move a string (movs)

  • Format

movs dest_string,source_string movsb ; operands are bytes movsw ; operands are words movsd ; operands are doublewords

  • First form is not used frequently

∗ Source and destination pointed by DS:(E)SI and ES:(E)DI, respectively

slide-67
SLIDE 67

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 67

String Move Instructions (cont’d)

movsb --- move a byte string ES:DI := (DS:SI) ; copy a byte if (DF=0) ; forward direction then SI := SI+1 DI := DI+1 else ; backward direction SI := SI−1 DI := DI−1 end if Flags affected: none

slide-68
SLIDE 68

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 68

String Move Instructions (cont’d)

Example

.DATA string1 DB 'The original string',0 strLen EQU $ - string1 string2 DB 80 DUP (?) .CODE .STARTUP mov AX,DS ; set up ES mov ES,AX ; to the data segment mov CX,strLen ; strLen includes NULL mov SI,OFFSET string1 mov DI,OFFSET string2 cld ; forward direction rep movsb

slide-69
SLIDE 69

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 69

String Move Instructions (cont’d)

Load a String (LODS)

  • Copies the value from the source string at

DS:(E)SI to

∗ AL (lodsb) ∗ AX (lodsw) ∗ EAX (lodsd)

  • Repetition prefix does not make sense

∗ It leaves only the last value in AL, AX, or EAX register

slide-70
SLIDE 70

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 70

String Move Instructions (cont’d)

lodsb --- load a byte string AL := (DS:SI) ; copy a byte if (DF=0) ; forward direction then SI := SI+1 else ; backward direction SI := SI−1 end if Flags affected: none

slide-71
SLIDE 71

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 71

String Move Instructions (cont’d)

Store a String (STOS)

  • Performs the complementary operation
  • Copies the value in

» AL (lodsb) » AX (lodsw) » EAX (lodsd)

to the destination string at ES:(E)DI

  • Repetition prefix can be used to initialize a block
  • f memory
slide-72
SLIDE 72

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 72

String Move Instructions (cont’d) stosb --- store a byte string

ES:DI := AL ; copy a byte if (DF=0) ; forward direction then DI := DI+1 else ; backward direction DI := DI−1 end if

Flags affected: none

slide-73
SLIDE 73

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 73

String Move Instructions (cont’d)

Example: Initializes array1 with -1

.DATA

array1 DW 100 DUP (?) .CODE .STARTUP mov AX,DS ; set up ES mov ES,AX ; to the data segment mov CX,100 mov DI,OFFSET array1 mov AX,-1 cld ; forward direction rep stosw

slide-74
SLIDE 74

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 74

String Move Instructions (cont’d)

  • In general, repeat prefixes are not useful with

lods and stos

  • Used in a loop to do conversions while copying

mov CX,strLen mov SI,OFFSET string1 mov DI,OFFSET string2 cld ; forward direction loop1: lodsb

  • r AL,20H

stosb loop loop1 done:

slide-75
SLIDE 75

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 75

String Compare Instruction cmpsb --- compare two byte strings

Compare two bytes at DS:SI and ES:DI and set flags if (DF=0) ; forward direction then SI := SI+1 DI := DI+1 else ; backward direction SI := SI−1 DI := DI−1 end if

Flags affected: As per cmp instruction (DS:SI)−(ES:DI)

slide-76
SLIDE 76

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 76

String Compare Instruction (cont’d)

.DATA string1 DB 'abcdfghi',0 strLen EQU $ - string1 string2 DB 'abcdefgh',0 .CODE .STARTUP mov AX,DS ; set up ES mov ES,AX ; to the data segment mov CX,strLen mov SI,OFFSET string1 mov DI,OFFSET string2 cld ; forward direction repe cmpsb dec SI dec DI ; leaves SI & DI pointing to the last character that differs

slide-77
SLIDE 77

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 77

String Compare Instruction (cont’d)

.DATA string1 DB 'abcdfghi',0 strLen EQU $ - string1 - 1 string2 DB 'abcdefgh',0 .CODE .STARTUP mov AX,DS ; set up ES mov ES,AX ; to the data segment mov CX,strLen mov SI,OFFSET string1 + strLen - 1 mov DI,OFFSET string2 + strLen - 1 std ; backward direction repne cmpsb inc SI ; Leaves SI & DI pointing to the first character that matches inc DI ; in the backward direction

slide-78
SLIDE 78

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 78

String Scan Instruction

scasb --- Scan a byte string Compare AL to the byte at ES:DI and set flags if (DF=0) ; forward direction then DI := DI+1 else ; backward direction DI := DI−1 end if Flags affected: As per cmp instruction (DS:SI)-(ES:DI)

  • scasw uses AX and scasd uses EAX registers instead of

AL

slide-79
SLIDE 79

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 79

String Scan Instruction (cont’d)

.DATA string1 DB 'abcdefgh',0 strLen EQU $ - string1 .CODE .STARTUP mov AX,DS ; set up ES mov ES,AX ; to the data segment mov CX,strLen mov DI,OFFSET string1 mov AL,'e' ; character to be searched cld ; forward direction repne scasb dec DI ; leaves DI pointing to e in string1

Example 1

slide-80
SLIDE 80

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 80

String Scan Instruction (cont’d)

.DATA string1 DB ' abc',0 strLen EQU $ - string1 .CODE .STARTUP mov AX,DS ; set up ES mov ES,AX ; to the data segment mov CX,strLen mov DI,OFFSET string1 mov AL,' ' ; character to be searched cld ; forward direction repe scasb dec DI ; leaves DI pointing to the first non-blank character a

Example 2

slide-81
SLIDE 81

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 81

Illustrative Examples

LDS and LES instructions

  • String pointer can be loaded into DS/SI or ES/DI

register pair by using lds or les instructions

  • Syntax

lds register,source les register,source ∗ register should be a 16-bit register ∗ source is a pointer to a 32-bit memory operand

  • register is typically SI in lds and DI in les
slide-82
SLIDE 82

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 82

Illustrative Examples (cont’d)

  • Actions of lds and les

lds

register := (source) DS := (source+2)

les

register := (source) ES := (source+2)

  • Pentium also supports lfs, lgs, and lss to load

the other segment registers

slide-83
SLIDE 83

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 83

Illustrative Examples (cont’d)

  • Seven popular string processing routines are given

as examples in string.asm

∗ str_len ∗ str_mov ∗ str-cpy ∗ str_cat ∗ str_cmp ∗ str_chr ∗ str_cnv Given in the text

slide-84
SLIDE 84

2003

To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

 S. Dandamudi Chapter 12: Page 84

Indirect Procedure Call

  • Direct procedure calls specify the offset of the first

instruction of the called procedure

  • In indirect procedure call, the offset is specified

through memory or a register

∗ If BX contains pointer to the procedure, we can use call BX ∗ If the word in memory at target_proc_ptr contains the offset of the called procedure, we can use call target_proc_ptr

  • These are similar to direct and indirect jumps

Last slide