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

Slides:



Advertisements
Similar presentations
Department of Computer Science and Software Engineering
Advertisements

Irvine, Kip R. Assembly Language For Intel-Based Computers TYPE and SIZE Operators TYPE –returns the size, in bytes of a single element of a data label.
Web siteWeb site ExamplesExamples Irvine, Kip R. Assembly Language for Intel-Based Computers, MUL Instruction The MUL (unsigned multiply) instruction.
Joseph L. Lindo Assembly Programming Sir Joseph Lindo University of the Cordilleras.
Assembly Language for x86 Processors 6th Edition
Assembly Language for Intel-Based Computers, 5th Edition
1 Lecture 4: Data Transfer, Addressing, and Arithmetic Assembly Language for Intel-Based Computers, 4th edition Kip R. Irvine.
Assembly Language for Intel-Based Computers, 5 th Edition Chapter 4: Data Transfers, Addressing, and Arithmetic (c) Pearson Education, All rights.
Assembly Language for Intel-Based Computers, 5 th Edition Chapter 4: Data Transfers, Addressing, and Arithmetic (c) Pearson Education, All rights.
Assembly Language for Intel-Based Computers
Basic Instructions Addressing Modes
Irvine, Kip R. Assembly Language For Intel-Based Computers.data string db "This is a string." COUNT = ($–string) ; calculate string length.code mov cx,COUNT.
CS2422 Assembly Language & System Programming September 28, 2006.
Assembly Language for Intel-Based Computers, 4 th Edition Chapter 4: Data Transfers, Addressing, and Arithmetic (c) Pearson Education, All rights.
ICS312 Set 3 Pentium Registers. Intel 8086 Family of Microprocessors All of the Intel chips from the 8086 to the latest pentium, have similar architectures.
Microprocessor Systems Design I
Outline Data Transfer Instructions Arithmetic Instructions Data-Related Operations and Directives Indirect Addressing JMP and LOOP Instructions.
Data Transfers, Addressing, and Arithmetic
Assembly Language for Intel-Based Computers, 4 th Edition Chapter 4: Data Transfers, Addressing, and Arithmetic (c) Pearson Education, All rights.
Quiz #2 Topics Character codes Intel IA-32 architecture Mostly MASM
Chapter 4: Data Transfers, Addressing, and Arithmetic.
CSC 221 Computer Organization and Assembly Language
Sahar Mosleh California State University San MarcosPage 1 JMP and Loops Memory Operand Move Instruction Array Data Related Operation and Directives.
Intel x86 Assembly Fundamentals Computer Organization and Assembly Languages Yung-Yu Chuang with slides by Kip Irvine.
Assembly Language for x86 Processors 6th Edition Chapter 4: Data-Related Operators and Directives, Addressing Modes (c) Pearson Education, All rights.
Assembly Language for Intel-Based Computers, 6 th Edition Chapter 8: Advanced Procedures (c) Pearson Education, All rights reserved. You may.
Basic Instructions Addressing Modes
CSC 221 Computer Organization and Assembly Language Lecture 12: Addressing Modes in Assembly.
Computer Architecture and Operating Systems CS 3230 :Assembly Section Lecture 4 Department of Computer Science and Software Engineering University of Wisconsin-Platteville.
Assembly Language for Intel-Based Computers, 4 th Edition Chapter 4: Data Transfers, Addressing, and Arithmetic Lecture 15: ADD, SUB, NEG and how they.
Assembly Language for Intel-Based Computers, 5 th Edition Chapter 4: Data Transfers, Addressing, and Arithmetic (c) Pearson Education, All rights.
Assembly Language. Symbol Table Variables.DATA var DW 0 sum DD 0 array TIMES 10 DW 0 message DB ’ Welcome ’,0 char1 DB ? Symbol Table Name Offset var.
Assembly Language for x86 Processors 6th Edition
Assembly Language for Intel-Based Computers Chapter 4: Data Transfers, Addressing, and Arithmetic Kip Irvine.
MOV Instruction MOV destination,source  MOV AX,BX  MOV SUM,EAX  MOV EDX,ARRAY[EBX][ESI]  MOV CL,5  MOV DL,[BX]
Data Transfer Instructions Introduction The data transfer instructions are used to move data between internal register or between internal.
Computer Organization & Assembly Language University of Sargodha, Lahore Campus Prepared by Ali Saeed.
Assembly Language for x86 Processors 7th Edition
CSC 221 Computer Organization and Assembly Language Lecture 11: Addressing Modes in Assembly.
Assembly Language Data Movement Instructions. MOV Instruction Move source operand to destination mov destination, source The source and destination are.
Computer Organization and Assembly Language Petra University Dr. Hadi Hassan Introduction to 8086 Assembly Language.
Addressing Modes Dr. Hadi Hassan.  Two Basic Questions  Where are the operands?  How memory addresses are computed?  Intel IA-32 supports 3 fundamental.
1 Using the Assembler Chapter – 4(A). 2 Exchanging Two Variables title Exchange Two Variables (Exchange.asm).model small.stack 100h.data value1 db 0Ah.
CS2422 Assembly Language and System Programming 0 Week 9 Data Transfers, Addressing, and Arithmetic.
Assembly Language for Intel-Based Computers, 4th Edition
Assembly Language for Intel-Based Computers, 5th Edition
Data Transfers, Addressing, and Arithmetic
Microprocessor Systems Design I
Assembly Language for Intel-Based Computers, 5th Edition
Assembly Language for x86 Processors 7th Edition
Assembly IA-32.
Assembly Language Lab (4).
Assembly Language for x86 Processors
Assembly Language for Intel-Based Computers, 4th Edition
Assembly Language for Intel-Based Computers, 4th Edition
Symbolic Instruction and Addressing
Assembly Language for x86 Processors 6th Edition
Assembly Language for x86 Processors 6th Edition
Data-Related Operators and Directives
Data Transfers, Addressing, and Arithmetic
Data Transfer, Addressing and Arithmetic
Morgan Kaufmann Publishers Computer Organization and Assembly Language
Symbolic Instruction and Addressing
Multiplication and Division Instructions
Basic Instructions.
University of Gujrat Department of Computer Science
Data Transfers, Addressing, and Arithmetic
EECE.3170 Microprocessor Systems Design I
Chapter 6 –Symbolic Instruction and Addressing
Data Transfer, Addressing and Arithmetic
Presentation transcript:

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

Irvine, Kip R. Assembly Language for x86 Processors 6/e, Chapter Overview Data Transfer Instructions Addition and Subtraction Data-Related Operators and Directives Indirect Addressing JMP and LOOP Instructions

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

Irvine, Kip R. Assembly Language for x86 Processors 6/e, Operand 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

Irvine, Kip R. Assembly Language for x86 Processors 6/e, Instruction Operand Notation

Irvine, Kip R. Assembly Language for x86 Processors 6/e, Direct Memory Operands A direct memory operand is a named reference to storage in memory The named reference (label) is automatically dereferenced by the assembler.data var1 BYTE 10h.code mov al,var1; AL = 10h mov al,[var1]; AL = 10h alternate format

Irvine, Kip R. Assembly Language for x86 Processors 6/e, MOV Instruction.data count BYTE 100 wVal WORD 2.code mov bl,count mov ax,wVal mov count,al mov al,wVal; error mov ax,count; error mov 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

Irvine, Kip R. Assembly Language for x86 Processors 6/e, Your turn....data bVal BYTE 100 bVal2 BYTE ? wVal WORD 2 dVal DWORD 5.code mov ds,45 mov esi,wVal mov eip,dVal mov 25,bVal mov bVal2,bVal Explain why each of the following MOV statements are invalid: immediate move to DS not permitted size mismatch EIP cannot be the destination immediate value cannot be destination memory-to-memory move not permitted

Irvine, Kip R. Assembly Language for x86 Processors 6/e, Zero Extension mov bl, b movzx 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.

movzx with eax register Irvine, Kip R. Assembly Language for x86 Processors 6/e, call DumpRegs mov bl, b; chart Zero Extension movzx eax,bl; showing movzx with eax register call DumpRegs

Irvine, Kip R. Assembly Language for x86 Processors 6/e, Sign Extension mov bl, b movsx 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.

Irvine, Kip R. Assembly Language for x86 Processors 6/e, XCHG Instruction.data var1 WORD 1000h var2 WORD 2000h.code xchg ax,bx; exchange 16-bit regs xchg ah,al; exchange 8-bit regs xchg var1,bx; exchange mem, reg xchg 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.

Irvine, Kip R. Assembly Language for x86 Processors 6/e, Direct-Offset Operands.data arrayB BYTE 10h,20h,30h,40h.code mov al,arrayB+1; AL = 20h mov 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?

Irvine, Kip R. Assembly Language for x86 Processors 6/e, Direct-Offset Operands (cont).data arrayW WORD 1000h,2000h,3000h arrayD DWORD 1,2,3,4.code mov ax,[arrayW+2]; AX = 2000h mov ax,[arrayW+4]; AX = 3000h mov eax,[arrayD+4]; EAX = h 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?

Example Program Irvine, Kip R. Assembly Language for x86 Processors 6/e,

Irvine, Kip R. Assembly Language for x86 Processors 6/e, Your turn... Write a program that rearranges the values of three doubleword values in the following array as: 3, 1, 2..data arrayD 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,arrayD xchg eax,[arrayD+4] xchg eax,[arrayD+8] mov arrayD,eax

xchg Example Irvine, Kip R. Assembly Language for x86 Processors 6/e, ; xchg examples mov eax,arrayD xchg eax,[arrayD+4] xchg eax,[arrayD+8] mov arrayD,eax mov eax, [arrayD] mov ebx, [arrayD+4] mov ecx, [arrayD+8] callDumpRegs

Irvine, Kip R. Assembly Language for x86 Processors 6/e, Evaluate this... We want to write a program that adds the following three bytes:.data myBytes 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

Adding Irvine, Kip R. Assembly Language for x86 Processors 6/e, mov al,myBytes callDumpRegs add al,[myBytes+1] add al,[myBytes+2] callDumpRegs 18B

Irvine, Kip R. Assembly Language for x86 Processors 6/e, Evaluate this... (cont).data myBytes BYTE 80h,66h,0A5h How about the following code. Is anything missing? movzx ax,myBytes mov bl,[myBytes+1] add ax,bx mov bl,[myBytes+2] add ax,bx; AX = sum Yes: Move zero to BX before the MOVZX instruction. 18B

Evaluate this... (cont) Irvine, Kip R. Assembly Language for x86 Processors 6/e, ; more movezx examples movzx ax,myBytes mov bl,[myBytes+1] add ax,bx mov bl,[myBytes+2] add ax,bx; AX = sum callDumpRegs 18B

Evaluate this... (cont) Irvine, Kip R. Assembly Language for x86 Processors 6/e, ; more direct-offset examples mov bx,0 movzx ax,myBytes mov bl,[myBytes+1] add ax,bx mov bl,[myBytes+2] add ax,bx; AX = sum callDumpRegs