lecture 12 integer arithmetic
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 PresentationTRANSCRIPT
Lecture 12Lecture 12
Integer Arithmetic Integer Arithmetic
Assembly Language for
Intel-Based Computers,
4th edition
Kip R. Irvine
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
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
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:
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
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
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
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
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
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
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
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
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
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
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
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.
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
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
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
……
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
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
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:
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
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:
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
26
• CSCE 380• Department of Computer Science
and Computer Engineering• Pacific Lutheran University• 4/2/2003