• 沒有找到結果。

Kip R. Irvine

N/A
N/A
Protected

Academic year: 2022

Share "Kip R. Irvine"

Copied!
32
0
0

加載中.... (立即查看全文)

全文

(1)

Assembly Language for Intel

Assembly Language for Intel - - Based Based Computers, 4

Computers, 4 th th Edition Edition

Chapter 6: Conditional Processing

Kip R. Irvine

(2)

Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003.

2

Chapter Overview Chapter Overview

• Boolean and Comparison Instructions

• Conditional Jumps

• Conditional Loop Instructions

• Conditional Structures

• Application: Finite-State Machines

• Using the .IF Directive

(3)

Boolean and Comparison Instructions Boolean and Comparison Instructions

• CPU Status Flags

• AND Instruction

• OR Instruction

• XOR Instruction

• NOT Instruction

• Applications

• TEST Instruction

• CMP Instruction

(4)

Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003.

4

Status Flags

Status Flags - - Review Review

• The Zero flag is set when the result of an operation equals zero.

• The Carry flag is set when an instruction generates a result that is too large (or too small) for the destination operand.

• The Sign flag is set if the destination operand is negative, and it is clear if the destination operand is positive.

• The Overflow flag is set when an instruction generates an invalid signed result.

• Less important:

• The Parity flag is set when an instruction generates an even number of 1 bits in the low byte of the destination operand.

• The Auxiliary Carry flag is set when an operation produces a carry

out from bit 3 to bit 4.

(5)

AND Instruction AND Instruction

• Performs a Boolean AND operation between each pair of matching bits in two operands

• Syntax:

AND destination, source

(same operand types as MOV)

0 0 1 1 1 0 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 0 1 1

AND

unchanged cleared

AND

(6)

Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003.

6

OR Instruction OR Instruction

• Performs a Boolean OR operation between each pair of matching bits in two operands

• Syntax:

OR destination, source

OR

0 0 1 1 1 0 1 1 0 0 0 0 1 1 1 1 0 0 1 1 1 1 1 1

OR

set

unchanged

(7)

XOR Instruction XOR Instruction

• Performs a Boolean exclusive-OR operation between each pair of matching bits in two operands

• Syntax:

XOR destination, source XOR

0 0 1 1 1 0 1 1 0 0 0 0 1 1 1 1 0 0 1 1 0 1 0 0

XOR

inverted unchanged

XOR is a useful way to toggle (invert) the bits in an operand.

(8)

Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003.

8

NOT Instruction NOT Instruction

• Performs a Boolean NOT operation on a single destination operand

• Syntax:

NOT destination NOT

0 0 1 1 1 0 1 1 1 1 0 0 0 1 0 0

NOT

inverted

(9)

Applications

Applications (1 of 5) (1 of 5)

mov al,'a' ; AL = 01100001b

and al,11011111b ; AL = 01000001b

• Task: Convert the character in AL to upper case.

• Solution: Use the AND instruction to clear bit 5.

(10)

Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003.

10

Applications

Applications (2 of 5) (2 of 5)

mov al,6 ; AL = 00000110b

or al,00110000b ; AL = 00110110b

• Task: Convert a binary decimal byte into its equivalent ASCII decimal digit.

• Solution: Use the OR instruction to set bits 4 and 5.

The ASCII digit '6' = 00110110b

(11)

Applications

Applications (3 of 5) (3 of 5)

mov ax,40h ; BIOS segment

mov ds,ax

mov bx,17h ; keyboard flag byte

or BYTE PTR [bx],01000000b ; CapsLock on

• Task: Turn on the keyboard CapsLock key

• Solution: Use the OR instruction to set bit 6 in the keyboard flag byte at 0040:0017h in the BIOS data area.

This code only runs in Real-address mode, and it does not

work under Windows NT, 2000, or XP.

(12)

Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003.

12

Applications

Applications (4 of 5) (4 of 5)

mov ax,wordVal

and ax,1 ; low bit set?

jz EvenValue ; jump if Zero flag set

• Task: Jump to a label if an integer is even.

• Solution: AND the lowest bit with a 1. If the result is Zero, the number was even.

JZ (jump if Zero) is covered in Section 6.3.

Your turn: Write code that jumps to a label if an integer is

negative.

(13)

Applications

Applications (5 of 5) (5 of 5)

or al,al

jnz IsNotZero ; jump if not zero

• Task: Jump to a label if the value in AL is not zero.

• Solution: OR the byte with itself, then use the JNZ (jump if not zero) instruction.

ORing any number with itself does not change its value.

(14)

Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003.

14

TEST Instruction TEST Instruction

• Performs a nondestructive AND operation between each pair of matching bits in two operands

• No operands are modified, but the Zero flag is affected.

• Example: jump to a label if either bit 0 or bit 1 in AL is set.

test al,00000011b jnz ValueFound

• Example: jump to a label if neither bit 0 nor bit 1 in AL is set.

test al,00000011b

jz ValueNotFound

(15)

CMP Instruction

CMP Instruction (1 of 3) (1 of 3)

• 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

mov al,5

cmp al,5 ; Zero flag set

• Example: destination < source mov al,4

cmp al,5 ; Carry flag set

(16)

Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003.

16

CMP Instruction

CMP Instruction (2 of 3) (2 of 3)

• Example: destination > source

mov al,6

cmp al,5 ; ZF = 0, CF = 0

(both the Zero and Carry flags are clear)

The comparisons shown so far were unsigned.

(17)

CMP Instruction

CMP Instruction (3 of 3) (3 of 3)

• Example: destination > source

mov al,5

cmp al,-2 ; Sign flag == Overflow flag

The comparisons shown here are performed with signed integers.

• Example: destination < source mov al,-1

cmp al,5 ; Sign flag != Overflow flag

(18)

Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003.

18

Conditional Jumps Conditional Jumps

• Jumps Based On . . .

• Specific flags

• Equality

• Unsigned comparisons

• Signed Comparisons

• Applications

• Encrypting a String

• Bit Test (BT) Instruction

(19)

J J cond cond Instruction Instruction

• A conditional jump instruction branches to a label when specific register or flag conditions are met

• Examples:

• 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

(20)

Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003.

20

Jumps Based on Specific Flags

Jumps Based on Specific Flags

(21)

Jumps Based on Equality

Jumps Based on Equality

(22)

Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003.

22

Jumps Based on Unsigned Comparisons

Jumps Based on Unsigned Comparisons

(23)

Jumps Based on Signed Comparisons

Jumps Based on Signed Comparisons

(24)

Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003.

24

Applications

Applications (1 of 5) (1 of 5)

cmp eax,ebx ja Larger

• Task: Jump to a label if unsigned EAX is greater than EBX

• Solution: Use CMP, followed by JA

cmp eax,ebx jg Greater

• Task: Jump to a label if signed EAX is greater than EBX

• Solution: Use CMP, followed by JG

(25)

Applications

Applications (2 of 5) (2 of 5)

cmp eax,Val1

jbe L1 ; below or equal

• Jump to label L1 if unsigned EAX is less than or equal to Val1

cmp eax,Val1 jle L1

• Jump to label L1 if signed EAX is less than or equal to Val1

(26)

Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003.

26

Applications

Applications (3 of 5) (3 of 5)

mov Large,bx cmp ax,bx jna Next

mov Large,ax Next:

• Compare unsigned AX to BX, and copy the larger of the two into a variable named Large

mov Small,ax cmp bx,ax jnl Next

mov Small,bx Next:

• Compare signed AX to BX, and copy the smaller of the two

into a variable named Small

(27)

Applications

Applications (4 of 5) (4 of 5)

cmp WORD PTR [esi],0 je L1

• Jump to label L1 if the memory word pointed to by ESI equals Zero

test DWORD PTR [edi],1 jz L2

• Jump to label L2 if the doubleword in memory pointed to by

EDI is even

(28)

Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003.

28

Applications

Applications (5 of 5) (5 of 5)

and al,00001011b ; clear unwanted bits cmp al,00001011b ; check remaining bits

je L1 ; all set? jump to L1

• Task: Jump to label L1 if bits 0, 1, and 3 in AL are all set.

• Solution: Clear all bits except bits 0, 1,and 3. Then

compare the result with 00001011 binary.

(29)

Your turn . . . Your turn . . .

• Write code that jumps to label L1 if either bit 4, 5, or 6 is set in the BL register.

• Write code that jumps to label L1 if bits 4, 5, and 6 are all set in the BL register.

• Write code that jumps to label L2 if AL has even parity.

• Write code that jumps to label L3 if EAX is negative.

• Write code that jumps to label L4 if the expression

(EBX – ECX) is greater than zero.

(30)

Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003.

30

Encrypting a String Encrypting a String

KEY = 239 .data

buffer BYTE BUFMAX DUP(0) bufSize DWORD ?

.code

mov ecx,bufSize ; loop counter

mov esi,0 ; index 0 in buffer L1:

xor buffer[esi],KEY ; translate a byte inc esi ; point to next byte loop L1

The following loop uses the XOR instruction to transform every

character in a string into a new value.

(31)

String Encryption Program String Encryption Program

• Tasks:

• Input a message (string) from the user

• Encrypt the message

• Display the encrypted message

• Decrypt the message

• Display the decrypted message

View the Encrypt.asm program's source code. Sample output:

Enter the plain text: Attack at dawn.

Cipher text: «¢¢Äîä-Ä¢-ïÄÿü-Gs

(32)

Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003.

32

BT (Bit Test) Instruction 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

參考文獻

相關文件

First, in the Intel documentation, the encoding of the MOV instruction that moves an immediate word into a register is B8 +rw dw, where +rw indicates that a register code (0-7) is to

Second, a conditional jump instruction tests the flags and change the execution flow accordingly...

– The Parity flag is set when an instruction generates an even number of 1 bits in the low byte of the destination operand.. – The Auxiliary Carry flag is set when an

• A conditional jump instruction branches to a label when specific register or flag conditions are met.

 Calling program stores return address in a specific register.

In a nonparametric setting, we discuss identifiability of the conditional and un- conditional survival and hazard functions when the survival times are subject to dependent

Recycling Techniques are Available to Address Specific Pavement Distress and/or Pavement Structural Requirement.. Introduction to Asphalt Introduction

request even if the header is absent), O (optional), T (the header should be included in the request if a stream-based transport is used), C (the presence of the header depends on