Top Banner
Fall 2012 Chapter 4: Data Transfers, Addressing, and Arithmetic
22

Fall 2012 Chapter 4: Data Transfers, Addressing, and Arithmetic.

Jan 18, 2018

Download

Documents

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 Instructions
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Fall 2012 Chapter 4: Data Transfers, Addressing, and Arithmetic.

Fall 2012

Chapter 4: Data Transfers, Addressing, and

Arithmetic

Page 2: Fall 2012 Chapter 4: Data Transfers, Addressing, and Arithmetic.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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