Assembly Language Lecture 4

Post on 06-May-2015

14.395 views 2 download

description

Assembly Language Lecture 4

Transcript of Assembly Language Lecture 4

Assembly LanguageFundamentals of Assembly

language

Motaz K. SaadSpring 2007

1Motaz K. Saad, Dept. of CS

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

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

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

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

• 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

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

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

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

Arithmetic instructions

• MUL operandUnsigned multiply.

Operand: register/memory

10Motaz K. Saad, Dept. of CS

Arithmetic instructions

• IMULoperandSigned multiply.

Operand: register/memoryExample:

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

CF = 0

11Motaz K. Saad, Dept. of CS

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

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

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

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

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

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

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

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

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

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

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