Kuliah 10(b)

Download Report

Transcript Kuliah 10(b)

Memory model
Model
SMALL
Description
Code in one segment
Data in one segment
MEDIUM
Code in > 1 segment
Data in one segment
Code in one segment
Data in > 1 segment
Code in > one segment
Data in > 1 segment
Array is not more than 64KB
COMPACT
LARGE
HUGE
Code in > 1 segment
Data in > one segment
Aray is larger than 64KB
Data Segment
Contain all variable declaration
 To declare data segment, directive
.DATA, followed by variable or constant
declaration
 E.g.

– .DATA
– WORD1
– WORD2
– MSG
– MASK
DW 2
DW 5
DB ‘INI ADALAH MESEJ’
EQU 10010010B
Stack Segment
Is used to reserve one memory block to
store stack
 Definition syntax

.STACK
size (size is optional)
E.g: .STACK
100H

The above statement will prepare 100h
byte for stack area
Code Segment
Contain program instructions
 Syntax declaration
.CODE name
;where name is
;the chosen of
;the segment
 Instruction is in procedure form


Simple procedure declaration:
name
PROC
; procedure body
name
ENDP
where name (procedure name); PROC and
ENDP (pseudo-op which describe
procedure)

Eg:
.CODE
MAIN PROC
;main procedure instruction
MAIN ENDP
;other procedure starts here
Combination of segments

One general form programming model using memory
model. .SMALL can be constructed
.MODEL
SMALL
STACK 100H
.DATA
;data declaration starts here
.CODE
MAIN
PROC
;instruction starts here
MAIN
ENDP
;other procedures starts here
END
MAIN

Last line must be END, followed by main procedure
name
8086 Instruction Set
Instruction Types
Data transfer instruction
 Arithmetic instruction
 Bit control instruction
 Compare instruction
 Jump/branch instruction
 Loop instruction

Data Transfer Instruction

Used to transfer data
– Between one internal register with other
internal register
– Between internal register with one storage
location in memory
– Between one internal register with
immediate value

Instructions such as MOV and XCHG
MOV (MOVe)

Transfer from source operand to destination
operand
 Format
MOV OD, OS ;where OS= source
;operand
;OD=destination
;operand

Execution example
Source Operand
Destination
Operand
Before operation
XXX
YYY
After operation
XXX
XXX
Destination
operand
Source operand Example
General register
General register
MOV AX, BX
Segment register
General register
MOV DS, AX
Memory
Register
MOV [BX],AX
General register
Memory
MOV AX,BETA
Register
Constant
MOV AX,5H
/immediate value
Memory
Constant
MOV [BX],45H
/immediate value
General register
Segment register MOV AX,DS
Segment register
Memory
Memory
Constant
MOV [BX],25H
/immediate value
MOV DS,[BX]
Valid source and destination operand


To transfer both source and destination operand
which is the memory space can be done with
instruction
MOV AX,BETA ;copy BETA content into AX
MOV ALPHA,AX ;copy AX content into
;ALPHA
Transger must be between equivalent data size,
example:
MOV AL,1234H ;is not allowed because
;insert data with 16-bit size
;into 8-bit size register

Example copy MOV instruction with
register addressing mode and direct
addressing mode
– Register addressing mode
MOV AX,BX  (BX)  (AX)
– Direct addressing mode
MOV CX,[ABCD]  ((DS)OH+ABCD)  (CL)
((DS)OH+ABCD+1)(CH)
XCHG (EXCHange)
Exchangfe between source operand with
destination operand
 Format

XCHG OD,OS

;where OD=destination
;operand
;OS=source operand
Instruction execution XCHG AX,DX
AX
DX
Before
XXX
YYY
After
YYY
XXX
Can involve 8 and 16 bit data but size must
be equivalent
 For instruction involve memory space like

XCHG [SUM],BX
exchange is as
XCHG [SUM],BX  ((DS)OH+SUM)BX
Exchange 2 variable
title Exchange Two Variables
(Exchange.asm)
.model small
.stack 100h
.data
value1 db 0Ah
value2 db 14h
.code
main proc
mov ax,@data
; initialize DS register
mov ds,ax
mov al,value1
; load the AL register
xchg value2,al
; exchange AL and value2
mov value1,al
; store AL back into value1
mov ax,4C00h
int 21h
main endp
end main
; exit program
Arithmetic Instruction
Involve additional instruction (ADD),
subtraction (SUB), multiplication (MUL)
and division (DIV)
 Also contain this instruction variation
 For instruction such as ADC instruction
including carry flag instruction

ADD (ADDition)
Perform addition between source operand
and destination operand and result is
stored in operand destination
 Format

ADD OD,OS
;where OD=destination
;operand
;OS=source operand
ADD OD,OS
OD+OS OD
(if there is a carry, carry flag,
CF=1)
ADD instruction
Source operand can be register,
immediate value or memory
 Destination operand can be register or
memory
 Only one operand can be memory
operand

ADD Instruction Examples
.data
membyte
db 25
memword
dw 36
doubleVal
dd 12340000h
.code
add al,5
add bx,ax
add eax,edx
add membyte,al
add memword,bx
add doubleVal,edx

Valid destination operand and source
operand combination
Destination
operand
Source operand
Instruction
example
General register
General register
ADD AX,DX
Memory
General register
ADD [BX],AX
General register
Memory
ADD AX,[BX]
Immediate value
General register
ADD AX,35
Immediate value
Memory
ADD BYTE PTR
[BX],5H
Instruction example

If AX=1234H, BX=0001H, therefore
ADD AX,BX is as in the table below
1
2
AX
BX
Carry Flag
Before
1234H
0001H x
After
1235H
0001H 0
Before
1234H
EF00H x
After
0134H
EF00H 1
SUB Instruction
Format : SUB OD, OS ;where OS source operand
;OD destination operand
 Subtract source operand from destination operand
 Source operand can be register, immediate value
or memory
 Destination operand can be register or memory
 Only one operand can be memory operand
SUB Instruction Example
.data
membyte
db 25
memword
dw 36
doubleVal
dd 12340000h
.code
sub al,5
sub bx,ax
sub eax,edx
sub membyte,al
sub memword,bx
sub doubleVal,edx