Faculty of Electronic Engineering – Dept. of Computer Science

advertisement
Microprocessors
Chapter 4
Data Movement Instructions
prepared by
Dr. Mohamed A. Shohla
Chapter Overview
•
•
•
•
‫جام عة الم نوف ية‬
MOV Revisited
PUSH/POP
String Data Transfers
Miscellaneous Data Transfer Instructions
Faculty of Electronic Engineering – Dept. of Computer Science & Eng.
Microprocessors Course
4-2
PUSH
• The 8086-80286 PUSH instruction always transfers two bytes of
data to the stack; the 80386 and above transfer two or four bytes,
depending on the register or size of the memory location.
•
Examples of the PUSH instructions.
Symbolic
PUSH reg16
PUSH reg32
PUSH mem16
PUSH seg
PUSH imm8
PUSHW imm16
PUSHD imm32
PUSHA
PUSHAD
PUSHF
PUSHFD
‫جام عة الم نوف ية‬
Example
PUSH BX
PUSH EDX
PUSH WORD PTR [BX]
PUSH DS
PUSH ‘,’
PUSHW 1000H
PUSHD 20
PUSHA
PUSHAD
PUSHF
PUSHFD
Note
16-bit register
32-bit register
16-bit pointer
Segment register
8-bit immediate
16-bit immediate
32-bit immediate
Save all 16-bit registers
Save all 32-bit registers
Save flags
Save EFLAGs
Faculty of Electronic Engineering – Dept. of Computer Science & Eng.
Microprocessors Course
4-3
PUSH Example :
PUSH AX
The effect of the PUSH AX instruction on ESP and stack
memory location 37FFH and 37FEH. This instruction is
shown after execution.
‫جام عة الم نوف ية‬
Faculty of Electronic Engineering – Dept. of Computer Science & Eng.
Microprocessors Course
4-4
PUSH Example :
PUSHA
The operation of the PUSHA instruction, showing the
location and order of stack data.
‫جام عة الم نوف ية‬
Faculty of Electronic Engineering – Dept. of Computer Science & Eng.
Microprocessors Course
4-5
POP
•
The POP instruction performs the inverse operation of a PUSH instruction. The POP
instruction removes data from the stack and places it into the target 16-bit register,
segment register, or a 16-bit memory location. In the 80386 and above, a POP can
also remove 32-bit data from the stack and use a 32-bit address.
•
Examples of the POP instructions.
Symbolic
POP reg16
POP reg32
POP mem16
POP mem32
POP seg
POPA
POPAD
POPF
POPFD
‫جام عة الم نوف ية‬
Example
POP CX
POP EBP
POP WORD PTR[BX+1]
POP DATA3
POP FS
POPA
POPAD
POPF
POPFD
Note
16-bit register
32-bit register
16-bit pointer
32-bit memory address
Segment register
Pop all 16-bit registers
Pop all 32-bit registers
Pop flags
Pop EFLAGs
Faculty of Electronic Engineering – Dept. of Computer Science & Eng.
Microprocessors Course
4-6
POP Example :
POP BX
The POP BX instruction, showing how data are removed
from the stack. This instruction is shown after execution.
‫جام عة الم نوف ية‬
Faculty of Electronic Engineering – Dept. of Computer Science & Eng.
Microprocessors Course
4-7
LEA
• The LEA instruction loads a 16- or 32-bit register with
the offset address of the data specified by the
operand.
• By comparing LEA with MOV, it is observed that LEA
BX,[DI] loads the offset address specified by [DI]
(contents of DI) into the BX register; MOV BX,[DI]
loads the data stored at the memory location
addressed by [DI] into register BX.
• For example, the MOV BX,OFFSET LIST performs
the same function as LEA BX,LIST. Both instructions
load the offset address of memory location LIST into
the BX register.
‫جام عة الم نوف ية‬
Faculty of Electronic Engineering – Dept. of Computer Science & Eng.
Microprocessors Course
4-8
Examples of Load-effective address instructions.
Assembly Language
LEA AX, NUMB
LEA EAX, NUMB
LDS DI, LIST
LDS EDI, LIST
LES BX, CAT
LFS DI, DATA1
LGS SI, DATA5
LSS SP, MEM
‫جام عة الم نوف ية‬
Operation
Loads AX with the address of NUMB
Loads EAX with the address of NUMB
Loads DS and Dl with the 32-bit contents of data
segment memory location LIST
Loads DS and EDI with the 48-bit contents of
data segment memory location LIST
Loads ES and BX with the 32-bit contents of data
segment memory location CAT
Loads FS and Dl with the 32-bit contents of data
segment memory location DATA1
Loads GS and SI with the 32-bit contents of data
segment memory location DATA5
Loads SS and SP with the 32-bit contents of
memory location MEM
Faculty of Electronic Engineering – Dept. of Computer Science & Eng.
Microprocessors Course
4-9
Example: A short program that loads SI with the address of DATA1 and
DI with the address of DATA2. Il then exchanges the contents of these
memory locations. Note that the LEA and MOV with OFFSET
instructions are both the same length (three bytes).
.MODEL SMALL
.DATA
DATA1 DW
2000H
DATA2 DW
3000H
.CODE
.STARTUP
LEA
SI, DATA1
MOV
DI, OFFSET DATA2
MOV
BX, [SI]
MOV
CX, [DI]
MOV
[SI], CX
MOV
[DI], BX
.EXIT
END
‫جام عة الم نوف ية‬
; select SMALL model
; start of DATA segment
; define DATA1
; define DATA2
; start of CODE segment
; start of program
; address DATA1 with SI
;address DATA2 with DI
; exchange DATA1 with DATA2
; exit to DOS
; end of file
Faculty of Electronic Engineering – Dept. of Computer Science & Eng.
Microprocessors Course
4 - 10
LDS, LES, LFS, LGS, and LSS
• The LDS, LES, LFS, LGS, and LSS instructions load any
16-bit or 32-bit register with an offset address, and the
DS, ES, FS, GS, or SS segment register with a segment
address.
• These instructions use any of the memory-addressing
modes to access a 32-bit or 48-bit section of memory
that contains both the segment and offset address.
• The 32-bit section of memory contains a 16-bit offset
and segment address, while the 48-bit section contains a
32-bit offset and a segment address.
‫جام عة الم نوف ية‬
Faculty of Electronic Engineering – Dept. of Computer Science & Eng.
Microprocessors Course
4 - 11
Example: LDS BX, [DI]
• The LDS BX, [DI] instruction loads register BX from addresses
11000H and 11001H and register DS from locations 11002H and
11003H. This instruction is shown at the point just before DS
changes to 3000H and BX changes to 127AH.
‫جام عة الم نوف ية‬
Faculty of Electronic Engineering – Dept. of Computer Science & Eng.
Microprocessors Course
4 - 12
String Data Transfers
• There are five string data transfer instructions: LODS, STOS,
MOVS, INS, and OUTS. Each string instruction allows data
transfers that are either a single byte, word, or doubleword (or if
repeated, a block of bytes, words, or doublewords).
• Before the string instructions are presented, the operation of the D
flag-bit (direction), DI, and SI must be understood as they apply to
the string instructions.
‫جام عة الم نوف ية‬
Faculty of Electronic Engineering – Dept. of Computer Science & Eng.
Microprocessors Course
4 - 13
The Direction Flag
• The direction flag (D) (located in the flag register) selects the
auto-increment (D = 0) or the auto-decrement (D = 1) operation
for the DI and SI registers during string operations.
• The direction flag is used only with the string instructions. The
CLD instruction clears the D flag (D = 0) and the STD instruction
sets it (D = 1). Therefore, the CLD instruction selects the autoincrement mode (D = 0) and STD selects the auto-decrement
mode (D = 1).
• Whenever a string instruction transfers a byte, the contents of DI
and/or SI increment or decrement by 1. If a word is transferred,
the contents of DI and/or SI increment or decrement by 2.
Doubleword transfers cause DI and/or SI to increment or
decrement by 4.
‫جام عة الم نوف ية‬
Faculty of Electronic Engineering – Dept. of Computer Science & Eng.
Microprocessors Course
4 - 14
LODS
•
•
The LODS instruction loads AL, AX, or EAX with data stored at the data
segment offset address indexed by the SI register.
After loading AL with a byte, AX with a word, or EAX with a doubleword,
the contents of SI increment, if D = 0 or decrement, if D = 1.
•
Examples of the LODS instructions.
Assembly Language
LODSB
LODSW
LODSD
LODS LIST
LODS DATA1
LODS FROG
‫جام عة الم نوف ية‬
Operation
AL = DS:[SI]; SI = SI ± 1
AX = DS:[SI];SI = SI ± 2
EAX = DS:[SI];SI = SI ± 4
AL = DS:[SIJ; SI = SI ± 1 (if LIST is a byte)
AX = DS:[SI], SI = SI ± 2 (if DATA1 is a word)
EAX = DS:[SI]; SI = SI ± 4 (FROG is a doubleword)
Faculty of Electronic Engineering – Dept. of Computer Science & Eng.
Microprocessors Course
4 - 15
LODS Example :
LODSW
The operation of the LODSW instruction if DS = 1000H, D =
0,11000H = 32, and 11001H = A0. This instruction is shown after
AX is loaded from memory, but before SI increments by 2.
‫جام عة الم نوف ية‬
Faculty of Electronic Engineering – Dept. of Computer Science & Eng.
Microprocessors Course
4 - 16
STOS
•
•
The STOS instruction stores AL, AX, or EAX at the extra segment
memory location addressed by the DI register.
The STOSB (stores a byte) instruction stores the byte in AL at the
extra segment memory location addressed by DI.
•
Examples of the STOS instructions.
Assembly Language
STOSB
STOSW
STOSD
STOS LIST
STOS DATA3
STOS DATA4
‫جام عة الم نوف ية‬
Operation
ES:[DI] = AL; Dl = Dl ± 1
ES:[DI] = AX; Dl = Dl ± 2
ES:[DI] = EAX; Dl = Dl ± 4
ES:[DI] = AL; Dl = Dl ± 1 (list is a byte)
ES:[DI] = AX; Dl = Dl ± 2 (DATA3 is a word)
ES:[DI] = EAX; Dl = Dl ± 4 (DATA4 is a doubleword)
Faculty of Electronic Engineering – Dept. of Computer Science & Eng.
Microprocessors Course
4 - 17
MOVS
•
•
The MOVS instruction transfers a byte, word, or doubleword from
the data segment location addressed by SI to the extra segment
location addressed by DI.
As with the other string instructions, the pointers then increment
or decrement, as dictated by the direction flag.
•
Examples of the MOVS instructions.
Assembly Language
MOVSB
MOVSW
MOVSD
MOVS BYTE1,BYTE2
‫جام عة الم نوف ية‬
Operation
ES:[DI] = DS:[SI]; DI = DI ± 1; SI = SI ± 1 (byte
transferred)
ES:[DI] = DS:[SI];D! = DI ± 2; SI = SI ± 2 (word
transferred)
ES:[DI] = DS:[SI]; Dl = DI ± 4; SI = SI ± 4
(doubleword transferred)
ES:[D!] = DS:[SI]; DI = DI ± 1;S! = SI ± 1 (if BYTE1
and BYTE2are bytes)
Faculty of Electronic Engineering – Dept. of Computer Science & Eng.
Microprocessors Course
4 - 18
Miscellaneous Data Transfer Instructions
XCHG
•
The XCHG (exchange) instruction exchanges the contents of
a register with the contents of any other register or memory
location.
•
Examples of XCHG instructions.
Assembly Language
XCHG AL, CL
XCHG CX, BP
XCHG EDX, ESI
XCHG AL, DATA2
‫جام عة الم نوف ية‬
Operation
Exchanges the contents of AL with CL
Exchanges the contents of CX with BP
Exchanges the contents of EDX with ESI
Exchanges the contents of AL with data segment
memory location DATA2
Faculty of Electronic Engineering – Dept. of Computer Science & Eng.
Microprocessors Course
4 - 19
IN and OUT
• The contents of AL, AX, or EAX are transferred only between
the I/O device and the microprocessor.
• An IN instruction transfers data from an external I/O device to
AL, AX, or EAX.
• An OUT transfers data from AL, AX, or EAX to an external I/O
device.
• Two forms of I/O device (port) addressing exist for IN and OUT:
fixed-port and variable-port.
• Fixed-port addressing allows data transfer between AL, AX, or
EAX using an 8-bit I/O port address.
• Variable-port addressing allows data transfers between AL, AX,
or EAX and a 16-bit port address. It is called variable-port
addressing because the I/O port number is stored in register DX
‫جام عة الم نوف ية‬
Faculty of Electronic Engineering – Dept. of Computer Science & Eng.
Microprocessors Course
4 - 20
•Example of IN and OUT instructions.
Assembly Language
IN AL, p8
IN AX, p8
IN EAX, p8
IN AL, DX
IN AX, DX
IN EAX, DX
OUT p8, AL
OUT p8, AX
OUTp8, EAX
OUT DX, AL
OUT DX, AX
OUT DX, EAX
Operation
8-bits are input to AL from I/O port p8
16-bits are input to AX from I/O port p8
32-bits are input to EAX from I/O port p8
8-bits are input to AL from I/O port DX
16-bits are input to AX from I/O port DX
32-bits are input to EAX from I/O port DX
8-bits are output from AL to I/O port p8
16-bits are output from AX to I/O port p8
32-bits are output from EAX to I/O port p8
8-bits are output from AL to I/O port DX
16-bits are output from AX to I/O port DX
32-bits are output from EAX to I/O port DX
Note: p8 = an 8-bit I/O port number and DX = the 16-bit port address held in DX.
‫جام عة الم نوف ية‬
Faculty of Electronic Engineering – Dept. of Computer Science & Eng.
Microprocessors Course
4 - 21
MOVSX and MOVZX
•
The MOVSX (move and sign-extend) and MOVZX (move and
zero-extend) instructions are found in the 80386-Pentium 4
instruction sets. These instructions move data, and at the
same time either sign- or zero-extend it.
•
Examples of the MOVSX and MOVZX instructions.
Assembly Language
MOVSX CX, BL
MOVSX ECX, AX
MOVSX BX, DATA1
MOVSX EAX, [EDI]
MOVZX DX, AL
MOVZX EBP, DI
MOVZX DX, DATA2
‫جام عة الم نوف ية‬
Operation
Sign-extends BL into CX
Sign-extends AX into ECX
Sign-extends the byte at DATA1 into BX
Sign-extends the word at the data segment
memory location addressed by EDI into EAX
Zero-extends AL into DX
Zero-extends Dl into EBP
Zero-extends the byte at data segment memory
location DATA2 into DX
Faculty of Electronic Engineering – Dept. of Computer Science & Eng.
Microprocessors Course
4 - 22
BSWAP
• The BSWAP (byte swap) instruction is available only
in the 80486 and all versions of the Pentium
microprocessors.
• This instruction takes the contents of any 32-bit
register and swaps the first byte with the fourth, and
the second with the third.
• For example, BSWAP EAX instruction with EAX =
00112233H swaps bytes in EAX, resulting in EAX =
33221100H.
‫جام عة الم نوف ية‬
Faculty of Electronic Engineering – Dept. of Computer Science & Eng.
Microprocessors Course
4 - 23
CMOV
• The CMOV (conditional move) class of instruction is
new to the Pentium Pro and Pentium 4 instruction
sets.
• These instructions move the data only if the condition
is true.
• For example, the CMOVZ instruction moves data
only if the result from some prior instruction was a
zero.
• The destination is limited to only a 16- or 32-bit
register, but the source can be a 16- or 32-bit register
or memory location.
‫جام عة الم نوف ية‬
Faculty of Electronic Engineering – Dept. of Computer Science & Eng.
Microprocessors Course
4 - 24
Examples of the conditional move instructions.
Assembly
Language
CMOVB
CMOVAE
CMOVBE
CMOVA
CMOVZ
CMOVNE
CMOVL
CMOVLE
CMOVG
CMOVGE
CMOVS
CMOVNS
CMOVC
CMOVNC
CMOVO
CMOVNO
CMOVP
CMOVNP
‫جام عة الم نوف ية‬
Condition Tested
C=1
c=0
Z = 1 or C = 1
Z = 0 and C = 0
Z=1
Z=0
S<>0
Z = 1 or S <> 0
Z = 0 and S = 0
S=0
S=1
S=0
C=1
C=0
O=1
0=0
P=1
P=0
Operation
Move if below
Move if above or equal
Move if below or equal
Move if above
Move if equal or set if zero
Move if not equal or set if not zero
Move if less than
Move if less than or equal
Move if greater than
Move if greater than or equal
Move if sign (negative)
Move if no sign (positive)
Move if carry
Move if no carry
Move if overflow
Move if no overflow
Move if parity or set if parity even
Move if no parity or set if parity odd
Faculty of Electronic Engineering – Dept. of Computer Science & Eng.
Microprocessors Course
4 - 25
Questions and Answers
‫جام عة الم نوف ية‬
Faculty of Electronic Engineering – Dept. of Computer Science & Eng.
Microprocessors Course
4 - 26
Which registers move onto the stack with
the PUSHA instruction?
• The PUSHA (push all) instruction copies the 16-bit registers to the
stack in the following order: AX, CX, DX, BX, SP, BP, SI, and DI.
‫جام عة الم نوف ية‬
Faculty of Electronic Engineering – Dept. of Computer Science & Eng.
Microprocessors Course
4 - 27
Which registers move onto the stack for a
PUSHAD instruction?
• The PUSHAD (push all) instruction copies the 32-bit
registers to the stack in the following order: EAX,
ECX, EDX, EBX, ESP, EBP, ESI,
‫جام عة الم نوف ية‬
Faculty of Electronic Engineering – Dept. of Computer Science & Eng.
Microprocessors Course
4 - 28
Describe the operation of each of the following
instructions:
(a) PUSH
AX
(b) POP
ESI
(c) PUSH
[BX]
(d) PUSHFD
(e) POPDS
(f) PUSHD 4
Instruction
PUSH AX
POP ESI
PUSH [BX]
Operation
Pushes the contents of AX onto the stack.
Remove a 32-bit number from the stack and places it
into the ESI register.
Pushes the 16-bit contents of the data segment memory
location addressed by BX onto the stack.
PUSHFD
Pushes the EFLAG register onto the stack.
POP DS
Remove a 16-bit number from the stack and places it
into the DS register.
PUSHD 4
Pushes the 32-bit number 4 onto the stack.
‫جام عة الم نوف ية‬
Faculty of Electronic Engineering – Dept. of Computer Science & Eng.
Microprocessors Course
4 - 29
Explain what happens when the PUSH BX
instruction executes. Make sure to show
where BH and BL are stored. (Assume that
SP = 0100H and SS = 0200H.)
Stack segment
EBX
1234
ESP
0100
CS
DS
SS
02102
02101
02100
020FF
020FE
0100
02000
+
0200
02000
02100
Stack before the instruction PUSH
BX executed.
‫جام عة الم نوف ية‬
Stack segment
EBX
1234
ESP
00FE
CS
DS
SS
12
34
02102
02101
02100
020FF
020FE
020FD
020FC
02000
00FE
+
0200
02000
020FE
Stack after the instruction PUSH
BX executed.
Faculty of Electronic Engineering – Dept. of Computer Science & Eng.
Microprocessors Course
4 - 30
Repeat the above question for the PUSH EAX
Stack segment
Stack segment
EAX
1234
02102
02101
02100
020FF
020FE
5678
EAX
1234
ESP
ESP
12
34
56
78
5678
00FC
02102
02101
02100
020FF
020FE
020FD
020FC
0100
CS
DS
SS
0100
02000
+
0200
02000
02100
Stack before the instruction PUSH
EAX executed.
‫جام عة الم نوف ية‬
CS
DS
SS
02000
00FC
+
0200
02000
020FC
Stack after the instruction PUSH
EAX executed.
Faculty of Electronic Engineering – Dept. of Computer Science & Eng.
Microprocessors Course
4 - 31
Develop a sequence of instructions that
move the contents of data segment memory
locations NUMB and NUMB+1 into BX, DX,
and SI.
MOV BX, NUMB
MOV DX, BX
MOV SI, BX
‫جام عة الم نوف ية‬
Faculty of Electronic Engineering – Dept. of Computer Science & Eng.
Microprocessors Course
4 - 32
Develop a sequence of instructions that
copy 12 bytes of data from an area of
memory addressed by SOURCE into an area
of memory addressed by DEST.
MOV
MOV
MOV
REP
‫جام عة الم نوف ية‬
SI, OFFSET SOURCE
DI, OFFEST DEST
CX, 12
MOVSB
Faculty of Electronic Engineering – Dept. of Computer Science & Eng.
Microprocessors Course
4 - 33
Select an assembly language instruction
that exchanges the contents of the EBX
register with the ESI register.
XCHG
‫جام عة الم نوف ية‬
EBX, ESI
Faculty of Electronic Engineering – Dept. of Computer Science & Eng.
Microprocessors Course
4 - 34
Write a sequence of instructions that input
50 bytes of data from an I/O device whose
address is 03ACH and stores the data in
extra segment memory array LISTS.
;Using the REP INSB to input data to a memory array
MOV
MOV
CLD
MOV
REP
‫جام عة الم نوف ية‬
Dl, OFFSET LISTS
DX, 3ACH
CX, 50
INSB
;address array
;address I/O
; auto-increment
; load count
;input data
Faculty of Electronic Engineering – Dept. of Computer Science & Eng.
Microprocessors Course
4 - 35
Write a short sequence of instructions that
transfer data from a data segment memory
array (ARRAY) to an I/O device at I/O
address 3ACH.
; Using the REP OUTS to output data from a memory array
MOV
MOV
CLD
MOV
REP
‫جام عة الم نوف ية‬
SI, OFFSET ARRAY
DX, 3ACH
CX, 100
OUTSB
;address array
;address I/O
; auto-increment
; load count
Faculty of Electronic Engineering – Dept. of Computer Science & Eng.
Microprocessors Course
4 - 36
Develop a sequence of instructions
that exchange the contents of AX with
BX, ECX with EDX, and SI with DI.
XCHG
XCHG
XCHG
‫جام عة الم نوف ية‬
AX, BX
ECX, EDX
SI, DI
Faculty of Electronic Engineering – Dept. of Computer Science & Eng.
Microprocessors Course
4 - 37
Write a short program that exchanges the
contents of memory locations DATA1 with
the and DI with the contents of these
memory locations DATA2.
DATA1
DATA2
‫جام عة الم نوف ية‬
.MODEL SMALL
.DATA
DW 2000H
DW 3000H
.CODE
.STARTUP
MOV SI, OFFSET DATA1
MOV DI, OFFSET DATA2
MOV BX, [SI]
MOV CX, [DI]
MOV [SI], CX
MOV [DI], BX
.EXIT
END
; select SMALL model
; start of DATA segment
; define DATA1
; define DATA2
; start of CODE segment
; start of program
; address DATA1 with SI
; address DATA2 with DI
; exit to DOS
; end of file
Faculty of Electronic Engineering – Dept. of Computer Science & Eng.
Microprocessors Course
4 - 38
Download