Click to add Title Fundamentals of Assembly Language Click To add Subtitle

advertisement
Comunicación y Gerencia
Fundamentals of Assembly Language
Click to add
Title
Click to add Text
Click To add Subtitle
Lesson plan
• Review of existing concepts
• Data transfer instructions
– Practice
• Basic arithmetic instructions and
Repetitive move operations
– Practice
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
Data transfer instructions
• MOV instruction
– 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
MOV CX, D
MOV ES, AX
MOV AX, 215
; // Move content of AX to the variable F
;// Move value of D to CX
Note
• MOV instruction can’t:
• set the value of the CS and IP registers.
• copy value of one segment register to another segment
register (should copy to general register first).
MOV ES, DS
•copy immediate value to segment register (should copy to
general register first).
MOV DS, 100
MOVSB and MOVSW
• MOVSB:
Copy byte at DS:[SI] to ES:[DI]. Update SI and DI.
Algorithm:
ES:[DI] = DS:[SI]
if DF = 0 then
SI = SI + 1
DI = DI + 1
else
SI = SI - 1
DI = DI - 1
DF: direction flag from the flag register
MOVSB and MOVSW
• MOVSW:
Copy word at DS:[SI] to ES:[DI]. Update SI and DI.
ES:[DI] = DS:[SI]
if DF = 0 then
SI = SI + 2
DI = DI + 2
else
SI = SI - 2
DI = DI - 2
DF: direction flag from the flag register
XCHG instruction
• XCHG swap the two data items
[label:] XCHG
register/memory, register/memory
Example:
MOV AL, 5
MOV AH, 2
XCHG AL, AH
XCHG AL, AH
; AL = 2, AH = 5
; AL = 5, AH = 2
LEA instruction
• Load Effective Address.
REG = address of memory (offset)
[label:] LEA register/memory
Example:
LEA AX, m ;load offset address of m to AX
Arithmetic instructions
• INC and DEC instruction
– Increasing or decreasing the contents of register or
memory location by 1
[label:] INC/DEC register/memory
Flag: OF, SF and ZF
OF: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.
Arithmetic instructions
• ADD
[label:] ADD/SUB operand1, operand 2
operand1 =operand 1 + operand 2
Operand 1: register/memory
Operand 2: register/memory/immediate
Arithmetic instructions
• SUB
[label:] SUB operand1, operand 2
operand1 =operand 1 - operand 2
operand 1: register/memory
operand 2: register/memory/immediate
Arithmetic instructions
• MUL
operand
Unsigned multiply.
Operand: register/memory
Arithmetic instructions
• IMUL
operand
Signed multiply.
Operand: register/memory
Example:
MOV AX, -2
MOV CX, -3
IMUL CX
;
AX = +6
CF = 0
Arithmetic instructions
• DIV
operand
Unsigned multiply.
Operand: register/memory
when operand is a byte:
AL = AX / operand
AH = remainder (modulus)
when operand is a word:
DX = remainder (modulus)
Arithmetic instructions
• IDIV
operand
Signed multiply.
Operand: register/memory
when operand is a byte:
AL = AX / operand
AH = remainder (modulus)
when operand is a word:
DX = remainder (modulus)
Practice
Write a program to convert from Celsius to
Fahrenheit and vice versa:
Tc = (5/9)*(Tf-32)
Tc: censius
Tf: fahrenheit
(The result may not be accurate due to the
integer division but that is fine)
Repetitive move instructions
TITLE A04ASM1 (EXE) Move and add operations
; --------------------------------------------STACK SEGMENT PARA STACK 'Stack'
DW
32 DUP(0)
STACK ENDS
; ---------------------------------------------DATASEG
SEGMENT PARA 'Data'
STRING1 DB "12345678","$"
STRING2 DB ?
DATASEG
ENDS
Repetitive move instructions
CODESEG SEGMENT PARA 'Code'
MAIN
PROC FAR
MOV AX, dataseg
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
MAIN
CODESEG ENDS
END
MAIN
ENDP
;End of procedure
;End of program
Result
Repetitive move instructions
• DEC CX
ZF = 1 if CX = 0
• JNZ LABEL
if ZF = 0 then jump to the label
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
Addressing mode
• Register addressing:
E.g
ADD AX, BX
fastest type of operations
• Immediate addressing
Immediate contains a constant value or an expression
E.g:
MOV AX, 0245H
• Direct memory addressing
One of operand references a memory location and the
other operand references a register
E.G
MOV FLDF, AX
Addressing mode
• Direct-Offset addressing
use arithmetic instruction to modify an
address
e.g MOV CX, DATAZ+2
• Indirect memory addressing
Use BX and BP, DI and SI within [ ]
e.g. MOV [BX], CL
Addressing mode
Base Displacement Addressing
Uses BX, BP and DI, SI and combine with
a displacement to form an effective
address
E.g
MOV AL,[SI+2]
Base-Index Addressing
Combine BX,BP with DI,SI to form
effective address
E.G
MOV AL,[BX+SI]
Addressing mode
Base-Index Displacement Addressing
Combine BX, BP and DI, SI and a
displacement to form an effective address
E.g
MOV AL,[BX+SI+2]
NEAR and FAR address
NEAR address
consists of 16 bit offset portion of an address
used in real mode
FAR address
consists of both the segment and offset portions
in the form of 32 bit segment:offset
SEGMENT OVERRIDE PREFIX
Example:
MOV ES:[SI+2], CL ; move CL to ES:[SI+2]
Download