Assembly Language Lecture 4

22
Assembly Language Fundamentals of Assembly language Motaz K. Saad Spring 2007 1 Motaz K. Saad, Dept. of CS

description

Assembly Language Lecture 4

Transcript of Assembly Language Lecture 4

Page 1: Assembly Language Lecture 4

Assembly LanguageFundamentals of Assembly

language

Motaz K. SaadSpring 2007

1Motaz K. Saad, Dept. of CS

Page 2: Assembly Language Lecture 4

Review of existing concepts• Comments• Directives (page, segment, title)• Data type (Byte (DB), Word(DW),

Doubleword(DD), String• Some arithmetic operations:

ADD,SUB,MUL,DIV

2Motaz K. Saad, Dept. of CS

Page 3: Assembly Language Lecture 4

Operand Types

• Three basic types of operands:– 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

Motaz K. Saad, Dept. of CS 3

Page 4: Assembly Language Lecture 4

Data transfer instructions• MOV instruction

• Move from source to destination. Syntax:• MOV destination,source

– Transfers data referenced by the address of the second operand to the address of the first operand

– Destination has to have the same length as source[label:] MOV register/memory register/memory/immediate

Example:MOV F, AX ; // Move content of AX to the variable FMOV CX, D ;// Move value of D to CXMOV ES, AXMOV AX, 215

4Motaz K. Saad, Dept. of CS

Page 5: Assembly Language Lecture 4

MOV Instruction

.datacount DB 100wVal DW 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

MOV VAR1,VAR2 • CS, IP, and IP cannot be the destination

MOV IP, 100• No immediate to segment moves

MOV DS, @DATA

5Motaz K. Saad, Dept. of CS

Page 6: Assembly Language Lecture 4

• Load Effective Address. REG = address of memory (offset)

LEA register/memory

Example:LEA AX, m ;load offset address of m to AX

LEA instruction

6Motaz K. Saad, Dept. of CS

Page 7: Assembly Language Lecture 4

Arithmetic instructions• INC and DEC instruction

– Increasing or decreasing the contents of register or memory location by 1

INC/DEC register/memory

Flag: OF, SF and ZFOF:is set when an instruction resulted in a carry into the sign

bit of the result. SF: is set if the sign bit of a result is set ZF: is set if the result is equal to 0.

7Motaz K. Saad, Dept. of CS

Page 8: Assembly Language Lecture 4

Arithmetic instructions

• ADDADD/SUB operand1, operand 2

operand1 =operand 1 + operand 2Operand 1: register/memoryOperand 2: register/memory/immediate

8Motaz K. Saad, Dept. of CS

Page 9: Assembly Language Lecture 4

Arithmetic instructions

• SUBSUB operand1, operand 2

operand1 =operand 1 - operand 2

operand 1: register/memoryoperand 2: register/memory/immediate

9Motaz K. Saad, Dept. of CS

Page 10: Assembly Language Lecture 4

Arithmetic instructions

• MUL operandUnsigned multiply.

Operand: register/memory

10Motaz K. Saad, Dept. of CS

Page 11: Assembly Language Lecture 4

Arithmetic instructions

• IMULoperandSigned multiply.

Operand: register/memoryExample:

MOV AX, -2MOV CX, -3IMUL CX ; AX = +6

CF = 0

11Motaz K. Saad, Dept. of CS

Page 12: Assembly Language Lecture 4

Arithmetic instructions

• DIV operandUnsigned multiply.

Operand: register/memorywhen operand is a byte:

AL = AX / operandAH = remainder (modulus)

when operand is a word:DX = remainder (modulus)

12Motaz K. Saad, Dept. of CS

Page 13: Assembly Language Lecture 4

Arithmetic instructions

• IDIV operandSigned multiply.

Operand: register/memorywhen operand is a byte:

AL = AX / operandAH = remainder (modulus)

when operand is a word:DX = remainder (modulus)

13Motaz K. Saad, Dept. of CS

Page 14: Assembly Language Lecture 4

Write a program to convert from Celsius to Fahrenheit and vice versa:

Tc = (5/9)*(Tf-32)

Tc: censiusTf: fahrenheit

(The result may not be accurate due to the integer division but that is fine)

Practice

14Motaz K. Saad, Dept. of CS

Page 15: Assembly Language Lecture 4

Repetitive move instructionscopying a string to another

TITLE A04ASM1 (EXE) Move and add operations; ---------------------------------------------.STACK; ----------------------------------------------.DATA STRING1 DB "12345678","$" STRING2 DB ?

15Motaz K. Saad, Dept. of CS

Page 16: Assembly Language Lecture 4

Repetitive move instructions.CODEMAIN PROC FAR MOV AX, @DATA MOV DS, AX MOV ES, AX MOV CX, 09 ; Initialize to move 9 characters LEA SI, STRING1 ; Initialize source index register to offset of string 1 LEA DI, STRING2 ; Initialize destination index register to offset of string 2

BEGINLOOP: MOV AL,[SI] ; Get a current character from string 1 to AL MOV [DI], AL ; Move it to the current character in string 2 INC SI ; Move to the next character in string 1 INC DI ; Move to the next character in string 2 DEC CX ; Decrease the count for loop JNZ BEGINLOOP ; Continue to loop if count is not 0 MOV AH, 09H LEA DX, STRING2 int 21H ; Display String 2 .EXITMAIN ENDP ;End of procedureEND MAIN ;End of program 16Motaz K. Saad, Dept. of CS

Page 17: Assembly Language Lecture 4

Repetitive move instructions• DEC CX

ZF = 1 if CX = 0

• JNZ LABEL

if ZF = 0 then jump to the label

17Motaz K. Saad, Dept. of CS

Page 18: Assembly Language Lecture 4

Practice• Develop an assembly program to:

– Define byte items: BYTE1 and BYTE2 (Assign any values for these two variables)

– Define a word item: WORD3 and WORD3=0– Move content of Byte1 to AL– Add content of Byte2 to AL– Set DL= 42H– Exchange the content of AL and DL– Multiply the contents of AL by DL– Transfer product from AX to WORD3

18Motaz K. Saad, Dept. of CS

Page 19: Assembly Language Lecture 4

Addressing mode

• Register addressing: E.g ADD AX, BX

fastest type of operations• Immediate addressing

Immediate contains a constant value or an expressionE.g: MOV AX, 0245H

• Direct memory addressingOne of operand references a memory location and the other

operand references a registerE.G MOV FLDF, AX

19Motaz K. Saad, Dept. of CS

Page 20: Assembly Language Lecture 4

Addressing mode

• Direct-Offset addressinguse arithmetic instruction to modify an address

e.g MOV CX, DATAZ+2• Indirect memory addressingUse BX and BP, DI and SI within [ ]e.g. MOV [BX], CL

20Motaz K. Saad, Dept. of CS

Page 21: Assembly Language Lecture 4

Addressing mode

Base Displacement AddressingUses BX, BP and DI, SI and combine with a displacement to form an effective addressE.g MOV AL,[SI+2]

Base-Index AddressingCombine BX,BP with DI,SI to form effective address

E.G MOV AL,[BX+SI]

21Motaz K. Saad, Dept. of CS

Page 22: Assembly Language Lecture 4

Addressing mode

Base-Index Displacement AddressingCombine BX, BP and DI, SI and a displacement to form an effective addressE.g MOV AL,[BX+SI+2]

22Motaz K. Saad, Dept. of CS