fall 2012 chapter 4: data transfers, addressing, and arithmetic
DESCRIPTION
Irvine, Kip R. Assembly Language for x86 Processors 6/e, Data Transfer Instructions Operand Types Instruction Operand Notation Direct Memory Operands MOV Instruction Zero & Sign Extension XCHG Instruction Direct-Offset InstructionsTRANSCRIPT
![Page 1: Fall 2012 Chapter 4: Data Transfers, Addressing, and Arithmetic](https://reader033.vdocuments.us/reader033/viewer/2022051008/5a4d1b577f8b9ab0599a9ee7/html5/thumbnails/1.jpg)
Fall 2012
Chapter 4: Data Transfers, Addressing, and
Arithmetic
![Page 2: Fall 2012 Chapter 4: Data Transfers, Addressing, and Arithmetic](https://reader033.vdocuments.us/reader033/viewer/2022051008/5a4d1b577f8b9ab0599a9ee7/html5/thumbnails/2.jpg)
Irvine, Kip R. Assembly Language for x86 Processors 6/e, 2010. 2
Chapter OverviewChapter Overview
• Data Transfer Instructions• Addition and Subtraction• Data-Related Operators and Directives• Indirect Addressing• JMP and LOOP Instructions
![Page 3: Fall 2012 Chapter 4: Data Transfers, Addressing, and Arithmetic](https://reader033.vdocuments.us/reader033/viewer/2022051008/5a4d1b577f8b9ab0599a9ee7/html5/thumbnails/3.jpg)
Irvine, Kip R. Assembly Language for x86 Processors 6/e, 2010. 3
Data Transfer InstructionsData Transfer Instructions
• Operand Types• Instruction Operand Notation• Direct Memory Operands• MOV Instruction• Zero & Sign Extension• XCHG Instruction• Direct-Offset Instructions
![Page 4: Fall 2012 Chapter 4: Data Transfers, Addressing, and Arithmetic](https://reader033.vdocuments.us/reader033/viewer/2022051008/5a4d1b577f8b9ab0599a9ee7/html5/thumbnails/4.jpg)
Irvine, Kip R. Assembly Language for x86 Processors 6/e, 2010. 4
Operand TypesOperand Types
• Immediate – a constant integer (8, 16, or 32 bits)• value is encoded within the instruction
• Register – the name of a register• register name is converted to a number and encoded
within the instruction• Memory – reference to a location in memory
• memory address is encoded within the instruction, or a register holds the address of a memory location
![Page 5: Fall 2012 Chapter 4: Data Transfers, Addressing, and Arithmetic](https://reader033.vdocuments.us/reader033/viewer/2022051008/5a4d1b577f8b9ab0599a9ee7/html5/thumbnails/5.jpg)
Irvine, Kip R. Assembly Language for x86 Processors 6/e, 2010. 5
Instruction Operand NotationInstruction Operand Notation
![Page 6: Fall 2012 Chapter 4: Data Transfers, Addressing, and Arithmetic](https://reader033.vdocuments.us/reader033/viewer/2022051008/5a4d1b577f8b9ab0599a9ee7/html5/thumbnails/6.jpg)
Irvine, Kip R. Assembly Language for x86 Processors 6/e, 2010. 6
Direct Memory OperandsDirect Memory Operands
• A direct memory operand is a named reference to storage in memory
• The named reference (label) is automatically dereferenced by the assembler
.datavar1 BYTE 10h.codemov al,var1 ; AL = 10hmov al,[var1] ; AL = 10h
alternate format
![Page 7: Fall 2012 Chapter 4: Data Transfers, Addressing, and Arithmetic](https://reader033.vdocuments.us/reader033/viewer/2022051008/5a4d1b577f8b9ab0599a9ee7/html5/thumbnails/7.jpg)
Irvine, Kip R. Assembly Language for x86 Processors 6/e, 2010. 7
MOV InstructionMOV Instruction
.datacount BYTE 100wVal WORD 2.code
mov bl,countmov ax,wValmov count,al
mov al,wVal ; errormov ax,count ; errormov eax,count ; error
• Move from source to destination. Syntax:MOV destination,source
• No more than one memory operand permitted• CS, EIP, and IP cannot be the destination• No immediate to segment moves
![Page 8: Fall 2012 Chapter 4: Data Transfers, Addressing, and Arithmetic](https://reader033.vdocuments.us/reader033/viewer/2022051008/5a4d1b577f8b9ab0599a9ee7/html5/thumbnails/8.jpg)
Irvine, Kip R. Assembly Language for x86 Processors 6/e, 2010. 8
Your turn . . .Your turn . . .
.databVal BYTE 100bVal2 BYTE ?wVal WORD 2dVal DWORD 5.code
mov ds,45mov esi,wValmov eip,dValmov 25,bValmov bVal2,bVal
Explain why each of the following MOV statements are invalid:
immediate move to DS not permittedsize mismatchEIP cannot be the destinationimmediate value cannot be destinationmemory-to-memory move not permitted
![Page 9: Fall 2012 Chapter 4: Data Transfers, Addressing, and Arithmetic](https://reader033.vdocuments.us/reader033/viewer/2022051008/5a4d1b577f8b9ab0599a9ee7/html5/thumbnails/9.jpg)
Irvine, Kip R. Assembly Language for x86 Processors 6/e, 2010. 9
Zero ExtensionZero Extension
mov bl,10001111bmovzx ax,bl ; zero-extension
When you copy a smaller value into a larger destination, the MOVZX instruction fills (extends) the upper half of the destination with zeros.
The destination must be a register.
![Page 10: Fall 2012 Chapter 4: Data Transfers, Addressing, and Arithmetic](https://reader033.vdocuments.us/reader033/viewer/2022051008/5a4d1b577f8b9ab0599a9ee7/html5/thumbnails/10.jpg)
movzx with eax registermovzx with eax register
Irvine, Kip R. Assembly Language for x86 Processors 6/e, 2010. 10
call DumpRegsmov bl, 10001111b; chart Zero Extension movzx eax,bl; showing movzx with eax registercall DumpRegs
![Page 11: Fall 2012 Chapter 4: Data Transfers, Addressing, and Arithmetic](https://reader033.vdocuments.us/reader033/viewer/2022051008/5a4d1b577f8b9ab0599a9ee7/html5/thumbnails/11.jpg)
Irvine, Kip R. Assembly Language for x86 Processors 6/e, 2010. 11
Sign ExtensionSign Extension
mov bl,10001111bmovsx ax,bl ; sign extension
The MOVSX instruction fills the upper half of the destination with a copy of the source operand's sign bit.
The destination must be a register.
![Page 12: Fall 2012 Chapter 4: Data Transfers, Addressing, and Arithmetic](https://reader033.vdocuments.us/reader033/viewer/2022051008/5a4d1b577f8b9ab0599a9ee7/html5/thumbnails/12.jpg)
Irvine, Kip R. Assembly Language for x86 Processors 6/e, 2010. 12
XCHG InstructionXCHG Instruction
.datavar1 WORD 1000hvar2 WORD 2000h.codexchg ax,bx ; exchange 16-bit regsxchg ah,al ; exchange 8-bit regsxchg var1,bx ; exchange mem, regxchg eax,ebx ; exchange 32-bit regs
xchg var1,var2 ; error: two memory operands
XCHG exchanges the values of two operands. At least one operand must be a register. No immediate operands are permitted.
![Page 13: Fall 2012 Chapter 4: Data Transfers, Addressing, and Arithmetic](https://reader033.vdocuments.us/reader033/viewer/2022051008/5a4d1b577f8b9ab0599a9ee7/html5/thumbnails/13.jpg)
Irvine, Kip R. Assembly Language for x86 Processors 6/e, 2010. 13
Direct-Offset OperandsDirect-Offset Operands
.dataarrayB BYTE 10h,20h,30h,40h.codemov al,arrayB+1 ; AL = 20hmov al,[arrayB+1] ; alternative notation
A constant offset is added to a data label to produce an effective address (EA). The address is dereferenced to get the value inside its memory location.
Q: Why doesn't arrayB+1 produce 11h?
![Page 14: Fall 2012 Chapter 4: Data Transfers, Addressing, and Arithmetic](https://reader033.vdocuments.us/reader033/viewer/2022051008/5a4d1b577f8b9ab0599a9ee7/html5/thumbnails/14.jpg)
Irvine, Kip R. Assembly Language for x86 Processors 6/e, 2010. 14
Direct-Offset Operands Direct-Offset Operands (cont)(cont)
.dataarrayW WORD 1000h,2000h,3000harrayD DWORD 1,2,3,4.codemov ax,[arrayW+2] ; AX = 2000hmov ax,[arrayW+4] ; AX = 3000hmov eax,[arrayD+4] ; EAX = 00000002h
A constant offset is added to a data label to produce an effective address (EA). The address is dereferenced to get the value inside its memory location.
; Will the following statements assemble?mov ax,[arrayW-2] ; ??mov eax,[arrayD+16] ; ??
What will happen when they run?
![Page 15: Fall 2012 Chapter 4: Data Transfers, Addressing, and Arithmetic](https://reader033.vdocuments.us/reader033/viewer/2022051008/5a4d1b577f8b9ab0599a9ee7/html5/thumbnails/15.jpg)
Example ProgramExample Program
Irvine, Kip R. Assembly Language for x86 Processors 6/e, 2010. 15
![Page 16: Fall 2012 Chapter 4: Data Transfers, Addressing, and Arithmetic](https://reader033.vdocuments.us/reader033/viewer/2022051008/5a4d1b577f8b9ab0599a9ee7/html5/thumbnails/16.jpg)
Irvine, Kip R. Assembly Language for x86 Processors 6/e, 2010. 16
Your turn. . .Your turn. . .
Write a program that rearranges the values of three doubleword values in the following array as: 3, 1, 2.
.dataarrayD DWORD 1,2,3
• Step 2: Exchange EAX with the third array value and copy the value in EAX to the first array position.
• Step1: copy the first value into EAX and exchange it with the value in the second position.
mov eax,arrayDxchg eax,[arrayD+4]
xchg eax,[arrayD+8]mov arrayD,eax
![Page 17: Fall 2012 Chapter 4: Data Transfers, Addressing, and Arithmetic](https://reader033.vdocuments.us/reader033/viewer/2022051008/5a4d1b577f8b9ab0599a9ee7/html5/thumbnails/17.jpg)
xchg Examplexchg Example
Irvine, Kip R. Assembly Language for x86 Processors 6/e, 2010. 17
; xchg examplesmov eax,arrayDxchg eax,[arrayD+4]xchg eax,[arrayD+8]mov arrayD,eaxmov eax, [arrayD]mov ebx, [arrayD+4]mov ecx, [arrayD+8]callDumpRegs
![Page 18: Fall 2012 Chapter 4: Data Transfers, Addressing, and Arithmetic](https://reader033.vdocuments.us/reader033/viewer/2022051008/5a4d1b577f8b9ab0599a9ee7/html5/thumbnails/18.jpg)
Irvine, Kip R. Assembly Language for x86 Processors 6/e, 2010. 18
Evaluate this . . . Evaluate this . . .
• We want to write a program that adds the following three bytes:.datamyBytes BYTE 80h,66h,0A5h
• What is your evaluation of the following code? mov al,myBytes
add al,[myBytes+1]add al,[myBytes+2]
• What is your evaluation of the following code? mov ax,myBytes
add ax,[myBytes+1]add ax,[myBytes+2]
• Any other possibilities?
Assemble error: size mismatch
18B
![Page 19: Fall 2012 Chapter 4: Data Transfers, Addressing, and Arithmetic](https://reader033.vdocuments.us/reader033/viewer/2022051008/5a4d1b577f8b9ab0599a9ee7/html5/thumbnails/19.jpg)
AddingAdding
Irvine, Kip R. Assembly Language for x86 Processors 6/e, 2010. 19
mov al,myBytescallDumpRegsadd al,[myBytes+1]add al,[myBytes+2]callDumpRegs
18B
![Page 20: Fall 2012 Chapter 4: Data Transfers, Addressing, and Arithmetic](https://reader033.vdocuments.us/reader033/viewer/2022051008/5a4d1b577f8b9ab0599a9ee7/html5/thumbnails/20.jpg)
Irvine, Kip R. Assembly Language for x86 Processors 6/e, 2010. 20
Evaluate this . . . Evaluate this . . . (cont)(cont)
.datamyBytes BYTE 80h,66h,0A5h
• How about the following code. Is anything missing?
movzx ax,myBytesmov bl,[myBytes+1]add ax,bxmov bl,[myBytes+2]add ax,bx ; AX = sum
Yes: Move zero to BX before the MOVZX instruction.
18B
![Page 21: Fall 2012 Chapter 4: Data Transfers, Addressing, and Arithmetic](https://reader033.vdocuments.us/reader033/viewer/2022051008/5a4d1b577f8b9ab0599a9ee7/html5/thumbnails/21.jpg)
Evaluate this . . . Evaluate this . . . (cont)(cont)
Irvine, Kip R. Assembly Language for x86 Processors 6/e, 2010. 21
; more movezx examplesmovzx ax,myBytesmov bl,[myBytes+1]add ax,bxmov bl,[myBytes+2]add ax,bx; AX = sumcallDumpRegs
18B
![Page 22: Fall 2012 Chapter 4: Data Transfers, Addressing, and Arithmetic](https://reader033.vdocuments.us/reader033/viewer/2022051008/5a4d1b577f8b9ab0599a9ee7/html5/thumbnails/22.jpg)
Evaluate this . . . Evaluate this . . . (cont)(cont)
Irvine, Kip R. Assembly Language for x86 Processors 6/e, 2010. 22
; more direct-offset examplesmov bx,0movzx ax,myBytesmov bl,[myBytes+1]add ax,bxmov bl,[myBytes+2]add ax,bx; AX = sumcallDumpRegs