Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
MOV Revisted
24000H
24001H
25000H
25001H
Ex 2
MOV BX, 2000H MOV DI, 10H MOV AL, [BX+DI]
MOV
DST,SRC
Copies the contents of source to destination No Flags Affected Size of source and destination must be the same Source can be register, memory, or immediate data
Types of Instruction
Data Transfer Instructions Arithmetic Instructions Logical Instructions Branch and Program control Instructions
INC Destination
INC BL INC BX
DEC Destination
Specify the data size in memory use directive BYTE PTR, WORD PTR, DWORD PTR INC WORD PTR [BX]
21000 21000
21001 21001
Flags
INC WORD PTR [BX]
OF 0 SF 0 ZF -1 PF -1 AF -1
Branch Instructions
JE/JZ JNE/ JNZ Displacement (-128 to +127) Displacement (-128 to +127)
Copy a block of data from one memory area to another memory area- from 42000H 50 data to 44000H
00 11011000 00 00 32
40 20 40 00
X1:
MOV
MOV INC
BL,[SI]
[DI],BL SI
10001010
10001000 01000110 01000111 01001001 01110101
00011100
00011101
INC
DEC JNZ
DI
CX X1
displacement
B8 8E BE BF B9
00 D8 00 00 32
40 20 40 00
00014 49
00015 75 00016 XX 00017
8A
88 46 47 49 75
1C
1D
00008 BF
00009 00 0000A 40 0000B B9
0000C 32
displacement
INC Destination
INC BL INC BX
DEC Destination
Branch Instructions
JE/JZ JNE/ JNZ Displacement (-128 to +127) Displacement (-128 to +127)
Copy a block of data from one memory area to another memory area- from 42000H 50 data to 44000H
42003H
42004H
32
34
44003H
42030H 42031H
45 67
44030H 44031H
10111000
10001110 10111110 10111111 10111001
00
11011000 00 00 32
40
20 40 00
X1:
MOV
MOV INC
BL,[SI]
[DI],BL SI
INC
DEC JNZ
DI
CX X1
NXT:
10001010 10001000
00011100 00011101
01000110
01000111 01001001 01110101 displacement
B8 8E BE BF B9
00 D8 00 00 32
40 20 40 00
00014 49
00015 75 00016 XX 00017
8A
88 46 47 49 75
1C
1D
00008 BF
00009 00 0000A 40 0000B B9
0000C 32
displacement
Source may be an immediate no. /register/ a memory location specified by any one of the 24 addressing modes Destination may be a register / memory location specified by any one of the 24 addressing methods Both source and destination in an instruction cannot be memory locations
Example
MOV CL, 73H MOV BL, 4FH ADD CL, BL 0111 0011 0100 1111
Result in CL = C2H
11000010b
ADC
DESTINATION, SOURCE
(Destination)
98
1
34 F3 27
56 67 BE
AB 90 3C
EF 10 00
41000 1B 21 41001 00 10 90 41002 3C 67 41003 BE
FA 21 1B
71 0A
40004 34
40005 98
F3 41004 27
71 41005 0A 41006 01
CLC
Add 2 6 byte nos stored in location 20000H and 21000H store the result starting from location 21000H
MOV MOV MOV MOV MOV MOV CLC X1: MOV ADC INC INC
DEC
JNZ JNC INC X2: MOV
CL
X1 X2 BL [DI],BL
Subtract
SUB DESINATION, SOURCE
(Destination)
(Destination)
Example
MOV BX,8021H SUB BX,8190H
8 0 2 1 8 7 8 0 E 1 2 7 9 1 0
8
F
1
E
9
9
0
1
Write a Program to add an array of bytes stored in Memory starting at 40000H and store the result in 41000H Number of elements in the array 50d
Write a Program to add an array of bytes stored in Memory starting at 40000H and store the result in 41000H Number of elements in the array 50d
MOV
MOV MOV MOV MOV MOV MOV
AX, 4000H
DS,AX SI,0000H DI,1000H CX,0032H BL,00 BH,BL
B8 8E BE BF B9
00 D8 00 00 32
40 10 10 00
B3
8A
00
FB
X1:
BL,[SI] X2 BH SI CX X1 [DI],BX
X2:
02 73
1C X2
FE
46 49 75 89
C7
X1 1D
B8
8E BE BF B9 B3 8A
00
D8 00 00 32 00 FB
40
10 10 00
00000 B8
00001 00 00002 40 00003 8E
00010 8A
00011 FB 00012 02 00013 1C 00014 73 00015 YY 0016 0017 0018 FE C7 46
YY 02 XX F6
00004 D8
00005 BE 00006 00 00007 00 00008 BF 00009 00 0000A 10 0000B B9 0000C 32 0000D 00 0000E B3 0000F 00
02
73 FE 46 49 75 89
1C
YY C7
0019
001A 001B 001C 001D
49
75 XX 89 1D
XX 1D
00012H 0001CH
F6H
Data Declaration
DB, DW, DD
DATA1
DATA2 DATA3 ORG
DB
DW DD 0000H
ORG DB DB DB
ORG DB 0018H DB
0010 32H
0011
0012
35H
39H
0013
31H
0000 31
0001 0002 0003 0004 0005 0006 0007 0008 32 33 34 35 36 67 66 01
0010
0011 0012 0013 0014 0015 0016 0017 0018
00
45 23 00 03 00 00 FF FF data2 MSG2 MSG3 data1
ORG DB DW db db db
dw dw dd DB
0009 02
000A 03
0019
001A
FF
FF
000B 61
000C F0 000D 0C 000E 00 000F 0D
001B
001C 001D 001E 001F
FF
FF FF FF FF
EQU Directive
Equate directive equates a symbolic name to a value COUNT EQU 10
CONST
EQU 20H
MOV AH, COUNT MOV AL, CONST ADD AH,AL
RES DWRD
0010H 32H 0030H 45H, 67H ,100,A 10H,3500H,0910H 0902H 32H 2 DUP(0) VAL1 56H VAL2 10DUP(?) 01020304H
DAT1
45 67 64 41 10 00 00 35 10 09 02 09 00 00 00
0020 0021 0022 0023 0024 0025 0026 0027 0028 0029 002A 002B 002C 002D 002E 002F
00 00
DAT4 RES
0030 0031 0032 0033 0034 0035 0036 0037 0038 0039 003A 003B
56 X X X X X X X X X X 04 02 01
WRD
DAT2
DWRD
003D 03
MOV MOV MOV ADD MOV LEA MOV MOV MOV MOV MOV MOV
SI,DAT3 AL, DAT1 + 1 BX, DAT1+4 BX,20H AL,[BX] BX,DAT4 AL,[BX] BX,VAL1 AL,[BX] BX, OFFSET DAT4 AL,[BX] AL,DAT4
The number of bytes in a physical memory segment is 64K for 16-bit processors or 4 gigabytes for 32-bit processors
A variable-sized block of memory- called a logical segment occupied by a programs code or data
Logical Segments
Mapping of Logical segments to actual physical segments in memory Load Segment Registers with actual physical addresses
Logical Segments
Models
There are many models available to MASM Assembler ranging from Tiny to Huge To designate a model use the .MODEL statement followed by the size of the memory system Ex: .MODEL TINY TINY Model requires that all program and data fit into one 64K segment
. CODE defines code segment . DATA defines data segment . STARTUP . EXIT
30000H
Code Segment/Data Segment/Stack Segment
3FFFFH
Ex1
.model tiny .data DATA1 DB DATA2 DW DATA3 DW ARRAY DW .code .startup MOV MOV MOV MOV MOV MOV .exit end 23 9999h 9999 01,02,03,04,05,06,07,08 BX,DATA2 CX,DATA3 DATA1,BL DL,DATA1 DI,0002H AX, ARRAY [DI]
Ex 2
.DATA DATA1 DB ARRAY DW
.CODE MOV MOV DX, ARRAY CL, DATA1 23H 01,02,03,04,05,06,07,08
MOV MOV
Write an ALP to find the greatest signed no. From a set of 10 bytes stored at array. The greatest no. must be stored at location RES
COMPARE INSTRUCTION
CMP CX, BX CX = BX CX < BX CX > BX CF-0 ZF-1 SF-0 CF-1 ZF-0 SF-1 CF-0 ZF-0 SF-0
JBE/JNA
JE/JZ JNE/JNZ
CF-1 OR ZF-1
ZF-1 ZF-0
WRITE AN ALP TO FIND THE GREATEST SIGNED NO. FROM A SET OF 10 BYTES STORED AT ARRAY. THE GREATEST NO. MUST BE STORED AT LOCATION RES
DB DB
LEA MOV MOV DEC INC CMP JGE MOV INC DEC JNZ MOV
X2:
X1:
.exit end
Description All the data and code fit in one segment. Tiny programs are written in .COM which means the program must be originated at location 100H Contains two segments - One DS of 64k bytes and one CS of 64k bytes
Small
Description Contains one DS of 64kbyte and any number of CS for large programs One CS contains the program and any number of DS contains the data allows any number of CS & DS Same as large - but the DSs may contain more than 64k bytes each
.Model Tiny .data dat1 db 'a align 2 dat2 db 'b' .code .startup mov al,dat1 add dat2,al .exit end
.Model Small
.stack .data dat1 db 'a align 2 dat2 db 'b' .code .startup mov al,dat1 add dat2,al .exit end
Memory Map
PSP Code Data
IP
0100H
010CH FFFEH
Model Tiny
SP
0B50H
0B60H 0B62H 0B62H
ES
PSP
Memory Map
Model Small 0000H 0020H 0410H
CS:IP DS SS:SP
Code
Data Stack
.MODEL SMALL
; This statement is reqd before ; you can use other simplified ; segment directives ; Use default 1-kilobyte stack ; Begin data segment ; Place data declarations here
; Begin code segment ; Generate start-up code ; Place instructions here ; Generate exit code
.STACK .DATA
.CODE .STARTUP .EXIT END