26
Lecture 12 Lecture 12 Integer Arithmetic Integer Arithmetic Assembly Language for Intel-Based Computers, 4th edition Kip R. Irvine

Lecture 12 Integer Arithmetic

Embed Size (px)

DESCRIPTION

Lecture 12 Integer Arithmetic. Assembly Language for Intel-Based Computers , 4th edition Kip R. Irvine. Chapter Overview. Shift and Rotate Instructions Shift and Rotate Applications Multiplication and Division Instructions Extended Addition and Subtraction - PowerPoint PPT Presentation

Citation preview

Page 1: Lecture 12  Integer Arithmetic

Lecture 12Lecture 12

Integer Arithmetic Integer Arithmetic

Assembly Language for

Intel-Based Computers,

4th edition

Kip R. Irvine

Page 2: Lecture 12  Integer Arithmetic

2

Chapter OverviewChapter Overview

• Shift and Rotate Instructions• Shift and Rotate Applications• Multiplication and Division Instructions• Extended Addition and Subtraction• ASCII and Packed Decimal Arithmetic

Page 3: Lecture 12  Integer Arithmetic

3

Shift and Rotate InstructionsShift and Rotate Instructions

• Logical vs Arithmetic Shifts• SHL Instruction • SHR Instruction • SAL and SAR Instructions • ROL Instruction • ROR Instruction • RCL and RCR Instructions • SHLD/SHRD Instructions

Page 4: Lecture 12  Integer Arithmetic

4

Logical vs Arithmetic ShiftsLogical vs Arithmetic Shifts

• A logical shift fills the newly created bit position with zero:

• An arithmetic shift fills the newly created bit position with a copy of the number’s sign bit:

Page 5: Lecture 12  Integer Arithmetic

5

SHL InstructionSHL Instruction

• The SHL (shift left) instruction performs a logical left shift on the destination operand, filling the lowest bit with 0.

• Operand types:SHL reg,imm8SHL mem,imm8SHL reg,CLSHL mem,CL

Page 6: Lecture 12  Integer Arithmetic

6

Fast MultiplicationFast Multiplication

mov dl,5shl dl,1

Shifting left 1 bit multiplies a number by 2

mov dl,5shl dl,2 ; DL = 20

Shifting left n bits multiplies the operand by 2n

For example, 5 * 22 = 20

Page 7: Lecture 12  Integer Arithmetic

7

SHR InstructionSHR Instruction

• The SHR (shift right) instruction performs a logical right shift on the destination operand. The highest bit position is filled with a zero.

mov dl,80shr dl,1 ; DL = 40shr dl,2 ; DL = 10

Shifting right n bits divides the operand by 2n

The remainder of the division is lost

Page 8: Lecture 12  Integer Arithmetic

8

SAL and SAR InstructionsSAL and SAR Instructions

• SAL (shift arithmetic left) is identical to SHL.• SAR (shift arithmetic right) performs a right arithmetic

shift on the destination operand.

An arithmetic shift preserves the number's sign.

mov dl,-80sar dl,1 ; DL = -40sar dl,2 ; DL = -10

Page 9: Lecture 12  Integer Arithmetic

9

Your turn . . .Your turn . . .

mov al,6Bhshr al,1 a.shl al,3 b.mov al,8Chsar al,1 c.sar al,3 d.

Indicate the hexadecimal value of AL after each shift:

35hA8h

C6hF8h

Page 10: Lecture 12  Integer Arithmetic

10

ROL InstructionROL Instruction

• ROL (rotate) shifts each bit to the left• The highest bit is copied into both the Carry flag

and into the lowest bit• No bits are lost

mov al,11110000brol al,1 ; AL = 11100001b

mov dl,3Fhrol dl,4 ; DL = F3h

Page 11: Lecture 12  Integer Arithmetic

11

ROR InstructionROR Instruction

• ROR (rotate right) shifts each bit to the right• The lowest bit is copied into both the Carry flag and

into the highest bit• No bits are lost

mov al,11110000bror al,1 ; AL = 01111000b

mov dl,3Fhror dl,4 ; DL = F3h

Page 12: Lecture 12  Integer Arithmetic

12

Your turn . . .Your turn . . .

mov al,6Bhror al,1 a.rol al,3 b.

Indicate the hexadecimal value of AL after each rotation:

B5hADh

Page 13: Lecture 12  Integer Arithmetic

13

RCL InstructionRCL Instruction

• RCL (rotate carry left) shifts each bit to the left• Copies the Carry flag to the least significant bit• Copies the most significant bit to the Carry flag

CF

clc ; CF = 0mov bl,88h ; CF,BL = 0 10001000brcl bl,1 ; CF,BL = 1 00010000brcl bl,1 ; CF,BL = 0 00100001b

Page 14: Lecture 12  Integer Arithmetic

14

RCR InstructionRCR Instruction

• RCR (rotate carry right) shifts each bit to the right• Copies the Carry flag to the most significant bit• Copies the least significant bit to the Carry flag

stc ; CF = 1mov ah,10h ; CF,AH = 00010000 1rcr ah,1 ; CF,AH = 10001000 0

Page 15: Lecture 12  Integer Arithmetic

15

Your turn . . .Your turn . . .

stcmov al,6Bhrcr al,1 a.rcl al,3 b.

Indicate the hexadecimal value of AL after each rotation:

B5hAEh

Page 16: Lecture 12  Integer Arithmetic

16

Multiplying with shifts and addsMultiplying with shifts and adds

• Algorithm:Assumes BL contains multiplicand DL contains multiplier 1. Initialize Clear AX Put 8 in CX 2. Repeat 8 times (once per bit of multiplier) Shift DL right by 1 bit into CF If CF = 1, Add BL to AH with carry in CF Rotate AX (include CF) The result is in AX.

Page 17: Lecture 12  Integer Arithmetic

17

Multiplying with shifts and addsMultiplying with shifts and adds

• Multiply PROC XOR AX, AX MOV CX, 8Repeat1: SHR DL, 1 JNC Lskip ADD AH, BLLSkip: RCR AX, 1 LOOP Repeat1 RETMultiply ENDP

Page 18: Lecture 12  Integer Arithmetic

18

Multiplying with shifts and addsMultiplying with shifts and adds

• 4 bit example 0110 * 1010

DL = 00001010 0000 0101 00000010 shiftCF = ? 0 1BL =0000 0110 00000110 00000110 AX = 0000 0000 0000 0000 0000 0110 0000 0000 addCF = 0 0AX = 0000 0000 0000 0000 0000 0011 0000 0000 rotate CX = 8 8 7

Page 19: Lecture 12  Integer Arithmetic

19

Multiplying with shifts and addsMultiplying with shifts and adds

• 4 bit example 0110 * 1010 continued

DL = 0000001 00000000 shift CF = 0 1 BL = 00000110 00000110 AX = 0000 0111 1000 0000 addCF = 0 AX = 0000 0001 1000 0000 0000 0011 1100 0000 rotateCX = 6 5

……

Page 20: Lecture 12  Integer Arithmetic

20

Ex: Reversing the content of ALEx: Reversing the content of AL

• Ex: if AL = 1100 0001b, we want to reverse the order of the bits so AL = 1000 0011b

mov cx,8 ;number of bits to rotate

start: shl al,1 ;CF = msb of AL

rcr bl,1 ;push CF into msb of BL

loop start ;repeat for 8 bits

mov al,bl ;store result into AL

Page 21: Lecture 12  Integer Arithmetic

21

SHLD InstructionSHLD Instruction

• Shifts a destination operand a given number of bits to the left

• The bit positions opened up by the shift are filled by the most significant bits of the source operand

• The source operand is not affected• Syntax:

SHLD destination, source, count

Page 22: Lecture 12  Integer Arithmetic

22

SHLD ExampleSHLD Example

.datawval WORD 9BA6h.codemov ax,0AC36hshld wval,ax,4

Shift wval 4 bits to the left and replace its lowest 4 bits with the high 4 bits of AX:

Before:

After:

Page 23: Lecture 12  Integer Arithmetic

23

SHRD InstructionSHRD Instruction

• Shifts a destination operand a given number of bits to the right

• The bit positions opened up by the shift are filled by the least significant bits of the source operand

• The source operand is not affected• Syntax:

SHRD destination, source, count

Page 24: Lecture 12  Integer Arithmetic

24

SHRD ExampleSHRD Example

mov ax,234Bhmov dx,7654hshrd ax,dx,4

Shift AX 4 bits to the right and replace its highest 4 bits with the low 4 bits of DX:

Before:

After:

Page 25: Lecture 12  Integer Arithmetic

25

Your turn . . .Your turn . . .

mov ax,7C36hmov dx,9FA6hshld dx,ax,4 ; DX =shrd dx,ax,8 ; DX =

Indicate the hexadecimal values of each destination operand:

FA67h36FAh

Page 26: Lecture 12  Integer Arithmetic

26

• CSCE 380• Department of Computer Science

and Computer Engineering• Pacific Lutheran University• 4/2/2003