Date post: | 17-Dec-2015 |
Category: |
Documents |
Upload: | esmond-rose |
View: | 224 times |
Download: | 0 times |
Memory modelModel Description
SMALL Code in one segment
Data in one segment
MEDIUM Code in > 1 segment
Data in one segment
COMPACT Code in one segment
Data in > 1 segment
LARGE Code in > one segment
Data in > 1 segment
Array is not more than 64KB
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 DW 2– WORD2 DW 5– MSG DB ‘INI ADALAH MESEJ’– MASK 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 SMALLSTACK 100H.DATA;data declaration starts here.CODEMAIN PROC;instruction starts hereMAIN ENDP;other procedures starts hereEND 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 /immediate value
MOV AX,5H
Memory Constant /immediate value
MOV [BX],45H
General register Segment register MOV AX,DS
Segment register Memory MOV DS,[BX]
Memory Constant /immediate value
MOV [BX],25H
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 variabletitle Exchange Two Variables (Exchange.asm).model small.stack 100h.datavalue1 db 0Ahvalue2 db 14h.codemain 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 ; exit program int 21hmain endpend main
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
FormatADD OD,OS ;where OD=destination
;operand ;OS=source operand
ADD OD,OSOD+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
.datamembyte db 25memword dw 36doubleVal dd 12340000h.codeadd al,5add bx,axadd eax,edxadd membyte,aladd memword,bxadd 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
AX BX Carry Flag
1 Before 1234H 0001H x
After 1235H 0001H 0
2 Before 1234H EF00H x
After 0134H EF00H 1
SUB InstructionFormat : 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
.datamembyte db 25memword dw 36doubleVal dd 12340000h.codesub al,5sub bx,axsub eax,edxsub membyte,alsub memword,bxsub doubleVal,edx